Tag: jai

任何人都有运气在Java中写一个非常快的tiff查看器/编辑器吗?

我已经在JAI / ImageIO领域探索了几个潜在客户(示例应用程序),并且迄今为止缺乏性能。 可能只是Java不是快速查看/缩放/编辑tiff文件的平台。 我希望产生类似于Irfanview的性能,但到目前为止还没有找到我想要的东西。 JAI \ ImageIO似乎是可能的 – 但是在如何加载/缩放/显示图像方面似乎有很多变化(就性能而言)。 任何人都有任何运气或建议其他岩石翻身(其他图书馆,甚至JNI c延伸路线)会喜欢听到他们!

打印.TIF文件

我能够使用以下代码片段成功打印.GIF,.JPG或.PNG,但它不适用于.TIF文件。 即使添加了chromaticity.color属性,我也无法获得颜色。 public class PrintImage { static public void main(String args[]) throws Exception { PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(1)); pras.add(chromaticity.color); PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras); if (pss.length == 0) throw new RuntimeException(“No printer services available.”); PrintService ps = pss[0]; System.out.println(“Printing to ” + ps); DocPrintJob job = ps.createPrintJob(); String fileName = “C:/labels/2.tif” FileInputStream […]

JAI创建似乎让文件描述符保持打开状态

我有一些旧的代码,直到最近才工作,但现在似乎barf它在使用OpenJDK 6而不是Java SE 6的新服务器上运行。 问题似乎围绕着JAI.create。 我有jpeg文件,我可以扩展并转换为png文件。 此代码过去没有泄漏,但现在已经对运行OpenJDK的盒子进行了移动,文件描述符似乎永远不会关闭,我看到越来越多的tmp文件在服务器上的tmp目录中累积。 这些不是我创建的文件,所以我认为是JAI就是这样做的。 另一个原因可能是新服务器上的堆大小较大。 如果JAI在最终确定时清理,但GC发生频率较低,那么可能由于这个原因而堆积起来。 减少堆大小不是一种选择,我们似乎与增加ulimit有无关的问题。 以下是运行此文件时泄漏的文件示例: /tmp/imageio7201901174018490724.tmp 一些代码: // Processor is an internal class that aggregates operations // performed on the image, like resizing private byte[] processImage(Processor processor, InputStream stream) { byte[] bytes = null; SeekableStream s = null; try { // Read the file from the stream s […]

从原始数据的字节数组中获取缓冲图像

我正在使用JNA。 我从我的c ++方法获取原始数据的字节数组。 现在我被困在如何使用这个原始数据字节数组在java中获取缓冲图像。 我曾尝试过很少的东西来把它作为tiff图像,但我得到了成功。 这是我到目前为止尝试的代码。 这里我的字节数组包含16位灰度图像的数据。 我从x传感器设备获得这些数据。 现在我需要从这个字节数组中获取图像。 第一次尝试 byte[] byteArray = myVar1.getByteArray(0, 3318000);//array of raw data ImageInputStream stream1=ImageIO.createImageInputStream(newByteArrayInputStream(byteArray)); ByteArraySeekableStream stream=new ByteArraySeekableStream(byteArray,0,3318000); BufferedImage bi = ImageIO.read(stream); 第二个尝试 SeekableStream stream = new ByteArraySeekableStream(byteArray); String[] names = ImageCodec.getDecoderNames(stream); ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null); //at this line get the error ArrayIndexOutOfBoundsException: 0 RenderedImage im = dec.decodeAsRenderedImage(); […]

如何在Java中将GPS元数据添加到TIFF?

我正在尝试将GPS数据添加到我用Java创建的TIFF文件中。 我正在使用JAI-ImageIO库,虽然如果有更好的库来同时执行G​​PS元数据和自定义元数据,我愿意研究它。 我试图直接将GPS元数据添加到节点,但它似乎剥离了GPS IDF标签。 我试图将GPS IFD添加到TIFFIFD对象(来自TIFFIMageMetadata对象),但这似乎并没有正确保存数据。 基本上,我正在努力让它正确地保存GPS数据,并试图弄清楚如何在那里获取数据。 在互联网上搜索的时间几乎没有产生任何教程或帮助,我没有看到任何有用的Stack Overflow,但我的搜索能力可能缺乏。 我尝试通过直接操作元数据节点来完成一些代码: RenderedImage img = generateImageSomehow(); File writeTarget = new File(“blah.tiff”); //Get the image writer Iterator writers = ImageIO.getImageWritersByFormatName(“tiff”); ImageTypeSpecifier specifier = new ImageTypeSpecifier(renderedImage); ImageWriter writer = writers.next(); //Get the metadata IIOMetadata metadata = writer.getDefaultImageMetadata(specifier, writers.getDefaultWriteParam()); Node root = metadata.getAsTree(FileConstants.TIFF_METADATA_FORMAT); Node ifd = root.getFirstChild(); //Create a new […]

无法运行或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中将位图图像转换为未压缩的tif图像

我正在尝试将位图图像转换为未压缩的tif文件,以便与Tesseract OCR引擎一起使用。 我可以使用这个方法生成一个压缩的tif文件…… final BufferedImage bmp = ImageIO.read(new File(“input.bmp”)); ImageIO.write(bmp, “jpg”, new File(“output.tif”)); 当“jpg”更改为tif时,这会产生一个空的tif文件,因为这些文件是在Java Advanced Imaging(JAI)中处理的。 如何创建未压缩的tif图像? 我应该解压缩上面代码生成的tif图像还是有其他方法来处理转换过程? 提供的任何示例都将非常感谢。 谢谢 kingh32

JAI是否过早关闭文件句柄?

我正在使用JAI来读取java中的Tiff文件。 使用此代码: RenderedOp renderer = JAI.create(“fileload”, tifFilename); return renderer.getAsBufferedImage(); 使用java 7在一个盒子上工作得很好,但在其他用java 8的盒子上工作得很好: Caused by: com.sun.media.jai.codecimpl.util.ImagingException at com.sun.media.jai.codecimpl.ImagingListenerProxy.errorOccurred(ImagingListenerProxy.java:63) at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1087) at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:148) at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:162) at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904) at javax.media.jai.OpImage.getTile(OpImage.java:1129) at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343) at javax.media.jai.RenderedImageAdapter.copyData(RenderedImageAdapter.java:163) at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2299) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2525) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546) at … Caused by: com.sun.media.jai.codecimpl.util.ImagingException: IOException occured while reading TIFF image data. … 17 more Caused by: java.io.IOException: […]

Java / JAI – 保存灰度图像

我试着保存tiff而不是coloure灰度。 我怎么能这样做? (必须使用JAI,因为它是tiff!) 非常感谢提前和最诚挚的问候。

java.lang.NoClassDefFoundError:无法初始化类javax.media.jai.JAI

我最近用GeoTools开始了我的第一个程序,其中我也使用JAI-Java Advanced Imaging 1_1_2_01和JDK 1_7。 它工作正常,直到我添加了GeoTiff Jars 。 我发现以下错误 线程“main”中的exceptionjava.lang.NoClassDefFoundError:无法在com.rgb.PixelExtractor.extract的org.geotools.gce.geotiff.GeoTiffReader.read(GeoTiffReader.java:607)初始化类javax.media.jai.JAI (PixelExtractor.java:55)at com.rgb.RGBSpliter.main(RGBSpliter.java:136) 守则如下 public void extract(File f, String name, String date) throws Exception { ParameterValue policy = AbstractGridFormat.OVERVIEW_POLICY .createValue(); policy.setValue(OverviewPolicy.IGNORE); // this will basically read 4 tiles worth of data at once from the disk… ParameterValue gridsize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue(); //gridsize.setValue(512 * 4 + “,” + […]