以下述伪需求为例,进行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();
// 合成背景图 backImgBuffer
graphics.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>
四、看效果
五、综述
通过合成坐标的设置发现,x轴 从左向右延伸、y轴 自上向下延伸,也即是说,x轴y轴的起点在图片的左上角;