java.awt實(shí)現(xiàn)在準(zhǔn)考證模板上寫(xiě)入考生信息生成圖片

準(zhǔn)考證模板.jpg

結(jié)果圖.jpeg
1、上代碼
/**圖片處理方法
* @param srcImgPath 源圖片路徑
* @param headImg 頭像路徑
* @param tarImgPath 保存的圖片路徑
* @param markContentColor 水印顏色
* @param font 水印字體
* @param name 考生信息(姓名)
* @param age 考生信息(性別)
* @param idcard 考生信息(證件號(hào))
* @param posi 考生信息(考點(diǎn))
* @param subject 考生信息(科目)
* @param time 考生信息(考試時(shí)間)
* @param examNo 考生信息(準(zhǔn)考證號(hào))
*/
public void addWaterMark(String srcImgPath,String headImg, String tarImgPath,
Color markContentColor,Font font,String name,String age,
String idcard,String posi,String subject,String time,String examNo) {
try {
// 讀取原圖片信息
File srcImgFile = new File(srcImgPath);//得到文件(底圖)
Image srcImg = ImageIO.read(srcImgFile);//文件轉(zhuǎn)化為圖片(底圖)
File headFile = new File(headImg);//得到文件(頭像)
Image headSrcImg = ImageIO.read(headFile);//文件轉(zhuǎn)化為圖片(頭像)
//獲取圖片寬高
int srcImgWidth = srcImg.getWidth(null);//獲取圖片的寬
int srcImgHeight = srcImg.getHeight(null);//獲取圖片的高
// 創(chuàng)建在內(nèi)存里的圖像緩沖區(qū)對(duì)象
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();//在緩沖區(qū)創(chuàng)建圖形
//底圖生成+位置設(shè)置(設(shè)置參數(shù)圖片的原尺寸)
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);// 繪制底圖模板
//考生信息字體設(shè)置
g.setColor(markContentColor); //根據(jù)圖片的背景設(shè)置水印顏色
g.setFont(font); //設(shè)置字體
//頭像生成+位置設(shè)置 //水平 //圖片大?。ㄋ?在底圖的某個(gè)位置)
g.drawImage(headSrcImg,480,29,108,125,null);// 繪制頭像
//設(shè)置水印的坐標(biāo)(考生信息水平位置設(shè)置)
// int x = srcImgWidth - 2*getWatermarkLength(waterMarkContent, g);
// int y = srcImgHeight - 2*getWatermarkLength(waterMarkContent, g);
g.drawString(name, 94, 117); //畫(huà)出水印(姓名)
g.drawString(age, 366, 117); //畫(huà)出水印(性別)
g.drawString(idcard, 94, 153); //畫(huà)出水印(身份證號(hào)碼)
g.drawString(posi, 94, 188); //畫(huà)出水印(考試地點(diǎn))
g.drawString(subject, 366, 188); //畫(huà)出水印(科目)
g.drawString(time, 523, 188); //畫(huà)出水印(考試時(shí)間)
g.drawString(examNo, 366, 151); //畫(huà)出水印(準(zhǔn)考證號(hào)碼)
g.dispose();//對(duì)bufImg對(duì)象設(shè)置的參數(shù)進(jìn)行提交!·
// 輸出圖片
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, "jpg", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
} catch (Exception e) {
// TODO: handle exception
}
}
2、主線程測(cè)試
public static void main(String[] args) {
//水印字體,Font.PLAIN可以自定義設(shè)置
Font font = new Font("微軟雅黑", Font.PLAIN, 15);
String srcImgPath="G:/img/準(zhǔn)考證模板.jpg"; //源圖片地址
String headImg="G:/img/頭像.jpeg"; //頭像地址
String tarImgPath="G:/img/結(jié)果圖.jpeg"; //待存儲(chǔ)的地址
String name="V"; //水印內(nèi)容
String age="男"; //水印內(nèi)容
String idcard="110133199508080808"; //水印內(nèi)容
String posi="和平二十中學(xué)"; //水印內(nèi)容
String examNo="G3200910000130006"; //水印內(nèi)容
String subject="subject"; //水印內(nèi)容
String time="2020-10-27"; //水印內(nèi)容
Color color=new Color(0,25,25,225);//水印圖片色彩以及透明度(黑色)
new WaterMarkUtils().addWaterMark(srcImgPath,headImg, tarImgPath, color,
font,name,age,idcard,posi,subject,time,examNo);
}