/**
* 为指定目录下的图片添加水印
*/
package filter;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* Servlet Filter implementation class WatermarkFilter
*/
public class WatermarkFilter implements Filter {
/**
* Default constructor.
*/
public WatermarkFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 添加水印效果
// 第一部分:绘制水印图片
String pImagePath = req.getSession().getServletContext()
.getRealPath("/images/");
String defaultImage = "2.jpg"; // 没有图片时,默认图片
String pProductImagePath = pImagePath + "//product"; // 产品目录
String waterFileName = pImagePath + "\\" + "commendImg.JPG";
String rPath = req.getRequestURI();
String fileName = rPath.substring(rPath.lastIndexOf("/") + 1);
File file = new File(pProductImagePath + "//" + fileName);
if (!file.exists()) {
file = new File(pImagePath + "//" + defaultImage);
}
InputStream is = new FileInputStream(file);
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage bImg = jpegDecoder.decodeAsBufferedImage();
Graphics g = bImg.getGraphics();
g.setColor(Color.BLUE);
Font f = new Font("Arial", Font.BOLD | Font.ITALIC, 20);
g.setFont(f);
String website = "www.baiwenhui.com";
String tag = new String(website.getBytes(), "UTF-8");
// 获取打印文本的高度(行高)和宽度(行宽(字符串累加的长度))
int height = g.getFontMetrics(f).getHeight();
int width = g.getFontMetrics(f).stringWidth(website);
g.drawString(tag, 20, 20);
// 5.加载水印图片
BufferedImage imgW = ImageIO.read(new File(waterFileName));
g.drawImage(imgW, bImg.getWidth() - imgW.getWidth() - 4,
bImg.getHeight() - imgW.getHeight() - 4, null);
g.dispose();
res.setContentType("image/jpeg"); // 设置响应类型,MIME规范的image/jpeg,(text/html)
ServletOutputStream sos = res.getOutputStream();
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(sos);
jpegEncoder.encode(bImg);
sos.close();
is.close();
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
* 为指定目录下的图片添加水印
*/
package filter;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* Servlet Filter implementation class WatermarkFilter
*/
public class WatermarkFilter implements Filter {
/**
* Default constructor.
*/
public WatermarkFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 添加水印效果
// 第一部分:绘制水印图片
String pImagePath = req.getSession().getServletContext()
.getRealPath("/images/");
String defaultImage = "2.jpg"; // 没有图片时,默认图片
String pProductImagePath = pImagePath + "//product"; // 产品目录
String waterFileName = pImagePath + "\\" + "commendImg.JPG";
String rPath = req.getRequestURI();
String fileName = rPath.substring(rPath.lastIndexOf("/") + 1);
File file = new File(pProductImagePath + "//" + fileName);
if (!file.exists()) {
file = new File(pImagePath + "//" + defaultImage);
}
InputStream is = new FileInputStream(file);
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage bImg = jpegDecoder.decodeAsBufferedImage();
Graphics g = bImg.getGraphics();
g.setColor(Color.BLUE);
Font f = new Font("Arial", Font.BOLD | Font.ITALIC, 20);
g.setFont(f);
String website = "www.baiwenhui.com";
String tag = new String(website.getBytes(), "UTF-8");
// 获取打印文本的高度(行高)和宽度(行宽(字符串累加的长度))
int height = g.getFontMetrics(f).getHeight();
int width = g.getFontMetrics(f).stringWidth(website);
g.drawString(tag, 20, 20);
// 5.加载水印图片
BufferedImage imgW = ImageIO.read(new File(waterFileName));
g.drawImage(imgW, bImg.getWidth() - imgW.getWidth() - 4,
bImg.getHeight() - imgW.getHeight() - 4, null);
g.dispose();
res.setContentType("image/jpeg"); // 设置响应类型,MIME规范的image/jpeg,(text/html)
ServletOutputStream sos = res.getOutputStream();
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(sos);
jpegEncoder.encode(bImg);
sos.close();
is.close();
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}