工程实践
【magic-api】使用脚本实现图片编辑添加图文
· 三面体
图片编辑,用于签发证书奖状等图文混合场景。 注意需要安装中文字体。 import java.net.InetAddress import cn.hutool.core.date.DateUtil import java.io.File import java.io.FileInputStream import java
magic-api
图片编辑,用于签发证书奖状等图文混合场景。注意需要安装中文字体。
import java.net.InetAddress
import cn.hutool.core.date.DateUtil
import java.io.File
import java.io.FileInputStream
import java.net.URL
import java.awt.Font
import cn.hutool.core.img.ImgUtil;
import org.springframework.core.io.ClassPathResource;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import response;
import java.time.ZoneId
//系统需要安装中文字体
var applyComplete = {
"certificateNo": "120120xxxx121212",
"currentPosition": "地址信息",
"certificateDesc": "描述信息",
"signedDate": "2024年2月21日17:37:34",
"signedUnit": "测试",
"signedUnitOffice": "公司名称",
"startTime": "2024-02",
"company": "公司名称",
"talent_type":"C类人才",
"apply_user":"张三"
}
int length = applyComplete.certificateNo.length();
var relativePath = "/home/indicator/uploadPath/upload/2024/02/21/56583ac5-4591-4be5-a95a-481ff92799fd.png";
OutputStream out;
String suffix = null;
Font font = new Font("宋体", Font.BOLD, 54);
Font font1 = new Font("宋体", Font.BOLD, 84);
Font font2 = new Font("宋体", Font.BOLD, 54);
FileInputStream fis = new FileInputStream(relativePath);
Image srcImg = ImageIO.read(fis);
// //文件转化为图片
StringBuilder sb = new StringBuilder();
String companyName = applyComplete.company;
int oyear = Calendar.getInstance().get(Calendar.YEAR);
sb.append("经研究,同意")
.append(companyName.endsWith("公司") ? companyName.substring(0, companyName.length() - 2) : companyName)
.append("公司推荐")
.append(applyComplete.currentPosition)
.append(applyComplete.apply_user)
.append("认定为:");
if (sb.toString().length() > 28) {
String s1 = sb.substring(0, 28);
String s2 = sb.substring(28);
srcImg = ImgUtil.pressText(srcImg, s1, Color.BLACK, font, 155, -200, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, s2, Color.BLACK, font2, -710 + (26 * s2.length()), -140, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.talent_type.charAt(0) + "-" + applyComplete.startTime + "-" + applyComplete.certificateNo, Color.BLACK, font, 800, -600, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.talent_type, Color.BLACK, font1, 0, 0, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.certificateDesc, Color.BLACK, font, -110, 100, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedUnit, Color.BLACK, font, 400, 260, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedUnitOffice, Color.BLACK, font, 400, 320, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedDate, Color.BLACK, font, 400, 380, 0.9.asFloat());
} else {
srcImg = ImgUtil.pressText(srcImg, sb.toString(), Color.BLACK, font, 155, -200, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.talent_type.charAt(0) + "-" +applyComplete.startTime + "-" + applyComplete.certificateNo, Color.BLACK, font, 800, -600, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.talent_type, Color.BLACK, font1, 0, -60, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedUnit, Color.BLACK, font, 400, 260, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedUnitOffice, Color.BLACK, font, 400, 320, 0.9.asFloat());
srcImg = ImgUtil.pressText(srcImg, applyComplete.signedDate, Color.BLACK, font, 400, 380, 0.9.asFloat());
}
if (relativePath.contains(".")) {
//获取图片格式后缀
suffix = relativePath.substring(relativePath.lastIndexOf(".") + 1);
}
//获取图片的宽
int srcImgWidth = srcImg.getWidth(null);
//获取图片的高
int srcImgHeight = srcImg.getHeight(null);
//加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = bufImg.createGraphics();
//重构图片
graphics.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
ImageIO.write(bufImg, suffix, imageOutputStream);
out = response.getOutputStream();
out.write(baos.toByteArray());
out.flush();
out.close();