gpt4 book ai didi

java - 如何编写与源图像具有相同压缩设置的修改图像

转载 作者:行者123 更新时间:2023-12-02 05:23:15 25 4
gpt4 key购买 nike

我正在研究的用例是读取输入图像 (tif)、修改它并将其写入输出图像 (tif)。

我正在寻找一种方便的方法来确保作者使用与原始图像相同的压缩设置等。我还没有找到使用 ImageIO (带有 JAI 插件)实现此目的的便捷方法。我尝试探测 imageReader.getDefaultReadParam() 但它不包含任何值得注意的内容。 imageReader.getImageMetadata(...) 包含深层信息,但数据结构组织毫无希望。

此时我的后备方法是使用 Apache Commons 来检测压缩(例如 Imaging.getImageInfo(inputFile).getCompressionAlgorithm())并在 ImageIO 中逻辑设置写入器压缩参数。

有没有一种更优雅的方式来完成这个任务,而不必跳过这个圈子?

顺便说一句,我不能专门使用 Apache Commons Imaging 来完成我们的图像处理任务,因为它尚未完全支持我需要的一些其他格式,例如。写.jpg

谢谢

最佳答案

您正在寻找的方法似乎是:

ImageIO.getImageWriter(ImageReader)

来自 API 文档:

This mechanism may be used to obtain an ImageWriter that will understand the internal structure of non-pixel metadata (as encoded by IIOMetadata objects) generated by the ImageReader. By obtaining this data from the ImageReader and passing it on to the ImageWriter obtained with this method, a client program can read an image, modify it in some way, and write it back out preserving all metadata, without having to understand anything about the structure of the metadata, or even about the image format.

从文档来看,您似乎仍然需要将元数据从读取器传递给写入器,但至少,您不必关心从元数据获取压缩(或其他)设置。

实现这一目标的最简单方法可能是执行以下操作:

ImageReader reader;
reader.setInput(input);

IIOImage image = reader.readAll(0, null); // Read image and metadata in one go

doStuffWithImage(image.getRenderedImage()); // Most likely safe to cast to BufferedImage

ImageWriter writer = ImageIO.getImageWriter(reader);
writer.setOutput(output);

ImageWriteParam param = writer.getDefaultWriteParam();

// According to the API doc, the default compressionMode is
// MODE_COPY_FROM_METADATA which is what we want :-)

writer.write(null, image, param); // Don't need stream metadata for TIFF

关于java - 如何编写与源图像具有相同压缩设置的修改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com