1. 程式人生 > >使用jquery jcrop外掛進行圖片的擷取與儲存

使用jquery jcrop外掛進行圖片的擷取與儲存

第一步:上傳大圖片到伺服器,並且展示到頁面
第二部:呼叫jcrop元件js及css

  1. <scriptsrc="${ctx}/js/jquery-jcrop/jquery.Jcrop.js"></script>
  2. <linkrel="stylesheet"href="${ctx}/css/jquery-jcrop/jquery.Jcrop.css"type="text/css"/>

第三部:採用外掛
進行圖片的選取,其中主要包括x,y,width,height

[javascript] view plaincopy
  1. $('#cropButton').click(
    function(){  
  2.             var x = $("#x").val();  
  3.             var y = $("#y").val();  
  4.             var w = $("#w").val();  
  5.             var h = $("#h").val();    
  6.             if(w == 0 || h == 0 ){  
  7.                 alert("您還沒有選擇圖片的剪下區域,不能進行剪下圖片!");  
  8.                 return;  
  9.             }     
  10.             //alert("你要剪下圖片的X座標: "+x + ",Y座標: " + y + ",剪下圖片的寬度: " + w + ",高度:" + h );
  11.             if(confirm("確定按照當前大小剪下圖片嗎")){                 
  12.                 //document.form1.submit();
  13.                 //$("#makeHeadImgDiv").toggle();
  14.                 function loadHeadUrl(data){  
  15.                     //alert(data.headUrl);
  16.                      alert(data.retMsg);  
  17.                      $("#img_headUrl"
    ).attr("src",data.headUrl);  
  18.                      $("#headUrl").val(data.headUrl);  
  19.                     //alert($("#headUrl").val());
  20.                 }  
  21.                 var url="${ctx}/admin/pri/guest/guest_cutHeadImg.action";  
  22.                 var options ={   
  23.                         //beforeSubmit: validate,
  24.                         url:       url,  
  25.                         success:   loadHeadUrl,   
  26.                         type:      'post',        
  27.                         dataType:  'json'
  28.                 };  
  29.                 $('#cutHeadImgFrm').ajaxSubmit(options);  
  30.             }  
  31.      });  


然後呼叫後臺方法切割圖片。
設計的包:
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
第四部:儲存新檔案路徑,展示圖片到頁面。


方法類:

  1. package com.wondertek.meeting.util;  
  2. import java.io.*;  
  3. import java.awt.*;  
  4. import java.awt.image.*;  
  5. import java.awt.Graphics;  
  6. import java.awt.color.ColorSpace;  
  7. import javax.imageio.ImageIO;  
  8. publicclass ImageCut {  
  9.     /**  
  10.      * 影象切割(改)     *  
  11.      * @param srcImageFile            源影象地址 
  12.      * @param dirImageFile            新影象地址 
  13.      * @param x                       目標切片起點x座標 
  14.      * @param y                      目標切片起點y座標 
  15.      * @param destWidth              目標切片寬度 
  16.      * @param destHeight             目標切片高度 
  17.      */
  18.     publicstaticvoid abscut(String srcImageFile,String dirImageFile, int x, int y, int destWidth,  
  19.             int destHeight) {  
  20.         try {  
  21.             Image img;  
  22.             ImageFilter cropFilter;  
  23.             // 讀取源影象
  24.             BufferedImage bi = ImageIO.read(new File(srcImageFile));  
  25.             int srcWidth = bi.getWidth(); // 源圖寬度
  26.             int srcHeight = bi.getHeight(); // 源圖高度          
  27.             if (srcWidth >= destWidth && srcHeight >= destHeight) {  
  28.                 Image image = bi.getScaledInstance(srcWidth, srcHeight,  
  29.                         Image.SCALE_DEFAULT);  
  30.                 // 改進的想法:是否可用多執行緒加快切割速度
  31.                 // 四個引數分別為影象起點座標和寬高
  32.                 // 即: CropImageFilter(int x,int y,int width,int height)
  33.                 cropFilter = new CropImageFilter(x, y, destWidth, destHeight);  
  34.                 img = Toolkit.getDefaultToolkit().createImage(  
  35.                         new FilteredImageSource(image.getSource(), cropFilter));  
  36.                 BufferedImage tag = new BufferedImage(destWidth, destHeight,  
  37.                         BufferedImage.TYPE_INT_RGB);  
  38.                 Graphics g = tag.getGraphics();  
  39.                 g.drawImage(img, 00null); // 繪製縮小後的圖
  40.                 g.dispose();  
  41.                 // 輸出為檔案
  42.                 ImageIO.write(tag, "JPEG"new File(dirImageFile));  
  43.             }  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.     }  
  48.     /** 
  49.      * 縮放影象 
  50.      *  
  51.      * @param srcImageFile       源影象檔案地址 
  52.      * @param result             縮放後的影象地址 
  53.      * @param scale              縮放比例 
  54.      * @param flag               縮放選擇:true 放大; false 縮小; 
  55.      */
  56.     publicstaticvoid scale(String srcImageFile, String result, int scale,  
  57.             boolean flag) {  
  58.         try {  
  59.             BufferedImage src = ImageIO.read(new File(srcImageFile)); // 讀入檔案
  60.             int width = src.getWidth(); // 得到源圖寬
  61.             int height = src.getHeight(); // 得到源圖長
  62.             if (flag) {  
  63.                 // 放大
  64.                 width = width * scale;  
  65.                 height = height * scale;  
  66.             } else {  
  67.                 // 縮小
  68.                 width = width / scale;  
  69.                 height = height / scale;  
  70.             }  
  71.             Image image = src.getScaledInstance(width, height,Image.SCALE_DEFAULT);  
  72.             BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
  73.             Graphics g = tag.getGraphics();  
  74.             g.drawImage(image, 00null); // 繪製縮小後的圖
  75.             g.dispose();  
  76.             ImageIO.write(tag, "JPEG"new File(result));// 輸出到檔案流
  77.         } catch (IOException e) {  
  78.             e.printStackTrace();  
  79.         }  
  80.     }  
  81.     /** 
  82.      * 重新生成按指定寬度和高度的影象 
  83.      * @param srcImageFile       源影象檔案地址 
  84.      * @param result             新的影象地址 
  85.      * @param _width             設定新的影象寬度 
  86.      * @param _height            設定新的影象高度 
  87.      */
  88.     publicstaticvoid scale(String srcImageFile, String result, int _width,int _height) {        
  89.         scale(srcImageFile,result,_width,_height,0,0);  
  90.     }  
  91.     publicstaticvoid scale(String srcImageFile, String result, int _width,int _height,int x,int y) {  
  92.         try {  
  93.             BufferedImage src = ImageIO.read(new File(srcImageFile)); // 讀入檔案
  94.             int width = src.getWidth(); // 得到源圖寬
  95.             int height = src.getHeight(); // 得到源圖長
  96.             if (width > _width) {  
  97.                  width = _width;  
  98.             }  
  99.             if (height > _height) {  
  100.                 height = _height;