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

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

关于jar包的导入我就不多说了,我会把引入的jar包显示出来,大家自行Google

package com.net.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: 图片水印工具类  * @author zhangdi * @version 1.0 */public class ImageRemarkUtil {    // 水印透明度    private static float alpha = 0.5f;    // 水印横向位置    private static int positionWidth = 150;    // 水印纵向位置    private static int positionHeight = 300;    // 水印文字字体    private static Font font = new Font("宋体", Font.BOLD, 72);    // 水印文字颜色    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)            ImageRemarkUtil.alpha = alpha;        if (positionWidth != 0)            ImageRemarkUtil.positionWidth = positionWidth;        if (positionHeight != 0)            ImageRemarkUtil.positionHeight = positionHeight;        if (font != null)            ImageRemarkUtil.font = font;        if (color != null)            ImageRemarkUtil.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:/1.jpg";//        String logoText = "复 印 无 效";//        String iconPath = "d:/2.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("给图片添加水印图片结束...");////    }}

 

posted on
2017-04-22 19:42 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/zhangdiIT/p/6748913.html

你可能感兴趣的文章
windows phone 8 新增功能:从一个应用程序启动另一个程序(file association 和 Protocol association两种方式)...
查看>>
Angularjs总结(七) 路由及请求服务等
查看>>
Bindservice开启服务特点
查看>>
centos session
查看>>
Google Code Jam 2014 资格赛:Problem D. Deceitful War
查看>>
上传文件
查看>>
串口波形分析
查看>>
html5-css列表和表格
查看>>
【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
查看>>
.net判断System.Data.DataRow中是否包含某列
查看>>
Design T-Shirt 排序
查看>>
javaweb项目中关于配置文件web.xml的解析
查看>>
循环语句
查看>>
noip rp++
查看>>
大数加法 (A + B Problem II)
查看>>
Are you sure you want to continue connecting etc ssh ssh_config StrictHostKeyChecking no
查看>>
草稿--cgi
查看>>
同步,异步,阻塞,非阻塞
查看>>
文件缓存
查看>>
bash Shell 中如何实现条件判断之if判断
查看>>