• JAVA给图片添加水印


    package com.test;
    
    import org.junit.Test;
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class JunitImage {
        @Test
        public void testImage(){
            markImageByText("hello world","D:/1.jpg","D:2.jpg",45,new Color(0,0,0),"JPG");
        }
    
    
        /**
         * 给图片添加水印文字、可设置水印文字的旋转角度
         * @param logoText 要写入的文字
         * @param srcImgPath 源图片路径
         * @param newImagePath 新图片路径
         * @param degree 旋转角度
         * @param color  字体颜色
         * @param formaName 图片后缀
         */
        public static void markImageByText(String logoText, String srcImgPath,String newImagePath,Integer degree,Color color,String formaName) {
            InputStream is = null;
            OutputStream os = null;
            try {
                // 1、源图片
                java.awt.Image srcImg = ImageIO.read(new File(srcImgPath));
                BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
                // 2、得到画笔对象
                Graphics2D g = buffImg.createGraphics();
                // 3、设置对线段的锯齿状边缘处理
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), java.awt.Image.SCALE_SMOOTH), 0, 0, null);
                // 4、设置水印旋转
                if (null != degree) {
                    g.rotate(Math.toRadians(degree),  buffImg.getWidth()/2,buffImg.getHeight() /2);
                }
                // 5、设置水印文字颜色
                g.setColor(color);
                // 6、设置水印文字Font
                g.setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, buffImg.getHeight() /2));
                // 7、设置水印文字透明度
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.15f));
                // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
                g.drawString(logoText,  buffImg.getWidth()/2 , buffImg.getHeight()/2);
                // 9、释放资源
                g.dispose();
                // 10、生成图片
                os = new FileOutputStream(newImagePath);
                ImageIO.write(buffImg, formaName, os);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (null != is)
                        is.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    if (null != os)
                        os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    
    }
    

      

  • 相关阅读:
    【Java高级工程师蜕变之路】008 Spring核心思想
    【Java高级工程师蜕变之路】003 MyBatis高级进阶
    【Java高级工程师蜕变之路】007 Spring基础回顾
    【Java高级工程师蜕变之路】006 ErrorContext的机制分析
    【Java高级工程师蜕变之路】002 自定义持久层框架
    【Java高级工程师蜕变之路】001 JDBC的问题分析
    如何配置mac环境下的JAVA_HOME
    【Java高级工程师蜕变之路】005 MyBatis插件及其应用
    【Java高级工程师蜕变之路】004 MyBatis源码剖析
    ConcurrentHashMap中的2的n次方幂上舍入方法
  • 原文地址:https://www.cnblogs.com/qinxu/p/8350521.html
Copyright © 2020-2023  润新知