zoukankan      html  css  js  c++  java
  • 简单的图片裁剪服务器

     自己写的一个简单的图片服务器,可以读取FastDFS上的图片,根据参数进行图片裁剪输出到前台

    改项目可以上传图片到FastDFS,读取FastDFS上存储的图片,前面可以增加Varnish图片缓存服务器缓解图片裁剪压力

    使用一个简单的Servlet实现

    package com.imgcut.servlet;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.methods.GetMethod;
    
    import net.coobird.thumbnailator.Thumbnails;
    import net.coobird.thumbnailator.Thumbnails.Builder;
    
    //测试URL
    //http://127.0.0.1/imgcut/imgcut?width=100&height=100&rotate=120&imgUrl=https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png
    public class ImgCutServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
        private final String WIDTH = "100";
        private final String HEIGHT = "100";
        private final String ROTATE = "90";
        private final String OUTPUTFORMAT = "png";
        
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException  {
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");
            
            String width = request.getParameter("width");
            String height = request.getParameter("height");
            String imgUrl = request.getParameter("imgUrl");
            String rotate = request.getParameter("rotate");
            String outputFormat = request.getParameter("outputFormat");
            InputStream is = null;
            ServletOutputStream sos = null;
            int code;
            
            try {
                HttpClient client = new HttpClient();
                GetMethod method = new GetMethod(imgUrl);
                
                code = client.executeMethod(method);
                if(200 == code){
                    is = method.getResponseBodyAsStream();
                }
                sos = response.getOutputStream();
                
                Builder builder = Thumbnails.of(is);
                
                //如果没有设置宽度和高度,使用默认值
                if("".equals(width) || width == null){
                    width = this.WIDTH;
                }
                
                if("".equals(height) || height == null){
                    height = this.HEIGHT;
                }
                builder.size(Integer.parseInt(width), Integer.parseInt(height));
                
                //如果没有设置旋转,使用默认值
                if("".equals(rotate) || rotate == null){
                    rotate = this.ROTATE;
                }
                builder.rotate(Integer.parseInt(rotate));
                
                //设置输出格式
                if("".equals(outputFormat) || outputFormat == null){
                    outputFormat = this.OUTPUTFORMAT;
                }
                builder.outputFormat(outputFormat);
                
                //输出处理后的图片
                builder.toOutputStream(sos);
                sos.println();
            } catch (HttpException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally{
                response.getWriter().println("项目报错,请查看日志!");
            }
        }
    }

    测试效果:

     

  • 相关阅读:
    C#使用HttpWebRequest和HttpWebResponse上传文件示例
    c#深拷贝和浅拷贝的区别
    C#redis缓存应用
    如何设计一个高并发系统?
    第2章 关系数据库(重点) | 数据库知识点整理
    第1章 绪论 | 数据库知识点整理
    基于套接字的班级聊天群设计
    两数交换的三种方法(C/C++)
    关于知识图谱的思考
    如何找出唯一成对的数(C/C++)
  • 原文地址:https://www.cnblogs.com/djoker/p/7062147.html
Copyright © 2011-2022 走看看