使用 Java 调整图像大小
Resize an image using Java
我有一个 JPEG 主图像,它是一个维度和另一个维度的输入 Jpeg 图像。因此,我编写了以下代码将图像从一个维度转换为另一个维度。
当输入图像的尺寸约为 900 * 700 和尺寸为 1200 * 800 的主图像时,此代码工作正常。
当主图像/输入图像的尺寸大约为 3400*1900 和 4400*2400 时,它不起作用。
谁能告诉我哪里出错了!
public void checkSizeandResize(String file1, String file2){
BufferedImage scaled = null;
BufferedImage image1 = null;
BufferedImage image2 = null;
Graphics2D graphics2d = null;
try{
image1 = imageToBufferedImage(loadJPG(file1));
image2 = imageToBufferedImage(loadJPG(file2));
if(image1.getHeight()!=image2.getHeight() || image1.getWidth()!=image2.getWidth()){
scaled = new BufferedImage(image2.getWidth(),image2.getHeight(), image2.getType());
graphics2d = scaled.createGraphics();
graphics2d.setComposite(AlphaComposite.Src);
graphics2d.drawImage(image1, 0, 0,null);
graphics2d.dispose();
ImageIO.write(image1, extension,new File(file2));
}
}
catch(Exception exception)
{
exception.printStackTrace();
}
finally
{
scaled = null;
image1 = null;
image2 = null;
graphics2d = null;
}
}
所以,我做了一个快速测试(使用 ImageIO.read
,因为你没有提供所有代码)图像从 6144x4096 到 7680x4800 没有问题
但我注意到你写的是 image1
而不是 scaled
ImageIO.write(image1, extension,new File(file2));
应该是
ImageIO.write(scaled, extension,new File(file2));
你还应该注意,这实际上并不是 "scaling" 图像,只是改变了生成位图的大小(image1
将保持其原始大小像素大小并绘制在 scaled
边界内未修改)
如果您真的有兴趣更改图像的物理尺寸以匹配相应的边界,您可以考虑查看 Java: maintaining aspect ratio of JPanel background image and Quality of Image after resize very low -- Java
我有一个 JPEG 主图像,它是一个维度和另一个维度的输入 Jpeg 图像。因此,我编写了以下代码将图像从一个维度转换为另一个维度。 当输入图像的尺寸约为 900 * 700 和尺寸为 1200 * 800 的主图像时,此代码工作正常。 当主图像/输入图像的尺寸大约为 3400*1900 和 4400*2400 时,它不起作用。 谁能告诉我哪里出错了!
public void checkSizeandResize(String file1, String file2){
BufferedImage scaled = null;
BufferedImage image1 = null;
BufferedImage image2 = null;
Graphics2D graphics2d = null;
try{
image1 = imageToBufferedImage(loadJPG(file1));
image2 = imageToBufferedImage(loadJPG(file2));
if(image1.getHeight()!=image2.getHeight() || image1.getWidth()!=image2.getWidth()){
scaled = new BufferedImage(image2.getWidth(),image2.getHeight(), image2.getType());
graphics2d = scaled.createGraphics();
graphics2d.setComposite(AlphaComposite.Src);
graphics2d.drawImage(image1, 0, 0,null);
graphics2d.dispose();
ImageIO.write(image1, extension,new File(file2));
}
}
catch(Exception exception)
{
exception.printStackTrace();
}
finally
{
scaled = null;
image1 = null;
image2 = null;
graphics2d = null;
}
}
所以,我做了一个快速测试(使用 ImageIO.read
,因为你没有提供所有代码)图像从 6144x4096 到 7680x4800 没有问题
但我注意到你写的是 image1
而不是 scaled
ImageIO.write(image1, extension,new File(file2));
应该是
ImageIO.write(scaled, extension,new File(file2));
你还应该注意,这实际上并不是 "scaling" 图像,只是改变了生成位图的大小(image1
将保持其原始大小像素大小并绘制在 scaled
边界内未修改)
如果您真的有兴趣更改图像的物理尺寸以匹配相应的边界,您可以考虑查看 Java: maintaining aspect ratio of JPanel background image and Quality of Image after resize very low -- Java