`
bufferW
  • 浏览: 18035 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java实现水印功能

 
阅读更多
[size=large][color=blue]
图片水印:
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();
            }
        }
    }
}

文字水印:
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();
            }
        }
    }
}

[/color]
[/size]
分享到:
评论

相关推荐

    采用java实现图片水印

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

    java实现水印的源码

    在Java编程语言中,添加水印是一项常见的任务,特别是在处理图像和文档时,为了保护版权或者增加信息。这里我们将深入探讨两种方法,一种是给文字添加...通过这种方式,你可以灵活地为你的项目实现高质量的水印功能。

    java水印功能通用类

    "java水印功能通用类"是一个专门为实现这一目的而设计的代码库,它提供了一种方便、可复用的方式来为各种类型的数据添加水印。下面我们将深入探讨Java水印功能的相关知识点,以及如何使用此类库进行实际操作。 1. *...

    java实现图片水印添加

    在Java编程语言中,添加图片水印是一项常见的图像处理任务,尤其在版权保护、品牌推广等领域广泛应用。通过编写代码,我们可以灵活...通过熟练掌握这些技巧,你可以轻松地在自己的项目中添加专业级别的图片水印功能。

    java实现文字水印效果和实现图标水印效果

    以上就是Java实现文字水印和图标水印的基本步骤。在实际应用中,可能还需要考虑水印的位置、透明度、旋转角度等因素,以达到最佳的视觉效果。同时,为了提高性能,可以考虑对大批量图片进行批量处理,或者使用多线程...

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

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

    java实现动态水印.zip

    总的来说,Java实现动态水印的过程涉及了文件I/O操作、图像处理和第三方库的使用。通过jxl库,开发者可以方便地在Excel文件上添加自定义的水印,以增加数据安全性。而提供修改过的jar包则表明这是一个针对特定需求...

    java实现对图片加水印

    下面将详细讲解如何使用Java实现这个功能。 首先,我们需要了解基本概念。水印通常是一个文字、图像或者透明度调整过的图案,被叠加到原始图片上,以达到标识或保护目的。在Java中,我们可以利用Java Advanced ...

    java 图片水印 改变图片大小

    Java的`ImageIO`和` BufferedImage`类提供了缩放图片的功能。我们可以使用`getScaledInstance`方法进行等比例缩放,或者通过`Graphics2D`的`drawImage`方法自定义缩放比例。在处理过程中需要注意保持图片的原始宽高...

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

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

    Aspose for Java 去除水印和数量限制

    这个库允许开发者在Java应用程序中实现文件的创建、读取、修改、转换和打印等功能,无需依赖任何第三方软件。然而,免费版本的Aspose for Java通常会带有水印,并且对处理文件的数量有限制,这可能对商业应用造成...

    java生成水印图片

    本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 首先,我们需要一个基础的图像处理库,如Java的`java.awt`和`java.awt.image`包,它们提供了处理图像的基本...

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

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

    使用java实现对PDF增加文字水印功能

    总结起来,通过Java和iText库,我们可以方便地实现PDF文字水印的功能,保护文档的版权和防止非法复制。在处理包含亚洲字符的PDF时,需要引入如iTextAsianCmaps.jar这样的特殊字符集支持文件。这个过程需要对PDF结构...

    aspose Java版本去水印 word excel ppt 转PDF文件

    接下来,`PdfUtil.java`和`controller.java`可能是实现具体功能的Java类。`PdfUtil`可能包含去除水印和转换文件为PDF的逻辑,而`controller`可能是处理用户请求的控制器,调用`PdfUtil`的方法来执行实际操作。例如,...

    java中处理图片水印

    `Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`Graphics2D`处理图片水印。 1. **Java 2D API** Java 2D API 是Java...

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

    通过以上这些知识点的结合运用,我们可以构建一个功能完善的Java应用,实现图片上传并添加自定义水印的效果,满足不同需求。这个过程既包括了基本的图像处理技术,也涵盖了Web服务和GUI设计的实践。

    java图片附加水印源码

    在这个Java实现中,`WaterMarkUtil.java`很可能是核心类,它可能包含了添加水印的逻辑,包括创建一个`Graphics2D`对象,设置字体、颜色、透明度等属性,然后在原始图像上绘制水印。 3. **透明度设置**:在Java中,...

    java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密

    在Java中,iText库提供了SignPDF方法,可以结合Java Cryptography Extension (JCE) 和Certificate Authority (CA) 的数字证书来实现这一功能。首先,你需要获取用户的私钥和公钥证书,然后使用iText的PdfStamper类将...

    java水印实现代码

    以下是一个关于如何在Java中实现水印功能的详细解释。 首先,我们需要引入处理图像的库。Java标准库中的`javax.imageio.ImageIO`可以读取和写入图像文件,但不支持直接添加水印。因此,我们通常会使用Apache ...

Global site tag (gtag.js) - Google Analytics