Java实现合成图片
程序员文章站
2024-03-24 22:53:16
...
前言:应公司需求,需要将二维码和公司的logo进行合成。
实现步骤:
1、生成二维码。
2、切好logo图。
3、图片进行合成。
直接贴代码:
/**
* 生成二维码
* @param backLink 扫码回调链接
* @param savePath 二维码保存路径
* @return 返回保存路径(用于保存数据库)
* @throws IOException
*/
public static String createQRCode(String backLink,String savePath) throws IOException {
//计算二维码图片的高宽比
int v =6;
int width = 67 + 12 * (v - 1);
int height = 67 + 12 * (v - 1);
Qrcode x = new Qrcode();
x.setQrcodeErrorCorrect('L');
x.setQrcodeEncodeMode('B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
x.setQrcodeVersion(v);
byte[] d = backLink.getBytes("utf-8");//汉字转格式需要抛出异常
//缓冲区
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
//绘图
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
gs.clearRect(0, 0, width, height);
//偏移量
int pixoff = 2;
if (d.length > 0 && d.length < 120) {
boolean[][] s = x.calQrcode(d);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if (s[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
}
gs.dispose();
bufferedImage.flush();
//设置图片格式,与输出的路径
String url = savePath;
ImageIO.write(bufferedImage, "png", new File(url));
System.out.println("二维码生成完毕");
return url;
}
1、生成二维码,需要注意地方:文件的后缀和版本号
2、合成图片(格式为jpg,内容可随意更改)
/**
* 图片合成
* @param mainImgPath 主图片路径
* @param qrcodePath 二维码路径
* @param text 文字
* @param compoundPath 图片合成保存路径
* @param databasePath 数据库保存路径
* @return 保存路径
*/
public static String CompoundImage(String mainImgPath, String qrcodePath,String text,String compoundPath,String databasePath) {
String ewmurl="";
try {
//1、获取主图片
BufferedImage big = ImageIO.read(new File(mainImgPath));
java.net.URL url = new URL("https://img-blog.csdn.net/20150906104118760");
//2、拿到二维码
BufferedImage erweima = ImageIO.read(new File(qrcodePath));
int width = 709;
int height = 472;
Image image = big.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage bufferedImage2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
//3、开始绘图
Graphics2D g = bufferedImage2.createGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(erweima, 84, 44, 300, 300, null);
Font font = new Font("微软雅黑", Font.BOLD, 38);
g.setFont(font);
g.setPaint(Color.BLACK);
//4、设置位置
int wordWidth = ImageUtils.getWordWidth(font, text);
int i = width / 2;
int i1 = (i - wordWidth) / 2;
int numWidth=i+i1;
g.drawString(text, numWidth-10, 310+28);
g.dispose();
ewmurl =compoundPath;
ImageIO.write(bufferedImage2, "jpg", new File(ewmurl));
System.out.println("图片生成完毕");
ewmurl = databasePath;
} catch (Exception e) {
e.printStackTrace();
}
return ewmurl;
}
3、合成图片(如果位置有规律,可以将位置算出来,分享一个读取px的方法)
public static int getWordWidth(Font font, String content) {
FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
int width = 0;
for (int i = 0; i < content.length(); i++) {
width += metrics.charWidth(content.charAt(i));
}
return width;
}
效果:
如有不足,请多指教!
推荐阅读
-
Java实现合成图片
-
深入Java集合学习系列:HashMap的实现原理 博客分类: javajust do itmore and more备忘录 javahashmap原理
-
维修中图片实例 博客分类: 图片前端技术Java基础
-
JAVA如何重置附件路径规则,并且实现附件转移到新目录下面
-
利用JNative实现Java调用动态库 博客分类: Java JavaWindows数据结构LinuxJNI
-
ElasticSearch查询所有数据restful api以及java代码实现
-
通过自定义ImageView和实现OnTouchListener 来实现图片的手势滑动和缩放功能
-
QrCode的实现二维码功能 博客分类: 二维码Java技术研究类 二维码QrCodejavabufferImage
-
实现手机扫描二维码登录 博客分类: 日常总结 java二维码登录qrcode
-
java以zip格式实现压缩解压,有界面 博客分类: javazip界面压缩解压 javazip界面压缩解压