`
huibin
  • 浏览: 756812 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java 给图片加文字水印

    博客分类:
  • JAVA
 
阅读更多
java给图片加水印,在网上有很多资料,但我想要一个能自适应图片大小,将水印加在图片中间或右下角,这个问题我觉得应该是一个算法的问题
得根据图片大小调整水印文字的字体大小,及显示缩进比例
package com.jc.ts.services;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 *添加图片水印的服务类
 * */
public class WaterMark {
  /**
   * @param sizeContext添加水印文字
   * @param request 请求流对象
   * @param request 响应流对象
   * */
   @SuppressWarnings("deprecation")
 public   static   void  createMarkSize(String sizeContext,HttpServletRequest request,HttpServletResponse response)   {
    try {
     String path=request.getRealPath(request.getServletPath());
     FileInputStream in=new FileInputStream(path);
     Image src=ImageIO.read(in);
     int w=src.getWidth(null);
     int h=src.getHeight(null);
     BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//构建画板
     Graphics g=img.getGraphics();//得到画笔
     g.drawImage(src,0,0,w,h,null);//把源图片写入画板
     g.setColor(Color.red);
     g.drawString(sizeContext,10,5);  // 添加文字
     g.dispose();//生成图片
     JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
     e.encode(img);
     response.getOutputStream().close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ImageFormatException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
  /** 
    * @param localPath 添加水印LOGO路径
    * @param request 请求流对象
    * @param request 响应流对象
    **/
    @SuppressWarnings("deprecation")
  public   static   void  createMarkLogo(String localPath,HttpServletRequest request,HttpServletResponse response)   {
     try {
      FileInputStream file=new FileInputStream(localPath);
      Image fimg=ImageIO.read(file);
      int fw=fimg.getWidth(null);
      int fh=fimg.getHeight(null);
      String path=request.getRealPath(request.getServletPath());
      FileInputStream in=new FileInputStream(path);
      Image src=ImageIO.read(in);
      int w=src.getWidth(null);
      int h=src.getHeight(null);
      BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//构建画板
      Graphics g=img.getGraphics();//得到画笔
      g.drawImage(src,0,0,w,h,null);//把原图片写入画板
      g.drawImage(fimg,w-20,h-15,fw,fh,null);//把水印图片写入画板
      g.dispose();//生成图片
      JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
      e.encode(img);
      response.getOutputStream().close();
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ImageFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

}

      /** 
    * @param localPath 添加水印图片路径
    * @param request 请求流对象
    * @param request 响应流对象
                  * @param width   水印图片的宽度
                  * @param height  水印图片的长度
    **/
    @SuppressWarnings("deprecation")
  public   static   void  createMarkLogo(String localPath,HttpServletRequest request,HttpServletResponse response,int width,int height)   {
     try {
      FileInputStream file=new FileInputStream(localPath);
      Image fimg=ImageIO.read(file);
      int fw=fimg.getWidth(null);
      int fh=fimg.getHeight(null);
      String path=request.getRealPath(request.getServletPath());
      FileInputStream in=new FileInputStream(path);
      Image src=ImageIO.read(in);
      int w=src.getWidth(null);//w为你过滤图片的宽度
      int h=src.getHeight(null);//h为你过滤图片的长度
      BufferedImage img=new BufferedImage(w+width,h+height,BufferedImage.TYPE_INT_RGB);//构建画板(画板的宽度为两个图片之和)
      Graphics g=img.getGraphics();//得到画笔
      g.drawImage(src,0,0,w,h,null);//把原图片写入画板
      g.drawImage(fimg,width,height,fw,fh,null);//把水印图片写入画板
      g.dispose();//生成图片
      JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
      e.encode(img);
      response.getOutputStream().close();
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ImageFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

}   
注意第三个方法的注释地方g.drawImage(fimg,width,height,fw,fh,null);根据参数你在调调(放原图下面的)

过滤器调用
package com.jc.ts.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jc.ts.services.WaterMark;

public class WaterFilter implements Filter {

 public void destroy() {
  // TODO Auto-generated method stub

 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request=(HttpServletRequest)arg0;
    HttpServletResponse response=(HttpServletResponse)arg1;
    //WaterMark.createMarkSize("南京ts", request, response);
                 //WaterMark.createMarkLogo("D:\\workspace\\mybook\\WebRoot\\images\\logo\\book.jpg", request, response);
    WaterMark.createMarkLogo("D:\\workspace\\mybook\\WebRoot\\images\\logo\\book.jpg", request, response,20,30);
                   //注意路径为绝对路径且三个效果不能同时执行
   
 }

 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub

 }

}

 web.xml配置(写在servlet上面)

<filter>
  <description>This is the description of my J2EE component</description> 
  <display-name>This is the display name of my J2EE component</display-name> 
  <filter-name>WaterFilter</filter-name> 
  <filter-class>com.jc.ts.filter.WaterFilter</filter-class> 
  </filter>
希望你能满意。。。。。。
分享到:
评论

相关推荐

    JAVA处理图片 加文字水印以及灰色透明背景

    JAVA处理图片 加文字水印以及灰色透明背景,处理图片。

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

    在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是视觉美化。水印可以是图片形式,也可以是文字形式。本教程将详细讲解如何使用Java来实现这一功能,重点在于介绍所需的依赖包。 首先,我们...

    基于Java给图片添加文字或图片水印

    - 对于文字水印,可以调用`Graphics2D.drawString()`方法,传入文字和位置坐标。 3. **设置水印属性** - 可以调整字体、颜色、透明度、旋转角度等属性,以定制水印的外观。例如,`setFont()`, `setColor()`, `...

    java给图片添加水印

    2. **创建水印工具类**:创建一个名为`WatermarkUtils`的Java类,包含添加文字水印和图片水印的方法。 - **添加文字水印**:首先读取原始图片,然后创建一个含有文字的透明图像(水印),设置合适的字体、颜色、...

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

    2. **水印类型**:水印分为文字水印、蒙版水印和logo图片水印。文字水印涉及在图像上绘制文字,需要调整字体、颜色、透明度和角度;蒙版水印则是在图像上覆盖一层半透明的图案或颜色;logo图片水印则是将一个图片...

    图片批量处理大小,批量加图片水印,文字水印

    解决图片的批量处理大小,批量给图片加图片水印,加文字水印

    java 图片缩放、加水印

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

    java 图片水印 改变图片大小

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

    Java给图片加水印

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

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

    - **文字水印的字体大小动态调整**:根据图片宽度调整文字水印的字体大小,保持合适的比例。 - **避免覆盖关键内容**:尽量将水印放置在不会遮挡图片重要信息的区域。 通过以上步骤和策略,我们可以在Java中实现...

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

    在Java编程语言中,添加文字或图片水印是一项常见的任务,尤其在处理图像处理和多媒体应用时。Graphics2D是Java 2D API的一部分,它提供了丰富的绘图和图形操作功能,包括添加水印到图像。下面将详细介绍如何使用...

    用Java给图片添加文字或图像水印

    4. **绘制文字水印**:如果水印是文字,我们可以使用`Graphics2D.drawString()`方法在图像的指定位置绘制文字。需要考虑字体、颜色、旋转角度等因素。 5. **绘制图像水印**:如果水印是图像,我们可以使用`Graphics...

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

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

    JAVA图片或文字水印以及图片缩放

    包含了一些java对图片操作处理的方法: 1.给图片添加图片水印 2.给图片添加文字水印 3.图片缩放 *主方法测试代码简单易懂

    采用java实现图片水印

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

    java中处理图片水印

    在Java编程语言中,处理图片水印涉及到图像处理和图形绘制技术。`Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`...

    java 程序图片加水印

    java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以

    去除pdf的图片水印和文字水印

    使用itext开发包对pdf文件进行去水印操作,包括删除图片水印和文字水印。通过遍历pdf的contents对象和xobjects对象,进行对象删除,速度快,效率高

    Android 图片加图片logo水印,文字水印

    本文将详细讲解如何在Android中实现图片加图片Logo水印以及文字水印,并探讨它们在不同位置的设置方法。 首先,我们需要理解Android的图像处理基础。Android提供了丰富的图像处理API,包括Bitmap类用于表示位图,...

    JAVA实现给图片增加图片水印或者文字水印

    总之,Java提供了解决这类问题的基础工具,而通过引入像Apache Commons Imaging这样的库,我们可以更高效、灵活地实现图片水印和文字水印的添加功能。这不仅可以用于个人项目,也可以在企业级应用中进行大规模的图片...

Global site tag (gtag.js) - Google Analytics