Tag: javax.imageio

用于JPEG无损解码的100%Java库

我正在寻找一个100%Java的库,可以用jpeg无损压缩解码JPEG图像。 我知道ImageIO和JAI已经可以解码这些图像,但它们需要一个本机代码,并不是所有操作系统都存在。 我会考虑开源和关闭源解决方案,如ImageIO插件或独立。

ImageIO读取的RGB值略微不同于其他方法

我发现在使用Java(实际上是绘制.NET )时,我使用的不同是RGB,而不是使用ImageMagick,Gimp,Python和Octave。 最后4个都同意彼此,所以我假设是正确的。 对于这些示例,我正在使用此测试图像: http://farm3.static.flickr.com/2811/9177301733_9836174725_o.jpg : http://farm3.static.flickr.com/2811/9177301733_9836174725_o.jpg 测试像素x=4144 y=2768 RGB Java = (125, 107, 69) Paint.NET = (125, 107, 69) ImageMagick = (128, 106, 67) Python = (128, 106, 67) Octave = (128, 106, 67) Gimp = (128, 106, 67) 是什么赋予了? 这是使用imagemagick的快速测试: convert image.jpg -crop 1×1+4144+2768 -depth 8 txt: 输出: # ImageMagick pixel enumeration: 1,1,65535,srgb […]

Java – ImageIO.write的加载文件在.jar中不起作用

我正在用Java制作游戏,我想将随机生成的地图保存在图像上,然后加载它。 我的代码在Eclipse中没有问题,但是当我将它导出到.jar / .exe文件时,它会产生一个文件(“mapf”)。 谢谢您的回答。 private void makeMap(){ combined = new BufferedImage(maxX*Game.TILESIZE, maxY*Game.TILESIZE+16, BufferedImage.TYPE_INT_ARGB); //draw tiles Graphics g2 = combined.getGraphics(); for(int y = 0; y < tiles[1].length; y++){ for(int x = 0; x < tiles.length; x++){ if(tiles[x][y] != 0){ getTile(tiles[x][y]).render(g2, x * Game.TILESIZE, y * Game.TILESIZE); } } } //Save as new image try { […]

jar文件中的ImageIO

好的,所以我正在尝试为我的介绍屏幕制作一个API用于多个游戏,我花了最后5-6个小时试图弄清楚这个问题。 假设我在我的游戏中引用了API.jar,并且我试图调用方法getByteArray(),该方法应该将帧加载为BufferedImage然后返回byte []数据。 尝试加载图像时,我经常得到input == null。 public byte[] getByteArray() throws IOException { // Open Image String url = “/com/jumpbuttonstudio/api/resources/intro/Frame (” + current_frame + “).jpg”; System.out.println(“Loading: ” + url); BufferedImage img = ImageIO.read(getClass().getClassLoader().getResourceAsStream(url)); DataBufferByte data = (DataBufferByte) img.getRaster().getDataBuffer(); return (data.getData()); } 我真的需要帮助,如果需要,我可以提供更多信息。 注意 上面的代码在API.jar中,所有图像都是如此。

Javax ImageIO IIO例外显然没有理由

嘿所有,我有一个Java问题。 对于我的高级研究class,我已经完成了,但我只需要分析我生成的图像中的一些数据。 我不想把它标记为作业,因为它不是任何必要任务的一部分……这是我自己想出来收集结果的东西。 我写了一个程序,逐个像素地比较两个图像。 它为两个目录中的所有.bmp文件执行此操作。 现在,我的程序将文件名读入一个String数组,并检查了所有文件名的值,所以我知道目录和文件名最初是正常访问的。 这是有问题的代码: public static void main(String[]args) throws IOException { File actualDir = new File(“C:\\Users\\Rowe\\Desktop\\testExpect”); String actualFiles[] = actualDir.list(); File expectedDir = new File(“C:\\Users\\Rowe\\Desktop\\testExpect2”); String expectedFiles[] = expectedDir.list(); int[][] stats = new int[actualFiles.length][6]; // Holds all info //Columns, Rows, Total, redMatches, shouldaBeenRed, badRed for(int i = 0; i < actualFiles.length; i++) […]

如何使用ImageWriter和ImageIO在Java中编码动画GIF?

我到处都看了,但似乎找不到任何易于理解的解释。 (我发现其他Java用户编写的类和方法可以做到这一点,但我希望自己编写。)

如何从ImageIO中排除特定的TIFF阅读器?

堆: Java – 1.8.0_91 斯卡拉 – 2.11.8 图书馆 – it.geosolutions.imageio-ext imageio-ext-tiff 1.1.15 我们正在阅读许多旧的TIF图像,并且出于某种原因,读取是高度不一致的 – 由于某些原因,在不同的运行中读取相同的图像可能成功或失败,例外 – javax.imageio.IIOException: Invalid component ID 3 in SOS at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1236) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1039) at com.sun.media.imageioimpl.plugins.tiff.TIFFOldJPEGDecompressor.decodeRaw(TIFFOldJPEGDecompressor.java:654) at com.sun.media.imageio.plugins.tiff.TIFFDecompressor.decode(TIFFDecompressor.java:2527) at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.decodeTile(TIFFImageReader.java:1137) at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1417) 代码是这样的: import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import javax.imageio.ImageIO def convertToPng(data: Array[Byte]): Array[Byte] = { val inputStream = new ByteArrayInputStream(data) […]

从imageReader写回修改后的图像

我从动画gif中读取分离的图像,我只需要在frames[i]对它们进行更改,然后将它们设置回文件并以writer作为新文件保存。 File file = new File(“gif1.gif”); ImageReader reader = ImageIO.getImageReadersBySuffix(“GIF”).next(); ImageInputStream in = ImageIO.createImageInputStream(file); reader.setInput(in); File output = new File(“k.gif”); ImageWriter writer = ImageIO.getImageWritersBySuffix(“GIF”).next(); ImageOutputStream out = ImageIO.createImageOutputStream(file); writer.setOutput(out); int numImages = reader.getNumImages(true); BufferedImage[] frames = new BufferedImage[pocetObrazku]; for (int i = 0; i < numImages; i++) { BufferedImage image = reader.read(i); frames[i] = reader.read(i); […]

ImageIO保存回原始大小

我一直在寻找互联网的一些解决方案,但我仍然没有找到我的问题的答案。 我一直在工作或做一个程序,从我的PC上获取一个图像文件,然后将使用Java Graphics编辑添加一些文本/对象/等。 之后, Java ImageIO将保存新修改的图像。 到目前为止,我能够做得很好,但我对图像的大小有疑问。 原始图像和修改后的图像尺寸不同。 原版是2×3英寸的图像,而修改后的版本据说有2×3英寸太可悲地得到了8×14英寸。 所以,它比原来的更大。 什么是解决方案/代码可以为我提供2×3英寸图像的输出,仍然具有“优质”? 更新: 所以,这是我使用的代码。 public Picture(String filename) { try { File file = new File(“originalpic.jpg”); image = ImageIO.read(file); width = image.getWidth(); } catch (IOException e) { throw new RuntimeException(“Could not open file: ” + filename); } } private void write(int id) { try { ImageIO.write(image, “jpg”, […]

使用ImageIO.read(文件)读取图像; 导致java.lang.OutOfMemoryError:Java堆空间

我正在使用ImageIO API来编写PNG文件。 此代码在循环中调用并导致OutOfMemory错误。 无论如何可以修复以下代码以避免OutOfMemory错误? 或者是增加JVM堆大小的唯一选择? File file = new File(resultMap.get(“outputFile”).toString()); //ImageIO to convert jpg to png BufferedImage img = ImageIO.read(file); file = new File(resultMap.get(“outputFile”).toString() + “.png”); ImageIO.write(img, “png”, file); Java堆大小为1024M。