使用Java

时间:2015-05-29 22:50:54

标签: java image image-resizing javax.imageio jai

我有一个尺寸为JPEG的Master Master Image和另一个尺寸的输入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;
    }
}

1 个答案:

答案 0 :(得分:1)

所以,我做了一个快速测试(使用ImageIO.read因为你没有提供所有代码),图像从6144x4096到7680x4800没有问题

但我确实注意到您正在撰写image1而不是scaled

ImageIO.write(image1, extension,new File(file2));

应该是

ImageIO.write(scaled, extension,new File(file2));

你还应该注意,这实际上不是“缩放”图像,只是改变结果位图的大小(image1将保持原始大小的像素大小并绘制在{{ 1}}未经修改的边界)

如果您真的有兴趣更改图片的物理尺寸以匹配相应的边界,您可以考虑查看Java: maintaining aspect ratio of JPanel background imageQuality of Image after resize very low -- Java