java – 我能告诉BufferedImage最初的文件类型是什么吗?
发布时间:2020-05-24 17:16:11 所属栏目:Java 来源:互联网
导读:在我的代码中,我有一个 BufferedImage加载了 ImageIO类,如下所示: BufferedImage image = ImageIO.read(new File (filePath); 稍后,我想将其保存为字节数组,但ImageIO.write方法要求我选择GIF,PNG或JPG格式来编写我的图像(如教程here中所述). 我想选择与原始
|
在我的代码中,我有一个 BufferedImage加载了 ImageIO类,如下所示: BufferedImage image = ImageIO.read(new File (filePath); 稍后,我想将其保存为字节数组,但ImageIO.write方法要求我选择GIF,PNG或JPG格式来编写我的图像(如教程here中所述). 我想选择与原始图像相同的文件类型.如果图像最初是GIF,我不希望将其保存为PNG的额外开销.但如果图像最初是PNG,我不想失去半透明性,并将其保存为JPG或GIF.有没有办法可以从BufferedImage中确定原始文件格式是什么? 我知道我可以简单地解析文件路径,当我加载图像以找到扩展名并将其保存以供日后使用时,但理想情况下我喜欢直接从BufferedImage执行此操作. 解决方法正如@JarrodRoberson所说,BufferedImage没有“格式”(即没有文件格式,它确实有几种像素格式之一,或像素“布局”).我不知道Apache Tika,但我想他的解决方案也可行.但是,如果您更喜欢仅使用ImageIO而不是在项目中添加新的依赖项,则可以编写如下内容: ImageInputStream input = ImageIO.createImageInputStream(new File(filePath));
try {
Iterator<ImageReader> readers = ImageIO.getImageReaders(input);
if (readers.hasNext()) {
ImageReader reader = readers.next();
try {
reader.setInput(input);
BufferedImage image = reader.read(0); // Read the same image as ImageIO.read
// Do stuff with image...
// When done,either (1):
String format = reader.getFormatName(); // Get the format name for use later
if (!ImageIO.write(image,format,outputFileOrStream)) {
// ...handle not written
}
// (case 1 done)
// ...or (2):
ImageWriter writer = ImageIO.getImageWriter(reader); // Get best suitable writer
try {
ImageOutputStream output = ImageIO.createImageOutputStream(outputFileOrStream);
try {
writer.setOutput(output);
writer.write(image);
}
finally {
output.close();
}
}
finally {
writer.dispose();
}
// (case 2 done)
}
finally {
reader.dispose();
}
}
}
finally {
input.close();
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
