You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java缩放BufferedImage保持宽高比并填充白色背景实现方法

Java 实现图片等比缩放+白色边距居中

原有实现直接把原图拉伸到目标尺寸,没有做比例计算、背景填充和居中偏移计算,按如下方式修改resizeImage方法即可满足需求:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

private static BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
    int originalWidth = originalImage.getWidth();
    int originalHeight = originalImage.getHeight();

    // 计算等比缩放比例,取宽高缩放比的较小值,保证图片完整显示不超出画布
    double scale = Math.min(
            (double) targetWidth / originalWidth,
            (double) targetHeight / originalHeight
    );
    int scaledWidth = (int) Math.round(originalWidth * scale);
    int scaledHeight = (int) Math.round(originalHeight * scale);

    // 计算居中绘制的坐标偏移量
    int offsetX = (targetWidth - scaledWidth) / 2;
    int offsetY = (targetHeight - scaledHeight) / 2;

    // 创建目标尺寸画布,jpg不支持透明,统一用RGB类型避免背景发黑
    BufferedImage result = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = result.createGraphics();

    // 先将整个画布填充为白色
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, targetWidth, targetHeight);

    // 配置高质量渲染参数,避免缩放后图片模糊、有锯齿
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    // 将缩放后的图片绘制到画布居中位置
    g.drawImage(originalImage, offsetX, offsetY, scaledWidth, scaledHeight, null);
    g.dispose();

    return result;
}

关键说明

  • 不要直接使用原图的getType()创建画布:如果原图带透明通道,写入jpg格式时未填充的区域会默认显示为黑色,统一使用TYPE_INT_RGB搭配全画布白色填充可以彻底避免这个问题。
  • 缩放比例取宽、高两个维度缩放值的最小值,保证缩放后的图片完整容纳在画布内,不会出现内容裁切。
  • 偏移量通过目标尺寸和缩放后尺寸的差值除以2计算,自动实现上下、左右边距均等的居中效果。
  • 新增的渲染提示参数用于优化缩放画质,相比默认绘制模式,能明显减少图片缩放后的锯齿、模糊问题。

以200x200原图转400x300尺寸的场景为例:宽方向缩放比为2,高方向缩放比为1.5,取最小值1.5计算得缩放后尺寸为300x300,x轴偏移量为50、y轴偏移量为0,最终输出的图片左右各留50像素白边,图片居中放置,完全符合预期效果。

内容的提问来源于stack exchange,提问作者Dropen77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:42:24