可先查看基础版制作,该文是在基础版本之上实现的
一、工具类
1、FileUtils.java文件处理类
package test.controller;
import java.io.IOException;
import test.entity.Person;
import test.util.FileUtils;
import test.util.ImageUtils;
import test.util.TwoDimensionCode;
public class PersonController {
public static void main(String[] args) throws IOException {
Person person = new Person();
person.setName("张三");
person.setDepartment("销售部");
person.setPosition("销售总监");
person.setPhone("18888888888");
person.setEmail("xxx@163.com");
person.setAddress("北京市XX区XX大厦XX层XXX室");
person.setUrl("www.xxxxxxxxx.cn");
// 生成用户二维码
String realPath = "L:/qrcode/";
String mbeijing = "L:/mingpian/bg.jpg";
String mingpian = "L:/mingpian/";
FileUtils.createDirectory(realPath);
FileUtils.createDirectory(mingpian);
String name= person.getName()+".png"; //encoderImgId此处二维码的图片名
String mname= person.getName()+".jpg"; //名片文件名
String filePath = realPath + name; //存放路径
String mfilePath = mingpian + mname; //名片存放路径
FileUtils.copyFileCover(mbeijing, mfilePath,true);
String content = "BEGIN:VCARD\r\nVERSION:3.0";
content += "\r\nN:" + person.getName();
content += "\r\nTEL:" + person.getPhone();
content += "\r\nEMAIL;TYPE=WORK:" + person.getEmail();
content += "\r\nORG:" + person.getPosition();
content += "\r\nTITLE:" + person.getDepartment();
content += "\r\nADR;TYPE=WORK:" + person.getAddress();
content += "\r\nEND:VCARD";
TwoDimensionCode.encoderQRCode(content, filePath, "png");// 执行生成二维码
ImageUtils.getMingpian(filePath,mfilePath,person.getName(),person.getPosition(),person.getPhone(),person.getEmail(),person.getUrl(),person.getAddress());
}
}
1、ImageUtils.java图像处理类
package util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageUtils {
public static void pressImage(String pressImg, String targetImg, int x, int y) {
try {
File _file = new File(targetImg);
if(!_file.exists())
_file.createNewFile();
Image src = ImageIO.read(_file);
int wideth = src.getWidth( null );
int height = src.getHeight( null );
BufferedImage p_w_picpath = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = p_w_picpath.createGraphics();
g.drawImage(src, 0 , 0 , wideth, height, null );
// 水印文件
File _filebiao = new File(pressImg);
Image src_biao = ImageIO.read(_filebiao);
int wideth_biao = src_biao.getWidth( null );
int height_biao = src_biao.getHeight( null );
g.drawImage(src_biao, wideth - wideth_biao - x, height - height_biao - y, wideth_biao,
height_biao, null );
// /
g.dispose();
FileOutputStream out = new FileOutputStream(targetImg);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(p_w_picpath);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/** */ /**
* 打印文字水印图片
* @param pressText --文字
* @param targetImg -- 目标图片
* @param fontName -- 字体名
* @param fontStyle -- 字体样式
* @param color -- 字体颜色
* @param fontSize -- 字体大小
* @param x -- 偏移量
* @param y
*/
public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, int color, int fontSize, int x, int y) {
try {
File _file = new File(targetImg);
Image src = ImageIO.read(_file);
int wideth = src.getWidth( null );
int height = src.getHeight( null );
BufferedImage p_w_picpath = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = p_w_picpath.createGraphics();
g.drawImage(src, 0 , 0 , wideth, height, null );
// String s="www.qhd.com.cn";
g.setColor(Color.RED);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.drawString(pressText, wideth - fontSize - x, height - fontSize / 2 - y);
g.dispose();
FileOutputStream out = new FileOutputStream(targetImg);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(p_w_picpath);
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
//坐标中图片是右下角 文字以左上角为中心
public static void pressText(String targetImg,String name,String position,String phone,String email,String url,String addr) throws IOException {
BufferedImage buffImg = ImageIO.read(new File(targetImg));
Graphics2D g = (Graphics2D) buffImg.getGraphics();
//设置抗锯齿,防止图片或文字模糊
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//绘制文字
Font f = new Font("黑体",Font.BOLD,55);
Font f1 = new Font("黑体",Font.PLAIN,27);
Font f2 = new Font("Arial Unicode MS",Font.PLAIN,27);
g.setColor(new Color(6, 73, 154));
g.setFont(f);
g.drawString(name,110,480);
g.setFont(f1);
g.drawString(position,118,530);
g.setColor(new Color(91, 91, 91));
g.drawString("手机:"+phone,565,467);
g.drawString("邮箱:",565,513);
g.drawString("官网:",565,559);
g.setFont(f2);
g.drawString(email,650,513);
g.drawString(url,650,559);
g.setFont(f1);
g.drawString("地址:"+addr,565,605);
ImageIO.write(buffImg,"jpg", new File(targetImg));
}
/*
* 生成名片
*/
public static void getMingpian(String pressImg,String targetImg,String name,String position,String phone,String email,String url,String addr) throws IOException {
pressImage(pressImg,targetImg,85,400);
pressText(targetImg, name, position, phone, email, url, addr);
}
}
二、实现类
PersonMain.java实现类
package test.controller;
import java.io.IOException;
import test.entity.Person;
import test.util.FileUtils;
import test.util.ImageUtils;
import test.util.TwoDimensionCode;
public class PersonController {
public static void main(String[] args) throws IOException {
Person person = new Person();
person.setName("张三");
person.setDepartment("销售部");
person.setPosition("销售总监");
person.setPhone("18888888888");
person.setEmail("xxx@163.com");
person.setAddress("北京市XX区XX大厦XX层XXX室");
person.setUrl("www.xxxxxxxxx.cn");
// 生成用户二维码
String realPath = "L:/qrcode/";
String mbeijing = "L:/mingpian/bg.jpg";
String mingpian = "L:/mingpian/";
FileUtils.createDirectory(realPath);
FileUtils.createDirectory(mingpian);
String name= person.getName()+".png"; //encoderImgId此处二维码的图片名
String mname= person.getName()+".jpg"; //名片文件名
String filePath = realPath + name; //存放路径
String mfilePath = mingpian + mname; //名片存放路径
FileUtils.copyFileCover(mbeijing, mfilePath,true);
String content = "BEGIN:VCARD\r\nVERSION:3.0";
content += "\r\nN:" + person.getName();
content += "\r\nTEL:" + person.getPhone();
content += "\r\nEMAIL;TYPE=WORK:" + person.getEmail();
content += "\r\nORG:" + person.getPosition();
content += "\r\nTITLE:" + person.getDepartment();
content += "\r\nADR;TYPE=WORK:" + person.getAddress();
content += "\r\nEND:VCARD";
TwoDimensionCode.encoderQRCode(content, filePath, "png");// 执行生成二维码
ImageUtils.getMingpian(filePath,mfilePath,person.getName(),person.getPosition(),person.getPhone(),person.getEmail(),person.getUrl(),person.getAddress());
}
}
ps:二维码内存储的信息过多会导致二维码密度变大不易识别和整体面积变大,请谨慎选择存储内容
三、效果
1、背景图,有需要可自取
2、电子名片效果
总结
到此,该功能已实现,进阶版完整版代码,不方便下载的私信留邮箱,看到后回复
创作不易,感谢支持,欢迎关注博主公众号,不定期进行干货分享