`
hainanhaian
  • 浏览: 39028 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Servlet上传文件打水印生成缩略图

阅读更多
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.swing.ImageIcon;

import com.jspsmart.upload.*;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;

public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private final static long FILE_MAX_SIZE=4000000;//设置允许上传文件的大小限制
    private final static String FILE_EXTEND_NAME="jpg,JPG,gif,GIF,png,PNG";//设置允许上传文件的扩展名
    private final static String UPLOAD_DIRECTORY="/upload/";//设置上传的路径
    private String path; //上传的绝对路径
    private ServletConfig config;
   
    final public void init(ServletConfig config) throws ServletException {
        this.config = config;
        path=config.getServletContext().getRealPath(UPLOAD_DIRECTORY)+"/";
    }
    final public ServletConfig getServletConfig() {
        return config;
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //PrintWriter out = response.getWriter();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=GBK");
        //PrintWriter out = response.getWriter();

        String filename=upload(config,request,response);
        watermark(filename);//生成水印
        reduce(filename);//生成缩略图
        response.sendRedirect("/Test.htm");
    }
    public void  destroy () {
    }
    //********************************附加的一些自定义方法********************************//
    //上传文件
    private String upload(ServletConfig config,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        //初始化上传组件
        SmartUpload mySmartUpload=new SmartUpload();
        mySmartUpload.initialize(config,request,response);
        mySmartUpload.setAllowedFilesList(FILE_EXTEND_NAME);
        mySmartUpload.setMaxFileSize(FILE_MAX_SIZE);
        //上传文件
        try{
            mySmartUpload.upload();
            //mySmartUpload.save(path);//注释掉此行将用原始文件名来保存
            //以下三行代码利用Calendar对象生成一个随机毫秒数来作为新的文件名保存
            com.jspsmart.upload.File myFile=mySmartUpload.getFiles().getFile(0);//返回刚刚上传的文件对象
            String filename=String.valueOf(Calendar.getInstance().getTimeInMillis())+"."+myFile.getFileExt();//构造文件名
            myFile.saveAs(path+filename,SmartUpload.SAVE_PHYSICAL);//保存文件为新的文件名
            return filename;
        }catch(Exception e){}
        return "0";
    }
    //生成缩略图
    private void reduce(String filename){
        //设置新文件的宽和高
        int tagImageWidth=102;
        int tagImageHeight=120;
       
        ImageIcon srcFile=new ImageIcon(path+filename);//读入源文件
        Image srcImage =srcFile.getImage();//构造Image对象
        BufferedImage tagImage = new BufferedImage(tagImageWidth,tagImageHeight,BufferedImage.TYPE_INT_RGB);//构造图像缓存对象
        tagImage.getGraphics().drawImage(srcImage,0,0,tagImageWidth,tagImageHeight,null);//绘制缩小后的图
        paint(tagImage,"s_"+filename);
    }
    //生成水印
    private void watermark(String filename){
        Color color=Color.RED;//前景色
        Color backgroundColor=Color.WHITE;//背景色
        String word="zengxiaomeng";//水印文字
        String wartmarkfilename="fjsenlogo.jpg";//水印图片地址
        int watermarkLocationX=100;
        int watermarkLocationY=100;
        int wordLocationX=100;
        int wordLocationY=100;
       
        ImageIcon srcFile=new ImageIcon(path+filename);//读入源文件
        Image srcImage =srcFile.getImage();//构造Image对象       
        ImageIcon watermarkFile=new ImageIcon(path+wartmarkfilename);//读入水印文件
        Image watermarkImage =watermarkFile.getImage();//构造水印图片对象       
        BufferedImage tagImage=new BufferedImage(srcImage.getWidth(null),srcImage.getHeight(null), BufferedImage.TYPE_INT_RGB);//构造图像缓存对象
       
        Graphics2D g=tagImage.createGraphics( );
        g.setColor(color);//设置绘图笔的前景色
        g.setBackground(backgroundColor);//设置绘图笔的背景色
        g.drawImage(srcImage, 0, 0, null );//先绘制源图
        g.drawImage(watermarkImage, watermarkLocationX,watermarkLocationY, null ); //添加水印图片
        g.drawString(word,wordLocationX,wordLocationY); //添加文字
        g.dispose();
        paint(tagImage,filename);
    }
    private void paint(BufferedImage tagImage,String tagFilename){
        try{
            FileOutputStream tagFile=new FileOutputStream(path+tagFilename);
            JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(tagFile);
            JPEGEncodeParam param=encoder.getDefaultJPEGEncodeParam(tagImage);
            param.setQuality(50f, true);
            encoder.encode(tagImage, param);
            tagFile.close();
        }catch(Exception e){}
    }
}
分享到:
评论

相关推荐

    上传组件说明文档.doc

    - **isThumb**:控制是否生成缩略图,取值为0表示生成,1表示不生成。 - **filesize**:限制单个上传文件的最大大小。 - **markImagePath**:水印图片的URL地址。 - **marktext**:水印的文字内容。 - **...

    java批量图片上传

    Java后端接收这些文件,进行验证(如检查文件类型、大小等),然后可能进行预处理(如缩略图生成、质量调整等)。处理完成后,图片会被存储在指定位置,这可能是服务器的文件系统,也可能是数据库。 在Java中,实现...

    upload

    3. **裁剪**:可能需要从上传的图片中截取特定区域,比如生成缩略图。 4. **转换格式**:将图片从一种格式转换为另一种格式,如从.jpg转换为.webp以优化加载速度。 5. **添加水印**:为了版权保护或品牌推广,可以...

    jspsmart下载上传源代码

    - **图片上传**:JSpsmart通常会包含一个实际的图片上传示例,演示如何接收并处理图片文件,可能还包括缩略图生成、水印添加等功能。 - **文件下载**:下载示例会展示如何构造一个可以下载任意文件的URL,以及如何...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    jsp编程的一些小技巧总结,绝对实用。包括JSP编程中常用的js技术。 1.JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单...121.上传图片并生成缩略图?

    jsp编程技巧集锦

    上传图片并生成缩略图? 122.JS实现图形菜单中点击当前图片变另一幅图片? 123.无刷新页面自动刷新? 124.写文件? 125.怎么得到鼠标点击在线图片的位置坐标? 126.页面单线程? 127.数字转中文 ...

    JAVA WEB典型模块与项目实战大全

    5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息  6.3 网络硬盘功能具体实现——操作文件夹和文件  6.4 小结  第7章 ...

    JSP网络编程——多媒体(1——3)

    - **图片处理**:通过`<img>`标签插入图片,JSP中可以动态生成图片URL,支持服务器端图片处理,如缩略图生成、水印添加等。 - **音频处理**:可以使用HTML5的`<audio>`标签播放音频,JSP可以动态设置源文件路径,...

    serveur-image

    这个服务可能涉及图像上传、缩略图生成、水印添加、图像格式转换等功能,使用了上述的一些Java图像处理技术。对于开发这样的服务,还需要熟悉HTTP协议、Servlet、MVC框架(如Spring MVC)以及数据库操作等相关知识。

    php 面试题

    GD 库非常适用于生成缩略图、水印或根据网站数据生成报表。 #### 6. 数据类型介绍 - **int**:整数类型。 - **char**:固定长度的字符串类型。 - **varchar**:变长字符串类型。 - **datetime**:日期时间类型。 -...

Global site tag (gtag.js) - Google Analytics