package com.huawei.filter;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
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 javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class FilterServlet extends HttpServlet implements Filter {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
//得到图片的文件名
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
//文件的相对路径
String filename = request.getServletPath();
//变成绝对路径
String truepath = request.getRealPath(filename);
//用io流读取文件处理加上水印输出
FileInputStream sFile = new FileInputStream(truepath);
//创建一个image对象并以源图片数据流填充
Image src = ImageIO.read(sFile);
//得到源图像宽度
int width = src.getWidth(null);
//得到源图像长度
int height = src.getHeight(null);
//创建一个bufferedimage来作为图像操作容器
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//创建一个绘图环境来进行绘制图像
Graphics g = image.getGraphics();
//将原图像数据流载入这个bufferedimage
g.drawImage(src, 0, 0, width, height, null);
//设置文本字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 30));
//字符水印
String rand = "http://www.sina.com";
//设定文本颜色
g.setColor(Color.red);
//向bufferedimage 写入文本字符
g.drawString(rand, width - 300, height - 90);
//使更改生效
g.dispose();
//创建输出文件流
JPEGImageEncoder encodera = JPEGCodec.createJPEGEncoder(response
.getOutputStream());
//对这个bufferedimage进行jpeg编码
encodera.encode(image);
//关闭输出文件流
response.getOutputStream().close();
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}