隨筆-200  評論-148  文章-15  trackbacks-0
          操作圖片



          import java.awt.*;
          import java.awt.image.*;
          import javax.imageio.ImageIO;
          import javax.imageio.ImageIO.*;
          import javax.imageio.IIOException;
          import java.io.*;
          import com.sun.image.codec.jpeg.JPEGCodec;
          import com.sun.image.codec.jpeg.JPEGImageEncoder;
          import javax.servlet.http.HttpSession;


          // 圖片操作,改變大小加水印***********@與羊共舞的狼
          public class ImageOperate {


          /**
          * 給圖片加水印,但不改變大小
          * @param strOriginalFileName String(原始文件)
          * @param strWaterMarkFileName String(水印后)
          */
          public void waterMark(String strOriginalFileName,String strWaterMarkFileName,HttpSession session){
          try{
          //源文件
          String root=session.getServletContext().getRealPath("/");
          File fileOriginal = new File(root+strOriginalFileName);
          Image imageOriginal = ImageIO.read(fileOriginal);
          int widthOriginal = imageOriginal.getWidth(null);
          int heightOriginal = imageOriginal.getHeight(null);
          System.out.println("widthOriginal:" + widthOriginal + "theightOriginal:" + heightOriginal);

          BufferedImage bufImage = new BufferedImage(widthOriginal,heightOriginal,BufferedImage.TYPE_INT_RGB);
          Graphics g = bufImage.createGraphics();
          g.drawImage(imageOriginal,0,0,widthOriginal,heightOriginal,null);

          //水印文件
          File fileWaterMark = new File(root+strWaterMarkFileName);
          Image imageWaterMark = ImageIO.read(fileWaterMark);
          int widthWaterMark = imageWaterMark.getWidth(null);
          int heightWaterMark = imageWaterMark.getHeight(null);
          System.out.println("widthWaterMark:" + widthWaterMark + "theightWaterMark:" + heightWaterMark);

          //水印文件在源文件的右下角
          g.drawImage(imageWaterMark,widthOriginal - widthWaterMark,heightOriginal - heightWaterMark,widthWaterMark,heightWaterMark,null);
          g.dispose();

          FileOutputStream fos = new FileOutputStream( root+strOriginalFileName);
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
          encoder.encode(bufImage);
          fos.flush();
          fos.close();
          fos = null;
          }
          catch(Exception e)
          {
          e.printStackTrace();
          }
          }
          /**
          * 修改圖片大小
          */
          public void alterSize(String srcImgFile,String addChar,int new_w,int new_h,HttpSession session){

          //System.out.print("文件路徑為:"+"http://"+srcImgFile);

          String root=session.getServletContext().getRealPath("/");
          java.io.File file=new java.io.File(root+srcImgFile);
          if(file.exists())
          System.out.println("文件存在");
          else
          System.out.println("文件不存在");

          int i = srcImgFile.indexOf(".");
          int sLen = srcImgFile.length();
          String suffix = srcImgFile.substring(i, sLen); //帶點+后綴名
          String urlName=srcImgFile.substring(0,i); //路徑+文件名
          String newUrlName=root+urlName+addChar+suffix;
          //System.out.print("新文件名為"+newUrlName);
          Image src=null;
          try
          {
          src = javax.imageio.ImageIO.read(file);
          java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB);
          tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);
          FileOutputStream newimage=new FileOutputStream(newUrlName);
          JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
          encoder.encode(tag); //近JPEG編碼
          newimage.close();

          }
          catch(IIOException ee)
          {
          ee.printStackTrace();
          System.out.print("這里出錯了");
          }
          catch(Exception e)
          {
          e.printStackTrace();
          }
          }//End sizeAlter


          }

          posted on 2006-10-28 10:01 無聲 閱讀(5531) 評論(4)  編輯  收藏 所屬分類: 職場生活

          評論:
          # re: Java操作圖片改變大小加水印[未登錄] 2008-02-20 22:53 | javaman
          使用函數改變圖片大小后,原來圖片沒有背景色,改變后的新圖片有黑色背景色,如何去除那個黑色背景色。  回復  更多評論
            
          # 回復一樓 2008-04-06 03:35 | 路過
          java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB);
          里面的RGB改成ARGB大概就可以了。  回復  更多評論
            
          # re: Java操作圖片改變大小加水印 2008-07-30 17:01 | lu
          變小后 失真嗎? 我這么處理后 圖片嚴重失真  回復  更多評論
            
          # re: Java操作圖片改變大小加水印[未登錄] 2008-09-12 13:38 | bin
          參數可以給些說明嗎?都不知道那些參數要傳遞什么...  回復  更多評論
            
          道可道非常道,名可名非常名
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(5)

          我參與的團隊

          隨筆分類(174)

          隨筆檔案(200)

          文章分類(20)

          文章檔案(15)

          收藏夾

          開源網站

          朋友博客

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 井陉县| 高唐县| 阿拉善左旗| 金堂县| 邯郸县| 开封市| 于都县| 铜山县| 唐河县| 庆元县| 邯郸县| 安泽县| 富顺县| 贵南县| 宝清县| 烟台市| 澄江县| 临桂县| 息烽县| 昌邑市| 新郑市| 慈溪市| 陆川县| 大新县| 新干县| 外汇| 怀宁县| 曲周县| 博白县| 大安市| 大足县| 宜都市| 横山县| 夏津县| 和政县| 垣曲县| 宜阳县| 罗江县| 股票| 海伦市| 新宁县|