Java 实现图片合成 (com.google.zxing)
2024-06-11 14:27:07
以下述伪需求为例,进行Java P图的展示
一、伪需求
使用微信的收款二维码替换支付宝收款码上的二维码。
先上上图:进行素材准备,这是老婆大人的收款码,如果您看满意了,可以给她个小惊喜。
二、技术分析
- 微信收款码替换支付宝上的二维码,则意味着在图层上:支付宝收款码的作为背景图,微信二维码为前景图;
- 我们需要做的就是【确定微信二维码在支付宝二维码上的坐标位置】即可;
三、上代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;/*** @author zhanghl* @version PicMergeService.java, v 0.1*/
@Slf4j
@Component
public class PicMergeService {/*** 背景图*/public static final String BACKGROUND = "/Users/zhanghl/merge_pic/alipay_code.jpg";/*** 前景图*/public static final String FOREGROUND = "/Users/zhanghl/merge_pic/wxminicode.png";/*** 生成的文件目录:根据自己需要修改本地路径*/public static final String MERGE_PATH = "/Users/zhanghl/merge_pic/mergecode.png";public static void main(String[] args) {try {// 读取背景图File backgroundFile = new File(BACKGROUND);BufferedImage backImgBuffer = ImageIO.read(backgroundFile);// 读取前景图File foregroundFile = new File(FOREGROUND);BufferedImage foreImgBuffer = ImageIO.read(foregroundFile);// 生成一张底图,并设置宽度与高度,跟背景图的宽度高度一致,可根据需要修改获取使用指定背景图
// BufferedImage blankImgBuffer = new BufferedImage(backImgBuffer.getWidth(), backImgBuffer.getHeight(), BufferedImage.TYPE_INT_RGB);
// Graphics2D graphics = (Graphics2D) backImgBuffer.getGraphics();
// graphics.setBackground(Color.WHITE);
// graphics.fillRect(0, 0, backImgBuffer.getWidth(), backImgBuffer.getHeight());Graphics2D graphics = (Graphics2D) backImgBuffer.getGraphics();// 合成背景图 backImgBuffergraphics.drawImage(backImgBuffer, 0, 0, null);/** 合成前景图 foreImgBuffer* 可以调整 前景图的x、y轴坐标为来查看效果*/graphics.drawImage(foreImgBuffer, 0, 0, null);// 写入本地文件ImageIO.write(backImgBuffer, "PNG", new File(MERGE_PATH));// 线上业务可以将合成的文件上传到服务器,获取对应图片地址} catch (IOException ignored) {}finally {// TODO:线上业务使用,切记合成文件后上传服务后删除本地文件}}
}
<properties><com.google.zxing>2.2</com.google.zxing>
</properties> <!-- 条形码、二维码生成 -->
<dependencyManagement><dependencies><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>${com.google.zxing}</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>${com.google.zxing}</version></dependency></dependencies>
</dependencyManagement>