我有一些 JPG 文件需要在运行时替换为 JFIF 标准化版本(我们使用的供应商为我们提供的 JPG 没有正确的 header ,因此它们在某些应用程序中不起作用)。 .我可以从现有图像创建一个新文件,然后从该文件获取缓冲图像并将内容直接写回到文件中,而无需删除它并且它可以工作...
imageSrcFolder.eachFileMatch ( ~/.*\.jpg/, {
BufferedImage bi = ImageIO.read( it )
ImageIO.write( bi, "jpg", it )
});
我的问题是为什么?为什么文件的大小最终没有增加一倍?为什么我不必先删除它?为什么我能够将文件对象添加到现有文件中,然后将其视为全新文件?看来我认为的"file"并不是java中的File对象实际上是什么,否则根本不起作用。
我的代码完全按照我想要的方式执行,但我不相信它总是会......它看起来太简单了
最佳答案
ImageIO.write
的 JavaDoc包括这个短语:
Writes an image using an arbitrary ImageWriter that supports the given format to a
File
. If there is already aFile
present, its contents are discarded.
这是假设 it
是一个 File
,因为您在读取和写入操作中都使用了它。
关于Java/Groovy 文件 IO 用图像文件自己的内容替换图像文件 - 为什么这有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2472595/