java实现图片的水印和嵌套图片

java.awt实现在准考证模板上写入考生信息生成图片

准考证模板.jpg
结果图.jpeg

1、上代码

    /**图片处理方法
     * @param srcImgPath 源图片路径
     * @param headImg 头像路径
     * @param tarImgPath 保存的图片路径
     * @param markContentColor 水印颜色
     * @param font 水印字体
     * @param name 考生信息(姓名)
     * @param age 考生信息(性别)
     * @param idcard 考生信息(证件号)
     * @param posi 考生信息(考点)
     * @param subject 考生信息(科目)
     * @param time 考生信息(考试时间)
     * @param examNo 考生信息(准考证号)
     */
    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);//文件转化为图片(底图)
            File headFile = new File(headImg);//得到文件(头像)
            Image headSrcImg = ImageIO.read(headFile);//文件转化为图片(头像)
            //获取图片宽高
            int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
            int srcImgHeight = srcImg.getHeight(null);//获取图片的高
            // 创建在内存里的图像缓冲区对象
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImg.createGraphics();//在缓冲区创建图形
            //底图生成+位置设置(设置参数图片的原尺寸)
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);// 绘制底图模板
            //考生信息字体设置
            g.setColor(markContentColor); //根据图片的背景设置水印颜色
            g.setFont(font);              //设置字体
            //头像生成+位置设置     //水平 //图片大小(水平=在底图的某个位置)
            g.drawImage(headSrcImg,480,29,108,125,null);// 绘制头像

            //设置水印的坐标(考生信息水平位置设置)
//            int x = srcImgWidth - 2*getWatermarkLength(waterMarkContent, g);
//            int y = srcImgHeight - 2*getWatermarkLength(waterMarkContent, g);
            g.drawString(name, 94, 117);  //画出水印(姓名)
            g.drawString(age, 366, 117);  //画出水印(性别)
            g.drawString(idcard, 94, 153);  //画出水印(身份证号码)
            g.drawString(posi, 94, 188);  //画出水印(考试地点)
            g.drawString(subject, 366, 188);  //画出水印(科目)
            g.drawString(time, 523, 188);  //画出水印(考试时间)
            g.drawString(examNo, 366, 151);  //画出水印(准考证号码)
            g.dispose();//对bufImg对象设置的参数进行提交!·
            // 输出图片
            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
            ImageIO.write(bufImg, "jpg", outImgStream);
            System.out.println("添加水印完成");
            outImgStream.flush();
            outImgStream.close();

        } catch (Exception e) {
            // TODO: handle exception
        }
    }

2、主线程测试

  public static void main(String[] args) {
        //水印字体,Font.PLAIN可以自定义设置
        Font font = new Font("微软雅黑", Font.PLAIN, 15); 
        String srcImgPath="G:/img/准考证模板.jpg"; //源图片地址
        String headImg="G:/img/头像.jpeg"; //头像地址
        String tarImgPath="G:/img/结果图.jpeg"; //待存储的地址
        String name="V";  //水印内容
        String age="男";  //水印内容
        String idcard="110133199508080808";  //水印内容
        String posi="和平二十中学";  //水印内容
        String examNo="G3200910000130006";  //水印内容
        String subject="subject";  //水印内容
        String time="2020-10-27";  //水印内容
        Color color=new Color(0,25,25,225);//水印图片色彩以及透明度(黑色)
        new WaterMarkUtils().addWaterMark(srcImgPath,headImg, tarImgPath, color,
                 font,name,age,idcard,posi,subject,time,examNo);
    }

BufferedImage、Image、Graphics类介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容