Tag: javax.imageio

字节数组缓冲图像转换速度慢

我有一个简单的服务器端代码,它接收一个表示JPEG格式图像的字节数组,并返回图像的尺寸。 public String processImage(byte[] data) { long startTime = System.currentTimeMillis(); ByteArrayInputStream stream = new ByteArrayInputStream(data); BufferedImage bufferedImage; bufferedImage = ImageIO.read(stream); int height = bufferedImage.getHeight(); int width = bufferedImage.getWidth(); long endTime = System.currentTimeMillis(); return “height=”+height+” | width=”+width+” | elapsed=”+(endTime-startTime); } 它有效,但问题是它的速度慢得令人无法接受。 对于100KB的图像,它需要6s。 对于900KB的图像,它需要30秒。 这是预期的吗? 有没有办法让字节数组更快地进行bufferedImage转换? 仅供参考,抓住高度/宽度并不是我打算做的唯一事情。 我最终想要处理bufferedImage。 因此获得高度/宽度只是一个示例代码。

转换并显示字节数组中的图像

我正在制作一个程序,它从服务器获取有关字节数组中图像的数据。 我正在将这些数据转换为24位BMP格式(无论是jpeg,png,bmp还是8-24-32bpp)。 首先,我将它保存到我的HD,然后我将它加载到JLabel的Icon中。 虽然在某些情况下我得到以下exception,但效果很好: java.io.EOFException at javax.imageio.stream.ImageInputStreamImpl.readFully(ImageInputStreamImpl.java:353) at com.sun.imageio.plugins.bmp.BMPImageReader.read24Bit(BMPImageReader.java:1188) at com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:843) at javax.imageio.ImageIO.read(ImageIO.java:1448) at javax.imageio.ImageIO.read(ImageIO.java:1308) 这条线(第二条) File imgFile = new File(“d:/image.bmp”); BufferedImage image = ImageIO.read(imgFile); 在这些情况下: 图像没有加载到JLabel中,但它可以在我的HD上找到 转换不合适,因为某些事情“滑倒” 图片就像在word文档中使用斜体 首先,我想也许bpp是问题,然后我认为可能图片太大了,但我有案例它的工作和案例它不适用于这两个建议。 我有点被困在这里,并且很乐意提出想法。

使用Java ImageIO进行Tiff压缩

我在将png转换为tiff时遇到问题。 转换很顺利,但图像很大。 我认为问题是我没有正确地进行压缩? 任何人都有任何建议? 这是代码示例 public static void test() throws IOException { // String fileName = “4958813_1”; String fileName = “4848970_1”; String inFileType = “.PNG”; String outFileType = “.TIFF”; ImageIO.scanForPlugins(); File fInputFile = new File(“I:/HPF/UU/” + fileName + inFileType); InputStream fis = new BufferedInputStream(new FileInputStream( fInputFile)); PNGImageReaderSpi spi = new PNGImageReaderSpi(); ImageReader reader = spi.createReaderInstance(); […]

如何在具有透明度的java BufferedImage中读取像素颜色

我正在读取BufferedImage中的像素颜色,如下所示: ….. InputStream is = new BufferedInputStream(conn.getInputStream()); BufferedImage image = ImageIO.read(is); int color = image.getRGB(x, y); int red = (colour & 0x00ff0000) >> 16; int green = (colour & 0x0000ff00) >> 8; int blue = colour & 0x000000ff; 现在这个工作正常,除了png的透明度。 我发现如果x,y指的是没有颜色的透明像素,我仍然会读取一种颜色,通常与图像中其他地方使用的颜色相同。 如何检测像素实际上是透明的而不是彩色的? 谢谢

ArrayIndexOutOfBoundsException:4096在读取gif文件时

我能读取png文件。 但是在读取gif文件时获取ArrayIndexOutOfBoundsException:4096。 byte[] fileData = imageFile.getFileData(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData); RenderedImage image = ImageIO.read(byteArrayInputStream) 抛出的exception看起来像 java.lang.ArrayIndexOutOfBoundsException: 4096 at com.sun.imageio.plugins.gif.GIFImageReader.read(Unknown Source) at javax.imageio.ImageIO.read(Unknown Source) at javax.imageio.ImageIO.read(Unknown Source) 可能是什么问题,解决方案是什么?

ImageIO – 获取图像类型和exif数据

给定一些源文件(或更通用的 – 输入流),我需要找出答案 它是一个图像 如果是图像,则检索其类型(png / jpeg / gif / etc) 检索exif数据(如果有) 我查看了API,但目前尚不清楚如何获取图像类型或Exif数据。

ImageIO.read非法参数exception – 栅格波段/颜色空间组件?

对于有点模糊的标题道歉,我无法弄清楚关键字在这里是什么。 设置非常简单,我打开图像 ImageIO.read(new File(filename)); 这适用于大多数文件,但是对于一个我得到IllegalArgumentException with the detail: “numbers of source Raster bands and source color space components do not match” 。 这个图像是通过wget在有效的Flickr URL上获得的,我使用了这种方式获得的其他图像,因此获取图像的方法原则上看起来很合理。 我不确定导致exception的是什么。 解决方法可以接受 – 我特别不喜欢使用ImageIO ,图像看起来很精致。 我只需要在没有Java吓坏的情况下阅读它! 这是有问题的图像,如果有任何用处:

Java ImageIO IIOException:不支持的图像类型?

首次使用Java处理图像,并得到一些未记录得很好的奇怪exception。 这是失败的代码行: BufferedImage imgSelected = ImageIO.read(new File(“/abs/url/to/file/image.jpg”)); 这一行抛出了一个IIOException,其中不支持的图像类型作为exception消息。 我已经检查并重新检查它实际上是这行抛出exception,File对象是有效的,URL是有效的,而image.jpg实际上是一个有效的JPG,在其他图像中加载完全正常观众。 我该怎么做才能获得有关此exception性质的更多信息? 这是在Java 7中加载图像的传统方式,还是旧的/弃用方法? 关于这些“不支持的图像类型”exception的信息并不是很多,当然,ImageIO支持JPG! 谢谢你的帮助!

为什么ImageReader返回错误的BufferedImage?

我试图访问21帧的动画GIF图像,然后读取第12帧(因为它从0开始?)帧。 import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.SuffixFileFilter; import org.apache.commons.io.filefilter.TrueFileFilter; public class PictureSearch { public static void search(File file) { try { ImageReader reader = (ImageReader) ImageIO.getImageReadersBySuffix(“gif”).next(); reader.setInput(ImageIO.createImageInputStream(file), false); BufferedImage caption = reader.read(12); System.out.println(caption.getHeight()); System.out.println(caption.getWidth()); caption.flush(); } catch (IOException e) […]

ImageIO线程安全

我在javax.imageio规范中看到线程安全不是目标,尽管我已经看到了几个使用ImageIO.read()和ImageIO.write()在Web环境中上传/清理图像的示例。 所以,我的问题是,尽管规范说的是, ImageIO线程安全吗?