java生成经典《有内鬼,终止交易》图片

262 阅读2分钟

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

最终效果图

image.png

实现原理

用java原生自带的图片工具类将文字和背景图进行合成

素材

image.png

代码实现

public static void main(String[] args) throws Exception {
        // 字体文件地址
        Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("/Users/hans/work_space/java_project/javase/src/asm/img/nokia.ttf"));
//        Font font = new Font("微软雅黑", Font.PLAIN, 60);
        font = font.deriveFont(Font.BOLD, 60L);


        //水印字体
        String srcImgPath="/Users/hans/work_space/java_project/javase/src/asm/img/nokia.jpg"; //源图片地址
        String tarImgPath="/Users/hans/work_space/java_project/javase/src/asm/img/test_1.jpeg"; //待存储的地址
        String waterMarkContent="有内鬼,终止交易!";  //水印内容
        // 字体颜色
        Color markContentColor = new Color(0, 0, 0);
//        Color color = new Color(255, 255, 255, 128);

        // 读取原图片信息
        File srcImgFile = new File(srcImgPath);//得到文件
        Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
        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);              //设置字体

        //设置水印的坐标
        int x = 250;
        int y = 400;

        // 字体倾斜角度
        Integer degree = 10;

        if (null != degree) {
            g.rotate(Math.toRadians(degree), 300, 500);//设置水印旋转
        }

        g.drawString(waterMarkContent, x, y);  //画出水印
        g.dispose();
        // 输出图片
        FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
        ImageIO.write(bufImg, "jpg", outImgStream);
        System.out.println("添加水印完成");
        outImgStream.flush();
        outImgStream.close();

    }

注意事项

  • 其中如上的水印xy坐标需要用其他工具计算,这个方法很多,可以用ps这种图片编辑工具,也可以用不断测试法

  • 字体样式呢也可以自己去找合适的,目前我找的这个看起来还是有些别扭

  • 字体的倾斜角度这个得一点一点的调试,不断修改数据,不断查看效果

  • 调试阶段最好将字体的颜色设置为红色这种非常显眼的,否则如果生成的图片没有任何变化可能是字体太小、颜色不明显造成调试时间的浪费