📄 imagefilter.java
字号:
package jwadbook.filter;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.ServletException;import java.io.*;import java.util.Date;import java.awt.*;import com.sun.image.codec.jpeg.JPEGImageEncoder;import java.awt.image.BufferedImage;/** * * @author Jian (James) Cai */public class ImageFilter implements Filter{ FilterConfig filterConfig; public void init(final FilterConfig fConf) { filterConfig = fConf; } public void destroy() { } public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { String message = "FilterMessage"; GenericResponseWrapper wrapper = new GenericResponseWrapper((HttpServletResponse)response); chain.doFilter(request, wrapper); OutputStream out = response.getOutputStream(); message = filterConfig.getInitParameter("message"); if (contentIsUncachedImage(wrapper) && message != null) { ByteArrayOutputStream imageStream = manipulateImage(message, wrapper.output()); response.setContentLength(imageStream.size()); response.setContentType("image/jpeg"); out.write(imageStream.toByteArray()); } else { out.write(wrapper.output()); } out.flush(); out.close(); } public boolean contentIsUncachedImage(GenericResponseWrapper wrapper){ if(wrapper.getContentType()!=null) { if(wrapper.getContentType().startsWith("image/")) { if(wrapper.output().length>0){ return true; } } } return false; } public ByteArrayOutputStream manipulateImage(String message, byte[] imageData) throws ServletException { ByteArrayOutputStream imageStream; Frame frame=null; Graphics graphics=null; try { frame = new Frame(); frame.addNotify(); MediaTracker mt = new MediaTracker(frame); // frame acts as an ImageObserver Image image = Toolkit.getDefaultToolkit().createImage(imageData); mt.addImage(image, 0); mt.waitForAll(); int w = image.getWidth(frame); int h = image.getHeight(frame); BufferedImage offscreen = new BufferedImage(w,h,BufferedImage.TYPE_3BYTE_BGR); graphics = offscreen.getGraphics(); graphics.drawImage(image, 0, 0, frame); graphics.setColor(Color.white); graphics.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 20)); graphics.drawString(message, 9, 29); graphics.setColor(Color.black); graphics.drawString(message, 10, 30); imageStream = new ByteArrayOutputStream(); JPEGImageEncoder encoder=com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(imageStream); encoder.encode(offscreen); } catch (InterruptedException e) { throw new ServletException(e.getMessage()); } catch (IOException e) { throw new ServletException(e.getMessage()); } finally { if (graphics != null) { graphics.dispose(); } if (frame != null) { frame.removeNotify(); } } return imageStream; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -