zoukankan      html  css  js  c++  java
  • 图片自动加水印

     1 package cn.tfri.filter.watermark;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.Filter;
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.FilterConfig;
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletRequest;
    10 import javax.servlet.ServletResponse;
    11 import javax.servlet.http.HttpServletRequest;
    12 import javax.servlet.http.HttpServletResponse;
    13 
    14 public class WaterMarkFilter implements Filter{
    15     
    16     private boolean enabled;
    17     private String waterMarkFile;
    18     
    19     public boolean isEnabled() {
    20         return enabled;
    21     }
    22     public void setEnabled(boolean enabled) {
    23         this.enabled = enabled;
    24     }
    25     public String getWaterMarkFile() {
    26         return waterMarkFile;
    27     }
    28     public void setWaterMarkFile(String waterMarkFile) {
    29         this.waterMarkFile = waterMarkFile;
    30     }
    31 
    32     public void destroy() {}
    33 
    34     public void doFilter(ServletRequest req, ServletResponse resp,
    35             FilterChain chain) throws IOException, ServletException {
    36         HttpServletRequest request = (HttpServletRequest)req;
    37         HttpServletResponse response = (HttpServletResponse)resp;
    38         if(this.isEnabled()){
    39             WaterMarkResponseWrapper waterMarkRes = new WaterMarkResponseWrapper(response,this.getWaterMarkFile());
    40             chain.doFilter(request, waterMarkRes);
    41             waterMarkRes.finishResponse();
    42         }
    43         chain.doFilter(request, response);
    44     }
    45 
    46     public void init(FilterConfig filterConfig) throws ServletException {
    47         this.setEnabled("true".equalsIgnoreCase(filterConfig.getInitParameter("enabled").trim()));
    48         String file = filterConfig.getInitParameter("waterMarkFile");
    49         this.setWaterMarkFile(filterConfig.getServletContext().getRealPath(file));
    50     }
    51     
    52 }
     1 package cn.tfri.filter.watermark;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletOutputStream;
     6 import javax.servlet.http.HttpServletResponse;
     7 import javax.servlet.http.HttpServletResponseWrapper;
     8 
     9 import cn.tfri.hibernate.utils.ImageUtil;
    10 
    11 public class WaterMarkResponseWrapper extends HttpServletResponseWrapper{
    12     private String waterMarkFile;
    13     private HttpServletResponse response;
    14     private WaterMarkOutputStream waterMarkOutputStream = new WaterMarkOutputStream();
    15     
    16     public String getWaterMarkFile() {
    17         return waterMarkFile;
    18     }
    19     public void setWaterMarkFile(String waterMarkFile) {
    20         this.waterMarkFile = waterMarkFile;
    21     }
    22     public HttpServletResponse getResponse() {
    23         return response;
    24     }
    25     public void setResponse(HttpServletResponse response) {
    26         this.response = response;
    27     }
    28     public WaterMarkOutputStream getWaterMarkOutputStream() {
    29         return waterMarkOutputStream;
    30     }
    31     public void setWaterMarkOutputStream(WaterMarkOutputStream waterMarkOutputStream) {
    32         this.waterMarkOutputStream = waterMarkOutputStream;
    33     }
    34     
    35     public WaterMarkResponseWrapper(HttpServletResponse response,String waterMarkFile){
    36         super(response);
    37         this.setResponse(response);
    38         this.setWaterMarkFile(waterMarkFile);
    39     }
    40     
    41     public ServletOutputStream getOutputStream(){
    42         return this.getWaterMarkOutputStream();
    43     }
    44     @Override
    45     public void flushBuffer() throws IOException {
    46         this.getWaterMarkOutputStream().flush();
    47     }
    48     
    49     public void finishResponse() throws IOException{
    50         byte[] imageData = this.getWaterMarkOutputStream().getByteArrayOutputStream().toByteArray();
    51         byte[] image = ImageUtil.waterMark(imageData, this.getWaterMarkFile());
    52         response.setContentLength(image.length);
    53         response.getOutputStream().write(image);
    54         this.getWaterMarkOutputStream().close();
    55     }
    56 }
     1 package cn.tfri.filter.watermark;
     2 
     3 import java.io.ByteArrayOutputStream;
     4 import java.io.IOException;
     5 
     6 import javax.servlet.ServletOutputStream;
     7 
     8 public class WaterMarkOutputStream extends ServletOutputStream{
     9     private ByteArrayOutputStream byteArrayOutputStream;
    10     
    11     public ByteArrayOutputStream getByteArrayOutputStream() {
    12         return byteArrayOutputStream;
    13     }
    14     public void setByteArrayOutputStream(ByteArrayOutputStream byteArrayOutputStream) {
    15         this.byteArrayOutputStream = byteArrayOutputStream;
    16     }
    17     
    18     public WaterMarkOutputStream(){
    19         this.setByteArrayOutputStream(new ByteArrayOutputStream());
    20     }
    21     
    22     @Override
    23     public void write(int b) throws IOException {
    24         this.getByteArrayOutputStream().write(b);
    25     }
    26     @Override
    27     public void close() throws IOException {
    28         this.getByteArrayOutputStream().close();
    29     }
    30     @Override
    31     public void flush() throws IOException {
    32         this.getByteArrayOutputStream().flush();
    33     }
    34     @Override
    35     public void write(byte[] b, int off, int len) throws IOException {
    36         this.getByteArrayOutputStream().write(b, off, len);
    37     }
    38     @Override
    39     public void write(byte[] b) throws IOException {
    40         this.getByteArrayOutputStream().write(b);
    41     }
    42 }
     1 package cn.tfri.hibernate.utils;
     2 
     3 import java.awt.Color;
     4 import java.awt.Font;
     5 import java.awt.Graphics;
     6 import java.awt.Image;
     7 import java.awt.image.BufferedImage;
     8 import java.io.ByteArrayOutputStream;
     9 import java.io.File;
    10 import java.io.IOException;
    11 
    12 import javax.imageio.ImageIO;
    13 import javax.swing.ImageIcon;
    14 
    15 import com.sun.image.codec.jpeg.JPEGCodec;
    16 import com.sun.image.codec.jpeg.JPEGImageEncoder;
    17 
    18 public class ImageUtil {
    19     public static byte[] waterMark(byte[] imageData,String waterMarkFiler) throws IOException{
    20         int paddingRight = 10;
    21         int paddingBottom = 10;
    22         
    23         Image image = new ImageIcon(imageData).getImage();
    24         int imageWidth = image.getWidth(null);
    25         int imageHeight = image.getHeight(null);
    26         
    27         Image waterMark = ImageIO.read(new File(waterMarkFiler));
    28         int waterMarkWidth = waterMark.getWidth(null);
    29         int waterMarkHeight = waterMark.getHeight(null);
    30         
    31         if(imageWidth < waterMarkWidth + 2*paddingRight || imageHeight < waterMarkHeight + 2*paddingBottom){
    32             return imageData;
    33         }
    34         
    35         BufferedImage bufferedImage = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
    36         Graphics g = bufferedImage.createGraphics();
    37         g.drawImage(image, 0, 0, imageWidth, imageHeight, null);
    38         g.drawImage(waterMark,imageWidth - waterMarkWidth - paddingRight,imageHeight - waterMarkHeight - paddingBottom,waterMarkWidth,waterMarkHeight,null);
    39         //设置图形上下文的当前颜色为红色
    40         g.setColor(Color.red);
    41         //创建新的字体
    42         Font font = new Font("华文行楷",Font.BOLD,12);
    43         //设置图形上下文的字体为指定字体
    44         g.setFont(font);
    45         //在图片上绘制文字,文字的颜色为图形上下文的当前颜色,即红色
    46         g.drawString("上海烛龙-古剑奇谭", imageWidth - 200, imageHeight - 200);
    47         g.dispose();
    48         
    49         ByteArrayOutputStream out = new ByteArrayOutputStream();
    50         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    51         encoder.encode(bufferedImage);
    52                 
    53         byte[] data = out.toByteArray();
    54         out.close();
    55         return data;
    56     }
    57 }
  • 相关阅读:
    【超分辨率】—基于深度学习的图像超分辨率最新进展与趋势
    【超分辨率】—超分辨率补充问题
    随机采样一致算法RANSAC
    【相机篇】从到FlyCapture2到Spinnaker
    【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现
    AI佳作解读系列(六) - 生成对抗网络(GAN)综述精华
    AI佳作解读系列(五) - 目标检测二十年技术综述
    TroubleShooting经验总结
    读书笔记 - 《深度学习之美》(更新中...)
    深度学习中那些有趣的定理或理论
  • 原文地址:https://www.cnblogs.com/movosoft/p/3696356.html
Copyright © 2011-2022 走看看