gpt4 book ai didi

java - 使用 ImageIO.write() 创建 JPEG 创建一个 0 字节文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:04 32 4
gpt4 key购买 nike

我正在尝试编写一种拍摄图像并保存该图像的 100 x 100 缩略图的方法。但是,当我保存文件时,它在 Ubuntu 的 ImageViewer 中显示为不可读的 0 字节图像(错误“解释 JPEG 图像文件时出错(对状态 200 中的 JPEG 库的不正确调用)”)。我的代码如下:

public boolean scale(){

String file = filename.substring(filename.lastIndexOf(File.separator)+1);
File out = new File("data"+File.separator+"thumbnails"+File.separator+file);

if( out.exists() ) return false;

BufferedImage bi;
try{
bi = ImageIO.read(new File(filename));
}
catch(IOException e){
return false;
}

Dimension imgSize = new Dimension(bi.getWidth(), bi.getHeight());
Dimension bounds = new Dimension(100, 100);
int newHeight = imgSize.height;
int newWidth = imgSize.width;

if( imgSize.width > bounds.width ){
newWidth = bounds.width;
newHeight = (newWidth*imgSize.height)/imgSize.width;
}

if( imgSize.height > bounds.width ){
newHeight = bounds.height;
newWidth = (newHeight*imgSize.width)/imgSize.height;
}

Image img = bi.getScaledInstance(newWidth, newHeight, BufferedImage.SCALE_SMOOTH);
BufferedImage thumb = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2d = thumb.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();

try{
ImageIO.write(thumb, "jpg", out);
}
catch(IOException e){
return false;
}

return true;
}

其中“文件名”是包含此方法的类的全局变量,表示原始图像的路径。我的主要问题是我不明白为什么要创建 0 字节图像。

最佳答案

所以,问题是这样的。我在 OpenJDK 工作。显然,OpenJDK 没有 JPEG 编码器,因此在创建文件时

ImageIO.write(thumb, "jpg", out);

它实际上并没有为要保存的文件创建任何东西;因此空的 0 字节不可读文件。将 ImageIO 参数更改为“png”(并适当调整新的 File() 扩展名)使用上述代码成功创建了所需的图像。

关于java - 使用 ImageIO.write() 创建 JPEG 创建一个 0 字节文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002167/

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