gebacao的自留地

          常用鏈接

          統計

          最新評論

          Servlet上傳文件打水印生成縮略圖全攻略(轉載)

          package?zengxiaomeng;

          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){}?
          ????}
          }

          posted on 2006-06-13 23:32 xiaogang 閱讀(464) 評論(1)  編輯  收藏

          評論

          # re: Servlet上傳文件打水印生成縮略圖全攻略(轉載) 2008-12-30 17:00 kiween

          up~!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 历史| 菏泽市| 陇南市| 宝兴县| 东兰县| 来凤县| 浦东新区| 甘南县| 小金县| 平顺县| 九龙县| 庆安县| 清丰县| 桑日县| 柏乡县| 胶州市| 阳春市| 五华县| 万宁市| 龙川县| 泌阳县| 博白县| 衡阳市| 临沂市| 明水县| 长阳| 革吉县| 化州市| 辽中县| 东光县| 伽师县| 十堰市| 成安县| 泸水县| 修水县| 张掖市| 资溪县| 雅安市| 花莲县| 吴桥县| 卢湾区|