`
少女杀手
  • 浏览: 131850 次
  • 性别: Icon_minigender_1
  • 来自: 约旦河西岸
社区版块
存档分类
最新评论

JAVA给图片加水印(无损原图片)

    博客分类:
  • java
阅读更多
添加水印的类(分添加文字和图片)
package com.zone.aquila.web.upload;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

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

public class WaterPress {
private static List logoImgs;

private static List bgImgs;

private static boolean flag;

public static List getBgImgs() {
return bgImgs;
}

/**
* 把图片印刷到图片上
*
* @param pressImg --
*            水印文件
* @param targetImg --
*            目标文件
* @param x
*            --x坐标
* @param y
*            --y坐标
* @param out
*            输出流(可以来自HttpServletReponse的输出)
*/
public final static void pressImage(String pressImg, String targetImg,
int x, int y, OutputStream out) {
try {
// 目标文件
File _file = new File(targetImg);
Image src = ImageIO.read(_file);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);

// 水印文件
File _filebiao = new File(pressImg);
Image src_biao = ImageIO.read(_filebiao);
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
g.drawImage(src_biao, (wideth - wideth_biao) / 2,
(height - height_biao) / 2, wideth_biao, height_biao, null);
// 水印文件结束
g.dispose();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 打印文字水印图片
*
* @param pressText
*            --文字
* @param targetImg --
*            目标图片
* @param fontName --
*            字体名
* @param fontStyle --
*            字体样式
* @param color --
*            字体颜色
* @param fontSize --
*            字体大小
* @param x --
*            偏移量(从右下角算起)
* @param y --
*            偏移量(从右下角算起)
*
* @param out
*            输出流(可以来自HttpServletReponse的输出)
*/

public static void pressText(String pressText, String targetImg,
String fontName, int fontStyle, int color, int fontSize, int x,
int y, OutputStream out) {
try {
File _file = new File(targetImg);
Image src = ImageIO.read(_file);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
                           //只有图片的宽或高大于200的时候才添加水印(小图片不添加)
if (wideth > 200 || height > 200) {
BufferedImage image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
g.setColor(new Color(color));
g.setFont(new Font(fontName, fontStyle, fontSize));
g.drawString(pressText, wideth - fontSize - x, height
- fontSize / 2 - y);
g.dispose();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
} catch (Exception e) {
System.out.println(e);
}
}
}


水印过滤器

package com.zone.aquila.filter;

import java.awt.Color;
import java.awt.Font;
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import com.zone.aquila.web.upload.WaterPress;
import com.zone.aquila.web.upload.WaterMark;

public class WaterMarkFilter extends HttpServlet implements Filter {
private FilterConfig filterConfig;

// Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
// 获取请求中的图片路径
String filePath = req.getServletPath();// 这是相对路径(并且包括了上下文路径)
String fileRealPath = filterConfig.getServletContext().getRealPath(
filePath);// 得到绝对路径
// 调用工具类加水印(由于是动态从流中加水印,因此不会修改服务器上原图片)
WaterPress.pressText("http://www.myzone.com", fileRealPath, "宋体",1,Color.ORANGE.getRGB(), 15, 180, 15, response.getOutputStream());
("http://www.myzone.com",fileRealPath,"宋体",2,1,22,50,50);
filterChain.doFilter(request, response);
}

// Clean up resources
@Override
public void destroy() {
}
}

web.xml配置

<filter>
<filter-name>waterMarkFilter</filter-name>
<filter-class>
com.zone.aquila.filter.WaterMarkFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>waterMarkFilter</filter-name>
<!-- 只对zone_photo下的文件过滤 -->
                   <!--对WebRoot文件夹下的某个图片文件夹过滤-->
<url-pattern>/zone_picture/zone_photo/*</url-pattern>
</filter-mapping>
分享到:
评论
3 楼 孔老夫子 2017-06-09  
                  
2 楼 caipeiming 2016-06-04  
1 楼 hj270187161 2011-11-24  

相关推荐

    Java图片转字符图片工具.zip

    图片转字符图片工具类,支持 Gif 动画、图片合并、图片加水印、文字消除锯齿、图片无损保存、修改图片DPI等图片处理其他工具类方法。详情请看README.md文件说明。 图片转字符图片工具类,支持 Gif 动画、图片...

    图像加水印

    本主题将深入探讨如何利用Java的Filter机制来实现图片加水印,同时确保不改变原始图片的质量和完整性。 首先,我们需要理解Java中的Filter概念。在图像处理领域,Filter通常是指一系列对图像进行处理的操作,比如...

    给BMP图像添加水印

    本教程主要聚焦于如何为BMP图像添加水印,这是一种原始且无损的位图格式,广泛应用于各种图像处理操作。 首先,我们需要理解BMP格式。BMP(Bitmap)是一种不进行任何压缩的图像文件格式,它保存了图像的每个像素的...

    图片转字符图片工具类,支持 Gif 动画、图片合并、图片无损保存、九宫格图、百叶图、修改图片DPI等图片处理其他工具类方法

    4. **图片加水印**:添加文本或图形水印到图片上,用于版权保护或者视觉装饰,可以自定义位置、透明度和样式。 5. **文字消除锯齿**:改善文字边缘的清晰度,使其在屏幕上看起来更加平滑,避免出现像素化的现象。 ...

    基于Java平台的综合性图片处理工具类设计源码

    该Java平台开发的综合性...项目功能丰富,支持图片转字符、Gif动画处理、图片合并、加水印、文字消除锯齿、无损保存、像素风、九宫格、百叶图、双重曝光、修改DPI等多种图片处理功能,详细信息请参考README.md文件。

    java中隐藏数据信息

    在Java编程语言中,隐藏数据信息是一种常见的技术,特别是在信息安全和数字水印等领域。这里我们主要探讨如何在BMP(Bitmap)图像文件中嵌入隐藏数据。BMP是一种无损的位图格式,允许我们利用其像素数据来存储额外的...

    加解密实验 java环境

    在IT领域,加密和解密技术是信息安全的重要组成部分,特别是在Java环境下,这些技术的应用非常广泛。本实验主要探讨了七种不同的加密算法:凯撒密码、维吉尼亚密码、RSA算法、SHA算法、DSA算法、LZW算法以及数字水印...

    屏幕录制,视频,多图片转Gif,支持插入文字、图片、水印、手绘等,编辑过程中可随时预览效果快速生成gif文件。

    界面简洁,操作快捷的GIF制作软件,支持屏幕录制,视频,多图片转Gif,支持插入文字、图片、水印、手绘等,编辑过程中可随时预览效果快速生成gif文件。  软件特色  支持屏幕录制  支持Windows7/8/10系统的屏幕...

    java实现超大pdf文件转换word工具

    本篇文章将深入探讨如何使用Java实现超大PDF文件到Word、HTML的无损转换,以及如何提取PDF中的文字和图片。 首先,要实现PDF到Word的转换,我们可以利用Apache PDFBox、iText或Aspose.Words for Java等库。这些库都...

    图片上传工具类

    在Java或Android中,可以使用`Intent.ACTION_PICK`来启动系统图库,选取图片后通过URI获取图片数据。在前端开发中,HTML5的`&lt;input type="file"&gt;`元素可以用来选择本地图片。 2. **拍照上传**:用户直接通过相机...

    打印_tiff文件带有图片和条形码

    2. **图像编码**:TIFF 支持多种编码方式,如 CCITT G3/G4(用于黑白图像的压缩)、LZW、JPEG 和无损TIFF等。选择合适的编码方式对保持图像质量和减小文件大小至关重要。 3. **条形码嵌入**:TIFF 文件可以通过嵌入...

    pdf添加水印实例工程

    你可以选择插入纯文本水印,也可以导入图片作为图形水印。 3. **坐标定位**:在PDF页面上放置水印需要计算准确的坐标,确保水印既不遮挡主要内容,又能明显可见。这涉及到PDF页面的坐标系统和尺寸计算。 4. **叠加...

    Android移动平台中的信息隐藏系统设计.pdf

    - BMP(位图)是一种无损的图像文件格式,广泛用于Windows系统中。由于它不进行压缩,因此文件体积相对较大,但可以保证图像质量。 - JPEG(联合图像专家小组)是一种常用的有损压缩图像格式,它可以有效减小文件...

    information_hidding

    7. **安全性与可逆性**:信息隐藏不仅要考虑隐藏信息的难易程度,还要确保在需要时能正确无损地恢复这些信息。这涉及到对隐藏算法的安全性和可逆性的设计。 8. **攻击与反攻击**:课程可能会讨论针对信息隐藏的常见...

    Desenhos:Para Guardar meus desenhos feitos

    5. 个人作品库应用开发:如果“Desenhos:Para Guardar meus desenhos feitos”是一个应用项目,那么它可能涉及iOS或Android应用开发,使用Swift、Objective-C、Java或Kotlin编写。应用可能需要实现上传、分类、预览...

Global site tag (gtag.js) - Google Analytics