Tag: javax.imageio

ImageIO write()是一种阻塞方法吗?

在我正在使用java开发的应用程序中,我使用ImageIO API来缩放图像,然后将它们写入目录,然后通知Web服务器图像已准备好使用。 在向Web服务器发送信号之前的最后一个调用是ImageIO.write()方法,但Web服务器此时无法找到生成的图像。 (Web服务器能够看到它们后几毫秒。)。 我怀疑是ImageIO.write()是异步运行的。 我搜索了很多,但我无法找到ImageIO.write()是同步还是异步操作。 如果ImageIO.write()没有阻止程序流,是否有一种非黑客方式让它等到映像写入目标目录?

ImageIO.read()返回403错误

我有以下代码: public BufferedImage urlToImage(String imageUrl) throws MalformedURLException, IOException { URL url = new URL(imageUrl); BufferedImage image = ImageIO.read(url); return image; } 那应该是从给定的URL返回一个图像。 我测试了这两个随机选择的URL: http://sofzh.miximages.com/java/logo4w.png http://sofzh.miximages.com/java/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第一个工作正常,但第二个给出403错误: Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://sofzh.miximages.com/java/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) at java.net.URL.openStream(URL.java:1010) at javax.imageio.ImageIO.read(ImageIO.java:1367) 可能是错误的原因是什么? 谢谢。

Java-导出到jar / i / o问题

我在Eclipse(使用JDK7的Juno)上工作,程序运行(在Eclipse上)很好。 我的问题是: URL imageURL = new URL(“http://sofzh.miximages.com/java/new_sizes_ocr.png”); RenderedImage img = ImageIO.read(imageURL); File outputfile = new File(“saved.png”); ImageIO.write(img, “png”, outputfile); 但是当我将项目导出到jar文件并尝试通过Windows(7-64位)命令行运行时,会出现以下错误: Exception in thread “main” java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) Caused by: java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Providercom.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReaderSpi could not be instantiated: java.lang.IllegalArgumentException: vendorName == null! at java.util.ServiceLoader.fail(Unknown Source) […]

Java处理TIF图像

我的问题是,如何在Java中成功将.tif文件加载到Image实例中? 现在让我详细介绍一下。 我已经在stackoverflow上阅读了很多关于如何在Java中处理/转换TIF图像的线程。 我已经尝试了很多stackoverflow建议(我说建议,因为很少有人要求回来说一些有用的东西)。 我很确定我需要使用Java Advanced Imaging(JAI)库,但我认为我不知道如何使用它。 让我现在解释一下这个项目: 我正在处理Processing sketch中的帧屏幕,并使用Xuggler将它们编码为video。 在草图中,我使用Processing的save(文件filePath)函数将当前帧保存到文件中。 我以前有保存(“img”+ i +“。jpg”) ,但是在创建jpg时发生的压缩会使录制速度减慢到9-10fps,所以我切换文件扩展名以查看是否可以改变结果,并且保存(“img”+ i“.tif”)是最快的,允许我以大约22-23fps的速度录制。 处理可以将图像保存为.tif文件。 不幸的是,Java无法在没有库的情况下加载.tif文件。 我以前有代码: Image img = Toolkit.getDefaultToolkit()。getImage(“pics / img”+ i +“。jpg”); 这行代码会将.jpg文件加载到img中,我很乐意对video进行编码。 但这行代码(tif而不是jpg): Image img = Toolkit.getDefaultToolkit()。getImage(“pics / img”+ i +“。tif”); 不会加载任何图像。 我仍然可以使用Xuggler对我的video进行编码,但图像是空白的,所以我认为这种方法无法加载我的.tif文件。 我正在使用Windows 8计算机,并使用Eclipse。 任何帮助将非常感谢!

Java转换/类加载器问题

以下是问题的简化版本: SomeClass c = (SomeClass) obj.getSomeClassParent() 并非总是如此,有时会触发exception org.somepackage.SomeClass can’t be cast to org.somepackage.SomeClass 这怎么可能 ? 我想它与JAI imageio是本机lib这一事实有关,但是中继怎么会发生这种情况呢? 我可能错过了什么,但是什么? I’m using JAI imageio version 1.1 dcm4che 2.0.21 DICOM lib 这是原始代码 ImageInputStream iis = ImageIO.createImageInputStream(src); Iterator iter = ImageIO.getImageReadersByFormatName(“DICOM”); ImageReader reader = iter.next(); DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam(); 和原来的例外 org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam can’t be cast to org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam exception图像http://img215.imageshack.us/img215/3894/exception.jpg

组合BG为JPEG的图像会导致意外结果

为什么组合BG为JPEG的图像会导致意外结果? 这是我在2个图像的覆盖中无法正常工作的答案的后续行动。 在那里发布的源(使用在内存中创建的BG图像)看起来像这样: BG图像位于左侧。 FG图像(具有透明度的PNG)位于中间。 合并后的图像位于右侧。 到现在为止还挺好。 但是那个问这个问题的人评论说,如果BG是JPEG,那就失败了。 认为他们错了,我改变了我的例子,将BG图像编码为JPEG。 现在,如果我使用BufferedImage.TYPE_INT_ARGB或BufferedImage.TYPE_INT_RGB作为最终图像,我得到他们所指的: TYPE_INT_ARGB TYPE_INT_RGB 我期望结果与至少其中一个的结果相同(更多的是ARGB变体)。 import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.net.URL; import javax.imageio.ImageIO; class CombineImages { public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { try { URL urlImage1 = new URL(“http://i.stack.imgur.com/T5uTa.png”); // […]

javax.imageio.ImageIO坏了吗? 它会旋转一些图像

下面你会看到一张来自土耳其的美味糕点“ simit ”。 它取自iPad 2,因此它是尺寸为720 * 960的JPEG。 问题是,当我使用javax.imageio.ImageIO.read方法时,它奇怪地导入的图像是向左旋转的BufferedImage ,变为960 * 720 。 我在OS X上的Sun JVM 1.6.0_29和Debian上的Sun JVM 1.6.0_26上重现了这一点。 这是代码: public class Main { public static void main(String[] args) throws Exception { FileInputStream stream = new FileInputStream(new File(“IMG_0159.JPG”)); BufferedImage img = ImageIO.read(stream); System.out.println(“width:” + img.getWidth() + ” height:” + img.getHeight()); } } 它输出width:960 height:720 ,当我保存这个输出图像时,它按照我之前的说法旋转到左边。 如果您想重现这一点,请从此处下载代码和图片,然后运行以下命令来构建和运行: […]

绘制图像的某些部分偏离角落?

我正在使用各种精灵表来加载太空飞船。 Graphics.drawImage()的文档说明了参数 boolean Graphics.drawImage(Image img, int dstx1, int dsty1, int dstx2, int dsty2, int srcx1, int srcy1, int srcx2, int srcy2, ImageObserver observer); 但是,文档说dstx1和dsty2是左上角的坐标,当您使用dstx2和dsty2指定绘制的区域时,尺寸为(dstx2-dstx1)和(dsty2-dsty1)。 除非我误解了函数的工作原理,否则它只会从角落加载部分图像。 如何绘制未连接到左角的图像的一部分,以绘制精灵表的不同部分?

用Java创建多页Tiff

我有兴趣拍摄一个tif图像,并在其中添加一个包含Java文本的图层,如果可能的话,最好使用Twelve Monkeys图像库。 我可以从这里调整代码,将文本添加到tif或创建一个只有文本的相同大小的新tif,但不要将它们保存为多页tif。 例如: import javax.imageio.*; import javax.imageio.stream.ImageOutputStream; import java.awt.*; import java.awt.image.*; import java.io.*; public class ImageUtil { public static void main(String[] args) throws Exception { BufferedImage src = ImageIO.read(new File(“/path/to/main.tif”)); BufferedImage text = createTextLayer(src); BufferedImage[] images = new BufferedImage[]{src, text}; createMultiPage(images); } private static BufferedImage createTextLayer(BufferedImage src) { int w = src.getWidth(); int h […]

读取JPEG:ImageIO.read()会弄乱色彩空间

我正在尝试在Servlet中读取,重新缩放和保存图像。 那是相关的代码: BufferedImage image = ImageIO.read(file); BufferedImage after = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); AffineTransform at = AffineTransform.getScaleInstance(factor, factor); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); after = scaleOp.filter(image, null); ImageIO.write(after, “JPG”, file)); 原始文件是一个普通的RGB-Jpeg,但是当我打开并保存文件时,它就是一个CMYK-Jpeg。 即使我没有重新缩放图像,只是打开和关闭图像会导致问题。 当我打开PNG或GIF时,一切都很好。 有人知道该怎么做吗? 我希望ImageIO的read-Method能够保留原始的色彩空间。 如果有另一种方式阅读jpeg的舒适方式? 谢谢你的任何建议!