派生自 projectDept/qhighschool

EricsHu
2022-12-05 068fc7f2e81178e55fa191a13709af64b1a163f6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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);//最后叠加余下的文字
    }
}