package com.qxueyou.scc.sys.utils;
|
|
import org.springframework.core.io.ClassPathResource;
|
|
import javax.imageio.ImageIO;
|
import javax.swing.*;
|
import java.awt.*;
|
import java.awt.image.BufferedImage;
|
import java.io.FileInputStream;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
|
/**
|
* @author luodong
|
* @version 1.0
|
* @date 2020/5/23 21:13
|
*/
|
public class DrawingUtil {
|
public static void main(String[] args) {
|
// try {
|
// DrawingUtil.drawImage("D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\ca1.jpg",
|
// "D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\ca.jpg","D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\1.jpg"
|
// ,"张三",
|
// "123456",
|
// "深圳市保安员资格考试",
|
// "123456",
|
// "666",
|
// "圆融教育考试中心(深圳)",
|
// "圆融教育考试中心(深圳)考场16",
|
// "71区兴东众里创业社区3~5楼五楼502",
|
// "地铁5号线兴东站D出口(右转直行100米到达建设" +
|
// "工业园J栋兴东众里创业社区);驾车:导航" +
|
// "(圆融考试中心)可直达考场。无提供车位," +
|
// "建议公共交通出行。",
|
// "2016-02-02 9:00",
|
// "2016-02-02 9:00",
|
// "男");
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
}
|
/**
|
* @param img 图片路径
|
* @param sImg 小图片 980x994
|
* @param name, 姓名
|
* @param card, 号码
|
* @param cname, 科目
|
* @param number, 证号
|
* @param ID, 座位
|
* @param sitename, 考站名称
|
* @param ename, 考场名称
|
* @param address, 考场地址
|
* @param traffic, 考点交通
|
* @param starttime, 开始
|
* @param endtime 结束
|
* @param sex 性别
|
* */
|
public static void drawImage(String img,
|
String sImg,
|
// String nImg,
|
String name,
|
String card,
|
String cname,
|
String number,
|
String ID,
|
String sitename,
|
String ename,
|
String address,
|
String traffic,
|
String starttime,
|
String endtime,
|
String sex,
|
OutputStream outputStream
|
) throws Exception {
|
//读入图片到内存
|
InputStream is = DrawingUtil.class.getClassLoader().getResourceAsStream(img);
|
//创建JPEG解码器
|
BufferedImage bufferImg = ImageIO.read(is);
|
// JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
|
//获取缓冲数据流
|
// BufferedImage bufferImg = jpegDecoder.decodeAsBufferedImage();
|
//得到画笔对象
|
Graphics g = bufferImg.getGraphics();
|
|
/*创建附加的小图片对象*/
|
// ClassPathResource classP = new ClassPathResource(sImg);
|
// ImageIcon imgIcon=new ImageIcon(classP.getURL());
|
// //得到Image对象
|
// Image simg =imgIcon.getImage();
|
// //将小图片绘到大图片上,位置信息:(x,y)
|
// g.drawImage(simg,1241,433,null);
|
|
|
//设置字体颜色
|
g.setColor(new Color(78,76,75));//78,76,75
|
//字体、字体大小
|
Font f = new Font("微软雅黑", Font.PLAIN, 38);
|
g.setFont(f);
|
//图片上绘制字符串内容,位置信息(x,y)
|
g.drawString(name, 500,489);
|
g.drawString(card, 500, 561);
|
g.drawString(cname, 500,629);
|
g.drawString(number, 500, 699);
|
g.drawString(ID, 500, 769);
|
g.drawString(sitename, 500,857);
|
g.drawString(ename,500,909);
|
// g.drawString(address, 500,979);
|
drawText(g.getFont().getSize(),500,979,700,5,g,address);
|
// g.drawString(traffic, 500,1157);
|
drawText(g.getFont().getSize(),500,1080,700,5,g,traffic);
|
g.drawString(starttime, 500, 1337);
|
g.drawString(endtime, 500, 1405);
|
g.drawString(sex, 1081,489);
|
g.dispose();
|
// //输出新图片
|
// OutputStream out = new FileOutputStream(nImg);
|
//解析内存中的图像数据
|
// JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(outputStream);
|
// en.encode(bufferImg);
|
ImageIO.write(bufferImg, "jpeg", outputStream);
|
|
//关闭流
|
is.close();
|
// out.close();
|
}
|
|
/**
|
* 根据宽度自动换行
|
* @param fontSize 字体大小
|
* @param beginX 开始X
|
* @param beginY 开始Y
|
* @param imgWidth 区域宽度
|
* @param rowSpacing 行距
|
* @param g 画笔
|
* @param text 文本
|
*/
|
public static void drawText(int fontSize,int beginX,int beginY,int imgWidth,int rowSpacing,Graphics g,String text){
|
//文字叠加,自动换行叠加
|
int tempX = beginX ;
|
int tempY = beginY ;
|
int tempCharLen = 0;//单字符长度
|
int tempLineLen = 0;//单行字符总长度临时计算
|
StringBuffer sb = new StringBuffer();
|
int textMaxWidth = imgWidth - 10;
|
for (int i = 0; i < text.length(); i++) {
|
char tempChar = text.charAt(i);
|
tempCharLen = g.getFontMetrics(g.getFont()).charWidth(tempChar);
|
tempLineLen += tempCharLen;
|
if (tempLineLen >= textMaxWidth) {
|
//长度已经满一行,进行文字叠加
|
g.drawString(sb.toString(), tempX, tempY);
|
sb.delete(0, sb.length());//清空内容,重新追加
|
tempY += (fontSize + rowSpacing);
|
tempLineLen = 0;
|
}
|
sb.append(tempChar);//追加字符
|
}
|
g.drawString(sb.toString(), tempX, tempY);//最后叠加余下的文字
|
}
|
}
|