以下述伪需求为例,进行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;
@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);
graphics.drawImage(foreImgBuffer, 0, 0, null);
// 写入本地文件
ImageIO.write(backImgBuffer, "PNG", new File(MERGE_PATH));
// 线上业务可以将合成的文件上传到服务器,获取对应图片地址
} catch (IOException ignored) {
}finally {
// TODO:线上业务使用,切记合成文件后上传服务后删除本地文件
}
}
}
2.2
com.google.zxing
core
${com.google.zxing}
com.google.zxing
javase
${com.google.zxing}
四、看效果
设置前景图坐标 x = 0、y = 0 的效果
设置前景图坐标 x = 200、y = 0 的效果
设置前景图坐标 x = 200、y = 400 的效果
设置前景图坐标 x = 210、y = 600 的效果
五、综述
通过合成坐标的设置发现,x轴 从左向右延伸、y轴 自上向下延伸,也即是说,x轴y轴的起点在图片的左上角;



