`
arcticfox9902
  • 浏览: 108561 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

图片加水印,java实现

 
阅读更多

用java api实现的版本:

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.Transparency;
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;

public class ImgMarkUtil {
    /** 
     * 给图片添加水印、可设置水印图片旋转角度 
     * @param iconPath 水印图片路径 
     * @param srcImgPath 源图片路径 
     * @param targerPath 目标图片路径 
     * @param degree 水印图片旋转角度 
     */  
    public static void markImgByIcon(String iconPath, String srcImgPath,  
            String targetPath, Integer degree) {  
        try { 
            Image srcImg = ImageIO.read(new File(srcImgPath));  
  
            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),  
                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); 
            Graphics2D g = (Graphics2D)buffImg.getGraphics(); //得到画笔对象  
            
            String srcImgType = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1);
            //如果原图为png或gif格式,设置背景透明
            if("png".equalsIgnoreCase(srcImgType) || "gif".equalsIgnoreCase(srcImgType)) {
                buffImg = g.getDeviceConfiguration().createCompatibleImage(srcImg.getWidth(null),  
                                srcImg.getHeight(null), Transparency.TRANSLUCENT);
                g.dispose();
                g = buffImg.createGraphics();
            }
            
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);  //设置对线段的锯齿状边缘处理 
            g.drawImage(srcImg, 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 img = imgIcon.getImage();
  
            float alpha = 0.7f; //透明度  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); //设置水印透明度 
            g.drawImage(img, buffImg.getWidth()-img.getWidth(null)-10, 
                            buffImg.getHeight()-img.getHeight(null)-10, null);//画水印
            g.setComposite(AlphaComposite.SrcOver);  //设置回默认值SrcOver
  
            g.dispose();  
  
            ImageIO.write(buffImg, srcImgType, new File(targetPath));// 生成图片 
        } catch (Exception e) {  
            e.printStackTrace();  
        }
        
    }
}

 

除了自己实现,还可以直接用开源的thumbnailator,代码如下:

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

public class ImgMarkUtil {
    /** 
     * 给图片添加水印、可设置水印图片旋转角度 
     * @param iconPath 水印图片路径 
     * @param srcImgPath 源图片路径 
     * @param targerPath 目标图片路径 
     * @param degree 水印图片旋转角度 
     */  
    public static void markImgByIcon(String iconPath, String srcImgPath,  
            String targetPath, Integer degree) {  
        try {             
            BufferedImage originalImage = ImageIO.read(new File(srcImgPath));
            BufferedImage watermarkImage = ImageIO.read(new File(iconPath));

            BufferedImage thumbnail = Thumbnails.of(originalImage)
                    .size(originalImage.getWidth(), originalImage.getHeight()) 
                    .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.7f)
                    .asBufferedImage();
            
            String srcImgType = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1);
            ImageIO.write(thumbnail, srcImgType, new File(targetPath)); 
        } catch (Exception e) {  
            e.printStackTrace();  
        }
        
    }
}

 

 

 

分享到:
评论

相关推荐

    图片加水印java实现

    自己写的一个给图片加水印的类,我在企业里工作,一般涉及到给图片加水印的需求,都是用的这个类,很好用的,就传上来,大家分享一下,为了可阅读性,注释打的很详细,封装的很好,大家看看吧,有什么问题可以问我的...

    图片加水印 java代码实现

    图片加水印 java代码实现

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

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

    java实现对图片加水印

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

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

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

    java实现图片加水印.txt

    通过上述分析,我们可以看到Java实现图片加水印主要涉及到了文件输入输出、图像处理、图形绘制等多个方面的知识。掌握了这些技术,不仅能够帮助开发者完成简单的图片加水印任务,还能进一步扩展到更为复杂的图像处理...

    java操作excel实现水印图片

    java操作excel实现水印图片

    java 图片缩放、加水印

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

    java给图片添加水印

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

    java 图片水印 改变图片大小

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

    java图片加水印工具类

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

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

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

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

    1. **图片加水印**: - **基本概念**:水印是一种在图片上添加不可见或可见的标记,用于证明所有权、版权或者为图片增添额外信息。在Java中,可以通过Java的图像处理库如Java AWT或JavaFX来实现。 - **实现步骤**...

    Java给图片加水印

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

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

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

    水印 java Graphics2D实现文字图片水印

    下面将详细介绍如何使用Java Graphics2D实现文字和图片水印,以及如何在四个角落添加水印。 首先,我们要导入必要的Java库,包括java.awt和javax.imageio: ```java import java.awt.*; import java.awt.image....

    java 加水印 支持各种格式pdf doc 图片

    针对"java 加水印 支持各种格式pdf doc 图片"这个主题,我们将深入探讨如何在Java中为PDF、DOC文档以及图片添加水印。 首先,让我们来看PDF文件的水印处理。PDF文档由于其跨平台性和阅读体验,被广泛应用。在Java中...

    springboot实现上传图片添加水印

    在Spring Boot框架中实现图片上传并添加水印的功能,是一个常见的需求,特别是在开发涉及多媒体内容的Web应用时。下面将详细介绍这个过程,并涵盖相关的技术点。 首先,我们需要了解Spring Boot如何处理文件上传。...

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

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

    java导出pdf、加表格、加水印

    在Java开发中,导出PDF、添加表格以及加水印是常见的需求,这些功能可以用于创建报告、发票、证书等文档。PDF(Portable Document Format)是一种广泛应用的文档格式,能够跨平台保持一致的布局和样式。下面将详细...

Global site tag (gtag.js) - Google Analytics