【问题标题】:Resize an image using Java使用 Java 调整图像大小
【发布时间】:2015-05-29 22:50:54
【问题描述】:

我有一个尺寸的 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;
    }
}

【问题讨论】:

  • imageToBufferedImage(loadJPG(...)) 是做什么的?你确实意识到这实际上并没有缩放任何东西?您是否收到任何错误输出(例如内存不足)?
  • 这个方法只是将 Image 转换为缓冲的 java.awt.Image 像 BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
  • 有什么理由不能使用 ImageIO.read?
  • 我没有看到任何错误,但它没有转换为所需的尺寸
  • 你可能想看看thisthis

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


【解决方案1】:

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

但我确实注意到你写的是image1 而不是scaled

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

应该是

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

您还应该注意,这实际上并不是“缩放”图像,而只是改变了生成位图的大小(image1 将保持其原始大小像素大小并在scaled 边界内绘制未修改)

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

【讨论】:

  • 您对 OP 的代码如何处理较小的图像有任何想法吗?
  • @Jongware 我认为“似乎可以工作”是那里的短语。在发现问题之前,我不得不挠头几次试图弄清楚为什么我没有得到预期的结果:P
  • 我从第一个链接尝试过,它显示错误为不支持的操作。缩放 = image1.getScaledInstance(image2.getWidth(null),image2.getHeight(null), Image.SCALE_SMOOTH); graphics2d = scaled.getGraphics();
  • @BYKR 在哪一行?那里有两个?你正在导入java.awt.Image
  • 您给出的答案有效。但是您在之前的 cmets 中提供了 2 个链接。所以,我尝试使用第一个链接来完成任务。第一个链接对我不起作用。 stackoverflow.com/questions/11959758/…
猜你喜欢
  • 2014-09-01
  • 2015-04-16
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2011-10-26
相关资源
最近更新 更多