Tag: javax.imageio

使用URL或文件(在ImageIO.read中)

我制作了一个使用多个图像的应用程序。 我有2种方式来运行我的应用程序: – 按想法run – 制作一个胖jar文件并从控制台java -jar app.jar运行它 如果我想从Idea运行它我必须使用: BufferedImage backgroundImage = ImageIO.read(new File(“res/field.png”)); 代替 BufferedImage backgroundImage = ImageIO.read(getClass().getClassLoader().getResource(“res/field.png”)); < – 这就是我在jar文件中使用的情况 为什么? 我以为他们差不多了。 我的案子有通用的方法吗?

有一种简单的方法可以减少IndexedColorModel中的颜色数量吗?

我有一个大的8位PNG图像。 我使用Java将图像切割成较小的32×32图像。 我使用Java的ImageIO将PNG加载到BufferedImage ,然后调用它的getSubimage(x, y, 32, 32) 。 然后我使用ImageIO将每个区块写为PNG。 问题是生成的图像与原始图像具有相同的IndexColorModel 。 例如,一个32×32磁贴只有8种颜色,但它包含一个颜色模型,其中包含原始图像中的所有100多种颜色。 在写出PNG之前,我想从32×32磁贴的IndexColorModel删除未使用的颜色。 没有任何意义,包括图像中未使用的颜色的颜色数据,我希望图像尽可能小。 是否有内置机制来执行此操作,或者有人指向我(简单)方式来修改/减少ColorModel ? 谢谢!

如何使用ColorQuantizerDescriptor?

按照@ PhiLho回答如何将BufferedImage转换为8位的想法? ,我想使用ColorQuantizerDescriptor转换BufferedImage ,imageType TYPE_INT_RGB,但RenderedOp#getColorModel()抛出以下exception: java.lang.IllegalArgumentException:指定的ColorModel与图像SampleModel不兼容。 在javax.media.jai.PlanarImage.setImageLayout(PlanarImage.java:541) 在javax.media.jai.RenderedOp.createRendering(RenderedOp.java:878) 在javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2253) 这是我试图使用的代码: final RenderedOp medianCutQuantizerOp = ColorQuantizerDescriptor.create(rgbImage, ColorQuantizerDescriptor.MEDIANCUT, 256, null, null, null, null, null); final BufferedImage bi = medianCutQuantizerOp.getAsBufferedImage(null, medianCutQuantizerOp.getColorModel()); 我如何使用ColorQuantizerDescriptor ?

在java中将图像拼接在一起

我正在尝试使用java将一些图像拼接在一起。 我有一堆图像,我想拼接在一起,它们都是相同的尺寸所以它实际上只是一个问题,我想它们将它们排列在一起。 我有它的工作,但它很慢,可能非常耗费内存。 我想知道是否有更简单的方法: public static void main(String[] args) throws IOException { int dim = 256; BufferedImage merged = null; for(int y = 0; y<10;y++) { for(int x = 0; x<10;x++) { URL url = new URL(someURL); BufferedImage nextImage = ImageIO.read(url); if(merged==null) merged=nextImage; else { BufferedImage tempMerged; tempMerged = new BufferedImage(10*dim,10*dim,merged.getType()); //Write first image for(int […]

无法运行或jai_imageio或ImageIO.getImageReadersByFormatName无法获取Object

我正在运行一个使用jai_imageio.jar的程序,然后validation我是否可以获取ImageIO.getImageReadersByFormatName(“tiff”) 由于某种原因,程序在其他服务器上运行,但是当我将其签出/加载到我的服务器时,它总是会导致错误 java.util.NoSuchElementException at javax.imageio.spi.FilterIterator.next(Unknown Source) at javax.imageio.ImageIO$ImageReaderIterator.next(Unknown Source) at javax.imageio.ImageIO$ImageReaderIterator.next(Unknown Source) 我已经花了一半的时间用这个……但仍然无法理解。 我希望有人能说出我的设置有什么问题。 注意(jai_imageio.jar和jai_code_codec-1.1.3-alpha.jar)已经在我的eclipse WEB-INF / lib中

Java BufferedImage可以保存不需要的背景颜色

提前谢谢你的帮助 描述:程序绘制,显示和保存图像。 它的工作原理如下:对象本身扩展了Frame。 在构造函数中,该对象创建一个BufferedImage,并调用一个绘制到该图像上的方法。 然后,它将图像显示在帧上。 最后,它将图像保存到文件中(我不关心它使用的是什么格式)。 主程序创建对象,其余部分完成。 问题:保存的文件始终具有彩色背景! 由于显示的图像很好,这尤其奇怪。 如果我在ImageIO.write()中使用“jpg”格式,背景会偏红。 如果我使用“png”格式,背景为深灰色。 我花了一段时间在这上面,我仍然不知道到底发生了什么! import java.awt.Frame ; import java.awt.image.BufferedImage ; import java.io.IOException ; import java.awt.event.WindowEvent ; import java.awt.event.WindowAdapter ; import java.awt.Toolkit ; import java.awt.Graphics2D ; import java.awt.Graphics ; import java.awt.Color ; import java.awt.Dimension ; import javax.imageio.ImageIO ; import java.io.File ; import java.awt.geom.Rectangle2D; public class HGrapher extends Frame{ […]

在没有传输或下载的情况下,Java中是否有任何方法可以获取图像宽度和高度?

为了获得图像的高度,我们可以使用ImageIO.read(new URL(“…”)).getHeight() 。 我的问题: 我是否正确理解此方法在计算大小之前将图像下载到本地计算机? 如果是,请将图像下载到哪个位置 – 到HDD上的某些JVM缓存或直接到RAM? 有没有办法在没有传输或下载的情况下拍摄图像的高度? 但是对服务器有某种要求?

如何在不加载到内存的情况下调整图像大小?

我想检查图像的尺寸,然后在宽度超过给定阈值时调整尺寸。 当我使用ImageIO.read()加载6MB JPEG图像时,BufferedImage会分配大约45MB的堆空间。 有没有办法在不将所有数据加载到内存中的情况下调整直通图像大小? 我尝试传递ImageIO.read()一个File对象,认为它会从磁盘流式传输数据,但它没有帮助。

Java:检测图像格式,resize(缩放)并另存为JPEG

这是我的代码,它实际上工作,不完美,但确实如此,问题是resize的缩略图不粘贴在白色的绘制矩形上,打破图像宽高比,这里是代码,有人可以建议我修复好吗,拜托? 谢谢 import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ImageScalerImageIoImpl implements ImageScaler { private static final String OUTPUT_FORMAT_ID = “jpeg”; // Re-scaling image public byte[] scaleImage(byte[] originalImage, int targetWidth, int targetHeight) { […]

Java读取不同类型的图像格式jpg,tif,gif,png

我试图读取一些图像文件jpg,tif,gif,png,需要保存文件和创建图标。 我得到UnsupportedTypeException 。 ImageIO.read(file); 如果我使用以下行,如前面的forms讨论。 BufferedImage img = JPEGCodec.createJPEGDecoder(inputStream).decodeAsBufferedImage(); 我得到JPEGCodec找不到符号。 我使用的是netbean 7.0.1。 我还添加了jai-imageio.jar。