`
hzw2312
  • 浏览: 9949 次
  • 性别: Icon_minigender_1
  • 来自: 避暑天堂
社区版块
存档分类
最新评论

转载:java实现给图片加水印

    博客分类:
  • J2EE
阅读更多
周末在家上围脖,看到sina围脖上图片都有水印,想到Java有专门Image的处理包,同样应该可以实现水印功能,查了资料小试下来发现java实现水印还是非常方便的,水印可以是图片或者文字,而且还可以选择不同的角度旋转呢,以后有需要可以写个代码批量处理自己的图片了。



本门目录:

    图片水印
    文字水印

[一]、图片水印
    package michael.io.image;  
      
    import java.awt.AlphaComposite;  
    import java.awt.Graphics2D;  
    import java.awt.Image;  
    import java.awt.RenderingHints;  
    import java.awt.image.BufferedImage;  
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.InputStream;  
    import java.io.OutputStream;  
      
    import javax.imageio.ImageIO;  
    import javax.swing.ImageIcon;  
      
    import com.sun.image.codec.jpeg.JPEGCodec;  
    import com.sun.image.codec.jpeg.JPEGImageDecoder;  
    import com.sun.image.codec.jpeg.JPEGImageEncoder;  
      
    /** 
     * 图片水印 
     * @blog http://sjsky.iteye.com 
     * @author Michael 
     */  
    public class ImageMarkLogoByIcon {  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            String srcImgPath = "d:/test/michael/myblog_01.png";  
            String iconPath = "d:/test/michael/blog_logo.png";  
            String targerPath = "d:/test/michael/img_mark_icon.jpg";  
            String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg";  
            // 给图片添加水印  
            ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath);  
            // 给图片添加水印,水印旋转-45  
            ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2,  
                    -45);  
      
        }  
      
        /** 
         * 给图片添加水印 
         * @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);  
      
                // 得到画笔对象  
                // Graphics g= buffImg.getGraphics();  
                Graphics2D g = buffImg.createGraphics();  
      
                // 设置对线段的锯齿状边缘处理  
                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);  
      
                if (null != degree) {  
                    // 设置水印旋转  
                    g.rotate(Math.toRadians(degree),  
                            (double) buffImg.getWidth() / 2, (double) buffImg  
                                    .getHeight() / 2);  
                }  
      
                // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度  
                ImageIcon imgIcon = new ImageIcon(iconPath);  
      
                // 得到Image对象。  
                Image img = imgIcon.getImage();  
      
                float alpha = 0.5f; // 透明度  
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
                        alpha));  
      
                // 表示水印图片的位置  
                g.drawImage(img, 150, 300, null);  
      
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));  
      
                g.dispose();  
      
                os = new FileOutputStream(targerPath);  
      
                // 生成图片  
                ImageIO.write(buffImg, "JPG", os);  
      
                System.out.println("图片完成添加Icon印章。。。。。。");  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (null != os)  
                        os.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  

原始图片myblog_01.jpg:
[img]http://dl.iteye.com/upload/attachment/540325/83a1d25d-f6fc-3811-a0ad-1ac9db1d3f4b.jpg
[/img]

水印图片blog_logo.png:
[img]
http://dl.iteye.com/upload/attachment/540327/9ad25442-c564-3ac9-bbc2-af385cd017d4.png
[/img]

添加水印后的效果图:
[img]
http://dl.iteye.com/upload/attachment/540329/812c74ce-8464-37a3-9abb-97cb59d9b63b.jpg
[/img]

水印图标旋转的效果图:
[img]
http://dl.iteye.com/upload/attachment/540331/c9cd8419-85a1-3d36-b543-75a596873aab.jpg
[/img]


[二]、文字水印
    package michael.io.image;  
      
    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;  
      
    /** 
     * 文字水印 
     * @blog http://sjsky.iteye.com 
     * @author Michael 
     */  
    public class ImageMarkLogoByText {  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            String srcImgPath = "d:/test/michael/myblog_01.jpg";  
            String logoText = "[ 测试文字水印 http://sjsky.iteye.com ]";  
            String targerPath = "d:/test/michael/img_mark_text.jpg";  
      
            String targerPath2 = "d:/test/michael/img_mark_text_rotate.jpg";  
      
            // 给图片添加水印  
            ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath);  
      
            // 给图片添加水印,水印旋转-45  
            ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath2, -45);  
        }  
      
        /** 
         * 给图片添加水印 
         * @param logoText 
         * @param srcImgPath 
         * @param targerPath 
         */  
        public static void markByText(String logoText, String srcImgPath,  
                String targerPath) {  
            markByText(logoText, srcImgPath, targerPath, null);  
        }  
      
        /** 
         * 给图片添加水印、可设置水印的旋转角度 
         * @param logoText 
         * @param srcImgPath 
         * @param targerPath 
         * @param degree 
         */  
        public static void markByText(String logoText, String srcImgPath,  
                String targerPath, Integer degree) {  
            // 主图片的路径  
            InputStream is = null;  
            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);  
      
                // 得到画笔对象  
                // Graphics g= buffImg.getGraphics();  
                Graphics2D g = buffImg.createGraphics();  
      
                // 设置对线段的锯齿状边缘处理  
                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);  
      
                if (null != degree) {  
                    // 设置水印旋转  
                    g.rotate(Math.toRadians(degree),  
                            (double) buffImg.getWidth() / 2, (double) buffImg  
                                    .getHeight() / 2);  
                }  
      
                // 设置颜色  
                g.setColor(Color.red);  
      
                // 设置 Font  
                g.setFont(new Font("宋体", Font.BOLD, 30));  
      
                float alpha = 0.5f;  
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
                        alpha));  
      
                // 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) .  
                g.drawString(logoText, 150, 300);  
      
                g.dispose();  
      
                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();  
                }  
            }  
        }  
    }  


添加文字水印后的效果图如下:
[img]
http://dl.iteye.com/upload/attachment/540335/771e9a38-56bc-3bfb-bf59-a26c1e6e86ce.jpg
[/img]

文字旋转后的效果图如下:
[img]
http://dl.iteye.com/upload/attachment/540333/26c55ac2-1ecf-36a6-bd98-51c484ef1638.jpg
[/img]

原文出处:http://sjsky.iteye.com/blog/1154390
分享到:
评论

相关推荐

    JAVA实现给图片增加图片水印或者文字水印-依赖包

    在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是...但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的功能。记得在运行此代码前,确保已经正确引入了Apache Commons Imaging库。

    java实现对图片加水印

    总结一下,Java 2D API和JAI库都能帮助我们实现图片加水印的功能。选择哪种方式取决于具体需求,如性能、复杂性和可用资源。理解这些概念和步骤,开发者就能根据实际情况编写出自己的Java代码,实现个性化的图片水印...

    java给图片添加水印

    在Java编程语言中,给图片添加水印是一项常见的任务,特别是在网站开发中,为了保护版权或者标识来源,经常需要在用户上传的图片上添加特定的文字或图像水印。以下将详细讲解如何使用Java来实现这一功能。 首先,...

    java图片加水印(适应铺满)

    开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我

    Java给图片加水印

    "Java给图片加水印"这个主题,就是关于如何利用Java技术在图片上添加标识或文字,以保护版权或者增强视觉效果。下面我们将深入探讨这个话题。 首先,我们需要了解Java中的图像处理库,如Java Advanced Imaging (JAI...

    采用java实现图片水印

    本篇文章将详细探讨如何使用Java实现图片水印的添加,以及相关的知识点。 首先,我们需要了解Java中的图像处理库。Java标准库提供了`java.awt`和`javax.imageio`包,它们包含了处理图像的基本功能。`java.awt`包中...

    java代码上传文件时加水印.rar

    java代码上传文件时加水印: 内有jar包的说明文件 图片加水印:TestWaterPrint.java WORD文档加水印:AddWatermarkUtil.java PDF加水印:TestWaterPrint.java Excel加水印:ExcelWaterRemarkUtils.java

    java实现图片加水印.txt

    通过本篇文章,我们将详细介绍如何利用Java编程语言实现给图片添加水印的功能,并深入解析相关代码。 #### 二、核心知识点 ##### 1. 图片处理基础 - **概念**:图片处理是指通过软件技术对数字图像进行一系列的...

    java 图片缩放、加水印

    图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。

    图片加水印 java代码实现

    图片加水印 java代码实现

    Java为图片添加水印功能.rar

    Java为图片添加水印功能,这个水印类的操作比较实用,不但可以旋转水印图像,还可设置其水印图片的透明度,使其与原图融为一体,给图片添加水印,可以设置图片水印的角度,设置对线段的锯齿状边缘处理,第一参数->...

    java操作excel实现水印图片

    java操作excel实现水印图片

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...

    java Jacob完美实现word添加图片水印(内附源码及jar包)

    java Jacob完美实现word添加图片水印(内附源码及jar包)。 公司最近让搞Word文档添加水印,所有下载的文档需要添加公司印章,搞了好多天才实现,利用Jacob完美实现word添加图片水印(注意需要把dll文件放到jdk的bin...

    java 图片水印 改变图片大小

    在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...

    java图片加水印及图片加解密

    在Java编程领域,图片处理是一项常见的任务,包括添加水印和对图片进行加解密。以下将详细探讨这些知识点。 1. **图片加水印**: - **基本概念**:水印是一种在图片上添加不可见或可见的标记,用于证明所有权、...

    delphi实现给图片加水印2用ImageEn控件

    ### Delphi 实现给图片添加水印:使用 ImageEn 控件 #### 背景介绍 在 Delphi 开发环境中,实现对图像处理的需求时,经常会遇到需要为图片添加水印的情况。添加水印不仅可以保护图片版权,还能提高品牌识别度。本文...

    java图片加水印工具类

    这个“java图片加水印工具类”正是为了简化这一过程而设计的,它允许开发者通过调用预定义的方法,快速地在图片上添加文字或图形水印,无需每次都手动编写相同的功能代码。 首先,我们需要了解什么是水印。水印通常...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    Java 实现word文件增加图片水印 jacob实现 用到的jar

    在处理文档操作时,Java提供了一些库来实现高级功能,比如在Word文档中添加图片水印。本篇将深入探讨如何使用Java和两个特定的库——iTextPDF与Jacob——来实现这一目标。 首先,iTextPDF是一个开源的Java库,专门...

Global site tag (gtag.js) - Google Analytics