我有一个尺寸的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));
您还应该注意,这实际上并不是在“缩放”图像,而是仅更改结果位图的大小(image1
将保持其原始大小的像素大小并在scaled
未修改的边界内绘制)
如果您实际上有兴趣更改图像的物理尺寸以匹配相应的边界,则可以考虑看看Java:在调整尺寸很低之后,保持JPanel背景图像的宽高比和图像质量-Java
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句