Java-如何在不裁剪的情况下填充图像并调整其大小?

时间:2018-12-09 03:11:51

标签: java image resize

我需要将很多图像的比例从(2:3)调整为(3:4)。

图像当前为800像素x 1200像素。我最终必须将它们设置为600px x 800px,而无需进行任何裁剪。

我可以知道哪些可用的库进行填充和调整大小而无需在Java中裁剪吗?

3 个答案:

答案 0 :(得分:0)

从当前图像(假设为java.awt.Image)中,您可以使用:

这些步骤:

  • 计算widthheight中的比率
  • 取决于它们的值(填充宽度或填充高度)
    • 计算widthheight以获得缩放后的图像
    • 计算所需的填充
  • 将图像写在合适的位置
static BufferedImage pad(BufferedImage image, double width, double height, Color pad) {
    double ratioW = image.getWidth() / width;
    double ratioH = image.getHeight() / height;
    double newWidth = width, newHeight = height;
    int fitW = 0, fitH = 0;
    BufferedImage resultImage;
    Image resize;

    //padding width
    if (ratioW < ratioH) {
        newWidth = image.getWidth() / ratioH;
        newHeight = image.getHeight() / ratioH;
        fitW = (int) ((width - newWidth) / 2.0);

    }//padding height
    else if (ratioH < ratioW) {
        newWidth = image.getWidth() / ratioW;
        newHeight = image.getHeight() / ratioW;
        fitH = (int) ((height - newHeight) / 2.0);
    }

    resize = image.getScaledInstance((int) newWidth, (int) newHeight, Image.SCALE_SMOOTH);
    resultImage = new BufferedImage((int) width, (int) height, image.getType());
    Graphics g = resultImage.getGraphics();
    g.setColor(pad);
    g.fillRect(0, 0, (int) width, (int) height);
    g.drawImage(resize, fitW, fitH, null);
    g.dispose();

    return resultImage;
}

用作

BufferedImage image = ...;
BufferedImage result = pad(image, 600, 800, Color.white);

答案 1 :(得分:0)

我认为ffmpeg可以帮助您处理图像。 例如Use ffmpeg to resize image

  1. 您可以将ffmpeg二进制文件保存在某些conf文件夹中。
  2. 为ffmpeg命令创建sh脚本。
  3. 使用(Apache Commons exec库)中的CommandLine运行脚本。

答案 2 :(得分:0)

使用以下代码成功做到了: “ w”是您需要在每一侧填充的数量。

SBDBaseMessage