Java调整图片大小合并PNG图片生成ICON(保持背景透明)

1.重新调整图片到合适尺寸(有压缩图片功能)

/**
 * 
 * 功能描述: <br>
 * 〈调整图像到固定大小〉
 *
 * @param srcImageFile  源图像文件地址
 * @param descImageFile 缩放后的图像地址
 * @param width         缩放后的宽度
 * @param height        缩放后的高度
 * @param isPadding     是否补白
 * 
 */
public final static void changeSize(String srcImageFile, String descImageFile, int width, int height, boolean isPadding) {
    try {
        // 缩放比例
        double ratio = 0.0;
        File file = new File(srcImageFile);
        BufferedImage bufferedImage = ImageIO.read(file);
        Image image = bufferedImage.getScaledInstance(width, height, bufferedImage.SCALE_SMOOTH);
        // 计算缩放比例
        if (bufferedImage.getHeight() > bufferedImage.getWidth()) {
            ratio = (new Integer(height)).doubleValue() / bufferedImage.getHeight();
        } else {
            ratio = (new Integer(width)).doubleValue() / bufferedImage.getWidth();
        }
        AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
        image = op.filter(bufferedImage, null);

        // 是否需要补白
        if (isPadding) {
            BufferedImage tempBufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics2d = tempBufferedImage.createGraphics();
            graphics2d.setColor(Color.white);
            graphics2d.fillRect(0, 0, width, height);
            if (width == image.getWidth(null)) {
                graphics2d.drawImage(image, 0, (height - image.getHeight(null)) / 2, image.getWidth(null), image.getHeight(null), Color.white, null);
            } else {
                graphics2d.drawImage(image, (width - image.getWidth(null)) / 2, 0, image.getWidth(null), image.getHeight(null), Color.white, null);
            }
            graphics2d.dispose();
            image = tempBufferedImage;
        }
        ImageIO.write((BufferedImage) image, "png", new File(descImageFile));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.合并两张PNG图片

/**
 * 
 * 功能描述: <br>
 * 〈利用画布生成新的图片〉
 *
 * @param backImage 背景图文件地址
 * @param srcImage  前景图文件地址
 * @param descImage 生成图文件地址
 * @return
 * 
 */
public static void mergeImage(String backImage, String srcImage, String descImage) {
    try {
        int offset = 0;
        BufferedImage backBufferedImage = ImageIO.read(new File(backImage));
        BufferedImage srcBufferedImage = ImageIO.read(new File(srcImage));
        // 输出图片宽度
        int width = backBufferedImage.getWidth() + offset;
        // 输出图片高度
        int height = backBufferedImage.getWidth() + offset;
        BufferedImage descBufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
        Graphics2D graphics2d = (Graphics2D) descBufferedImage.getGraphics();
        graphics2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        // 往画布上添加图片,并设置边距
        graphics2d.drawImage(backBufferedImage, null, 0, 0);
        graphics2d.drawImage(srcBufferedImage, null, 175, 175);
        graphics2d.dispose();
        // 输出新图片
        ImageIO.write(descBufferedImage, "png", new File(descImage));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.测试代码

public static void main(String[] args) throws IOException {
    // 重新调整b.png尺寸 生成d.png
    changeSize("d:\\b.png", "d:\\d.png", 640, 640, false);
    // 合并a.png+d.png->c.png
    mergeImage("d:\\a.png", "d:\\d.png", "d:\\c.png");
}

4.测试结果

a.png+b.png=c.png

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值