博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现图片水印
阅读量:6071 次
发布时间:2019-06-20

本文共 7706 字,大约阅读时间需要 25 分钟。

hot3.png

package com.founder.cms.watermark.util; import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream; import javax.imageio.ImageIO;import javax.swing.ImageIcon; /******************************************************************************* * Description: 图片水印工具类  * Copyright: Copyright (c) 2011  * Company: Founder  * Project: CMS *  * @Author Aaron * @version 1.0 * @See  * HISTORY 2011-9-27 taoxg create ******************************************************************************/public class ImageMarkLogoUtil {         // 水印透明度     private static float alpha = 0.5f;    // 水印横向位置    private static int positionWidth = 150;    // 水印纵向位置    private static int positionHeight = 300;    // 水印文字字体    private static Font font = new Font("宋体", Font.BOLD, 30);    // 水印文字颜色    private static Color color = Color.red;    /**     *      * @param alpha      *          水印透明度     * @param positionWidth      *          水印横向位置     * @param positionHeight      *          水印纵向位置     * @param font      *          水印文字字体     * @param color      *          水印文字颜色     */    public static void setImageMarkOptions(float alpha , int positionWidth , int positionHeight ,Font font,Color color){        if(alpha!=0.0f)ImageMarkLogoUtil.alpha = alpha;        if(positionWidth!=0)ImageMarkLogoUtil.positionWidth = positionWidth;        if(positionHeight!=0)ImageMarkLogoUtil.positionHeight = positionHeight;        if(font!=null)ImageMarkLogoUtil.font = font;        if(color!=null)ImageMarkLogoUtil.color = color;    }         /**     * 给图片添加水印图片     *      * @param iconPath     *            水印图片路径     * @param srcImgPath     *            源图片路径     * @param targerPath     *            目标图片路径     */    public static void markImageByIcon(String iconPath, String srcImgPath,            String targerPath) {        markImageByIcon(iconPath, srcImgPath, targerPath, null);    }     /**     * 给图片添加水印图片、可设置水印图片旋转角度     *      * @param iconPath     *            水印图片路径     * @param srcImgPath     *            源图片路径     * @param targerPath     *            目标图片路径     * @param degree     *            水印图片旋转角度     */    public static void markImageByIcon(String iconPath, String srcImgPath,            String targerPath, Integer degree) {        OutputStream os = null;        try {                         Image srcImg = ImageIO.read(new File(srcImgPath));             BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);             // 1、得到画笔对象            Graphics2D g = buffImg.createGraphics();             // 2、设置对线段的锯齿状边缘处理            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);            g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);            // 3、设置水印旋转            if (null != degree) {                g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);            }             // 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度            ImageIcon imgIcon = new ImageIcon(iconPath);             // 5、得到Image对象。            Image img = imgIcon.getImage();                         g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));             // 6、水印图片的位置            g.drawImage(img, positionWidth, positionHeight, null);            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));            // 7、释放资源            g.dispose();                         // 8、生成图片            os = new FileOutputStream(targerPath);            ImageIO.write(buffImg, "JPG", os);             System.out.println("图片完成添加水印图片");                     } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (null != os)                    os.close();            } catch (Exception e) {                e.printStackTrace();            }        }    }     /**     * 给图片添加水印文字     *      * @param logoText      *          水印文字     * @param srcImgPath     *          源图片路径     * @param targerPath     *          目标图片路径     */    public static void markImageByText(String logoText, String srcImgPath,            String targerPath) {        markImageByText(logoText, srcImgPath, targerPath, null);    }     /**     * 给图片添加水印文字、可设置水印文字的旋转角度     *      * @param logoText     * @param srcImgPath     * @param targerPath     * @param degree     */    public static void markImageByText(String logoText, String srcImgPath,            String targerPath, Integer degree) {                 InputStream is = null;        OutputStream os = null;        try {            // 1、源图片            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), Image.SCALE_SMOOTH), 0, 0, null);            // 4、设置水印旋转            if (null != degree) {                g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);            }            // 5、设置水印文字颜色            g.setColor(color);            // 6、设置水印文字Font            g.setFont(font);            // 7、设置水印文字透明度            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));            // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)            g.drawString(logoText, positionWidth, positionHeight);            // 9、释放资源            g.dispose();            // 10、生成图片            os = new FileOutputStream(targerPath);            ImageIO.write(buffImg, "JPG", os);             System.out.println("图片完成添加水印文字");                     } 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();            }        }    }         public static void main(String [] args){        String srcImgPath = "d:/qie.jpg";          String logoText = "[ I love Qie]";        String iconPath = "d:/shuimu.jpg";                   String targerTextPath = "d:/qie_text.jpg";          String targerTextPath2 = "d:/qie_text_rotate.jpg";                 String targerIconPath = "d:/qie_icon.jpg";          String targerIconPath2 = "d:/qie_icon_rotate.jpg";                 System.out.println("给图片添加水印文字开始...");        // 给图片添加水印文字          markImageByText(logoText, srcImgPath, targerTextPath);          // 给图片添加水印文字,水印文字旋转-45          markImageByText(logoText, srcImgPath, targerTextPath2, -45);          System.out.println("给图片添加水印文字结束...");                 System.out.println("给图片添加水印图片开始...");        setImageMarkOptions(0.3f,1,1,null,null);        // 给图片添加水印图片          markImageByIcon(iconPath, srcImgPath, targerIconPath);          // 给图片添加水印图片,水印图片旋转-45          markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);         System.out.println("给图片添加水印图片结束...");    } }

 

转载于:https://my.oschina.net/AaronDMC/blog/750827

你可能感兴趣的文章
笔记本搜索不到某一AP广播的SSID,信道的原因
查看>>
基于Spring MVC的异常处理及日志管理
查看>>
MediaBrowserService 音乐播放项目《IT蓝豹》
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
dom4j解析xml文件
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>