java图片合成

本文介绍了Java中使用Graphics.drawImage()方法进行图片合成的操作,详细解释了各参数含义,包括小图、目标位置以及新图的宽高。同时提到了ImageObserver参数在实际应用中的局限性,通常需要开发者自行处理图片更新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.springframework.util.Assert;

public class ImageUtils {

    /**
     * 图片合成
     *
     * @param backgroundPath 底图
     * @param smallPath      小图
     * @param type           生成图片类型jpg,png...
     * @param resultPaht     生成图片保存路径
     */
    public static void image(String backgroundPath, String smallPath, String type, String resultPaht) {
        try {
            Assert.hasText(backgroundPath, "底图路径为空");
            Assert.hasText(smallPath, "小图路径为空");
            BufferedImage small = getBufferedImageFromUrl(smallPath);
            BufferedImage image = getBufferedImageFromUrl(backgroundPath);
            //生成画笔
            Graphics g = image.getGraphics();
            g.drawImage(small, image.getWidth() - small.getWidth(), image.getHeight() - small.getHeight(),
                    image.getWidth(), image.getHeight(), null);
            ImageIO.write(image, type, new File(resultPaht));
        } catch (IOException e) {
            throw new RuntimeException("合成图片失败", e);
        }
    }

    /**
     * 根据图片url获取图片
     *
     * @param url
     * @return
     * @throws IOException
     */
    private static BufferedImage getBufferedImageFromUrl(String url) throws IOException {
        if (url.startsWith("https://") || url.startsWith("http://")) {
            return ImageIO.read(new URL(url));
        } else {
            return ImageIO.read(new File(url));
        }
    }
}

Graphics.drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)方法:
img:小图
x:小图左顶点在地图x轴的位置
y:小图左顶点在地图y轴的位置
width:生成新图的宽度
height:生成新图的高度
observer:检测图片改变的“图片观察者”,实际中基本用不到。因为这个观察者类在java设计中有严重缺陷,会导致图片绘制不及时,所以图片更新的工作往往都是由开发者自己来做

更多文章:
点击跳转优快云博客
点击跳转简书博客
公众号:代码小搬运
代码小搬运.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值