Explorar el Código

生成图片证书

release_toaliyun_real
xhxuc hace 6 años
padre
commit
b929f283fe
Se han modificado 4 ficheros con 182 adiciones y 0 borrados
  1. +175
    -0
      mallinkCApi/src/main/java/com/iformall/utils/ImgIdeaUtil.java
  2. BIN
      mallinkCApi/src/main/resources/imgTemp/gertificate.jpg
  3. BIN
      mallinkCApi/src/main/resources/opt/HWLS.TTF
  4. +7
    -0
      pom.xml

+ 175
- 0
mallinkCApi/src/main/java/com/iformall/utils/ImgIdeaUtil.java Ver fichero

@@ -0,0 +1,175 @@
package com.iformall.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class ImgIdeaUtil {

private static final Logger logger = LoggerFactory.getLogger(ImgIdeaUtil.class);

//模板图片
private static final String imgTempPath = "imgTemp/gertificate.jpg";
//字体路径
private static final String fontPath = "opt/HWLS.TTF";

/**
* 生成图片证书
* @return
*/
public static byte[] imgGertificate(String name, String englishName, LocalDateTime date){
if(StringUtils.isBlank(name)){
logger.error("名字为空,无法生成证书");
return null;
}
if(name.length() == 2){
name = name.replaceAll("(\\S)", "$0 ");
}
if(StringUtils.isBlank(englishName)){
englishName = getUpEname(name);
}
if(date == null){
date = LocalDateTime.now();
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dMMM yyyy", Locale.UK);
String dateFormat = date.format(formatter);

try {

InputStream backImgUrl = ClassLoader.getSystemResourceAsStream(imgTempPath);
//InputStream backImgUrl = ImgIdeaUtil.class.getClassLoader().getResourceAsStream(imgTempPath);

Font font = Font.createFont(Font.TRUETYPE_FONT, ResourceUtils.getFile("classpath:"+fontPath));
BufferedImage backImg = ImageIO.read(backImgUrl);
Graphics g = backImg.getGraphics();

//图片加中文名
Font fTxtBottomName = font.deriveFont(Font.PLAIN, 170);
//Font fTxtBottomName = new Font("华文隶书", Font.PLAIN, 170);
FontMetrics metricsName = g.getFontMetrics(fTxtBottomName);
int xName = (backImg.getWidth() - metricsName.stringWidth(name)) / 2;
Color myColorTxtBottomName = Color.BLACK; //颜色
g.setColor(myColorTxtBottomName);
g.setFont(fTxtBottomName);
g.drawString(name, xName , 1150);//g.drawString(文字, x 位置, y 位置);

//图片加英文名
Font fTxtBottomEname = font.deriveFont(Font.PLAIN, 120);
//Font fTxtBottomEname = new Font("华文隶书", Font.PLAIN, 120);
FontMetrics metricsEname = g.getFontMetrics(fTxtBottomEname);
int xEname = (backImg.getWidth() - metricsEname.stringWidth(englishName)) / 2;
Color myColorTxtBottomEname = Color.BLACK;
g.setColor(myColorTxtBottomEname);
g.setFont(fTxtBottomEname);
g.drawString(englishName, xEname, 1300);

//图片加日期
Font fTxtBottomDate = font.deriveFont(Font.PLAIN, 90);
//Font fTxtBottomDate = new Font("华文隶书", Font.PLAIN, 90);
Color myColorTxtBottomDate = Color.BLACK;
g.setColor(myColorTxtBottomDate);
g.setFont(fTxtBottomDate);
g.drawString(dateFormat, 440, 2100);

//调这个方法就是开始这个整合 (可以多张图片,多个文字整合成一张图片,只有把他们放在这方法里面就行)
g.dispose();

ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(backImg, "png", out);

return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
logger.error("生成证书异常", e.getMessage());
}
return null;
}

/**
* //姓、名的第一个字母需要为大写
* @param name
* @return
*/
public static String getUpEname(String name) {
char[] strs = name.toCharArray();
String newname = null;

if (strs.length == 2) {
newname = toUpCase(getEname("" + strs[0])) + " " + toUpCase(getEname("" + strs[1]));
} else if (strs.length == 3){
newname = toUpCase(getEname("" + strs[0])) + " "
+ toUpCase(getEname("" + strs[1] + strs[2]));
}else if (strs.length == 4){
newname = toUpCase(getEname("" + strs[0] + strs[1])) + " "
+ toUpCase(getEname("" + strs[2] + strs[3]));
} else{
newname = toUpCase(getEname(name));
}
return newname;
}


/**
* //将中文转换为英文
* @param name
* @return
*/
public static String getEname(String name){
HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat();
pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pyFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
String s = "";
try {
s = PinyinHelper.toHanyuPinyinString(name, pyFormat, "");
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return s;
}
/**
* 首字母大写
* @param str
* @return
*/
private static String toUpCase(String str) {
StringBuffer newstr = new StringBuffer();
newstr.append((str.substring(0, 1)).toUpperCase()).append(
str.substring(1, str.length()));
return newstr.toString();
}


// public static void main(String[] args) {
// String serverUploadImgUrl = "C:/Users/xiaohu/Desktop/img"; // 图片保存路径
// try {
// byte[] bytes = imgGertificate("郑方元", null, null);
// ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
// BufferedImage bi1 =ImageIO.read(bais);
//
// ImageIO.write(bi1, "png", new File(serverUploadImgUrl+"/0.png"));
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// System.out.println("结束");
// }
}

BIN
mallinkCApi/src/main/resources/imgTemp/gertificate.jpg Ver fichero

Antes Después
Anchura: 3301  |  Altura: 2551  |  Tamaño: 7.0 MiB

BIN
mallinkCApi/src/main/resources/opt/HWLS.TTF Ver fichero


+ 7
- 0
pom.xml Ver fichero

@@ -368,6 +368,13 @@
<version>1.11.423</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>

</dependencies>

<!--


Cargando…
Cancelar
Guardar