Web端裁剪圖片方法
由於在Web端,JavaScript不能直接處理本地檔案,因此可以在後臺裁剪圖片,或者利用html5的canvas來處理。
方法1:傳送到後臺剪下
步驟1:上傳圖片到後臺,向前端返回圖片URL
利用input標籤,將檔案傳送到後臺。
<input id="image" type="file" name="image" />
可以使用jQuery中的ajaxFileUpload方法
$.ajaxFileUpload( { url: 'live/apply/uploadImage', //用於檔案上傳的伺服器端請求地址 type:'post', secureuri: false, //一般設定為false fileElementId: image, //檔案上傳空間的id屬性 dataType: 'json', //返回值型別 一般設定為json data:data, //可以傳遞圖片屬性及其他資料 success: function (data, status) //伺服器成功響應處理函式 { //上傳傳成功處理 }, error: function (data, status, e)//伺服器響應失敗處理函式 { //上傳失敗處理 }
步驟2: 進行裁剪,獲取圖片的座標及長寬等值,傳回後臺
這裡一般是利用一個移動的div來獲取剪截的動畫效果,目前有多種jquery外掛可以使用,本文使用的是Jcrop外掛,比較簡單方便。
$("#myPhoto").Jcrop({ onChange:showPreview, onSelect:showPreview, aspectRatio:1 }); function showPreview(coords){ if(parseInt(coords.w){ //計算預覽區域圖片縮放的比例,通過計算顯示區域的寬度(與高度)與剪裁的寬度(與高度)之比得到 var rx = $("#preview_box").width() / coords.w; var ry = $("#preview_box").height() / coords.h; //通過比例值控制圖片的樣式與顯示 $("#crop_preview").css({ width:Math.round(rx * $("#myPhoto").width()) + "px", //預覽圖片寬度為計算比例值與原圖片寬度的乘積 height:Math.round(rx * $("#myPhoto").height()) + "px", //預覽圖片高度為計算比例值與原圖片高度的乘積 marginLeft:"-" + Math.round(rx * coords.x) + "px", marginTop:"-" + Math.round(ry * coords.y) + "px" }); $("#X1").val(coords.x); $("#Y1").val(coords.y); $("#X2").val(coords.x2); $("#Y2").val(coords.y2); $("#W").val(coords.w); $("#H").val(coords.h); } } });
根據上述過程,可以將獲取到的剪截橫縱座標和長寬資料傳送到後臺。
步驟3:後臺裁剪圖片
以java程式碼為例
/* * 圖片裁剪通用介面 * src:圖片位置,dest:圖片儲存位置 * 若要覆蓋原圖片,只需src == dest即可 */ public static void cutImage(String src,String dest,int x,int y,int w,int h) throws IOException{ File srcImg =new File(src); //獲取字尾名 String suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1); //根據不同的字尾獲取圖片讀取器 Iterator iterator = ImageIO.getImageReadersBySuffix(suffix); ImageReader reader = (ImageReader)iterator.next(); InputStream in=new FileInputStream(src); ImageInputStream iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); //設定裁剪位置 Rectangle rect = new Rectangle(x, y, w,h); param.setSourceRegion(rect); //儲存裁剪後的圖片 BufferedImage bi = reader.read(0,param); ImageIO.write(bi, suffix, new File(dest)); }
方法2:Html5的canvas技術
這個需要瀏覽器支援以下幾個點,並且相容性還沒有進行測試:
-
File API
-
Blob
-
canvas
步驟1:讀取檔案
如方法1一樣,需要用input標籤來獲取file,但是JavaScript不能直接操作檔案,因此需要File API來處理。
$('input[type=file]').change(function(){ var file=this.files[0]; var reader=new FileReader(); reader.onload=function(){ // 通過 reader.result 來訪問生成的 DataURL var url=reader.result; setImageURL(url); }; reader.readAsDataURL(file); }); var image=new Image(); function setImageURL(url){ image.src=url; }
步驟2:獲取裁剪座標
參照方法1中的步驟2
步驟3:利用canvas重繪圖片
首先要設定剪截後的圖片大小相等的canvas。
// 以下四個引數由步驟2獲得 var x, y, width, height; var canvas=$('<canvas width="'+width+'" height="'+height+'"></canvas>')[0], ctx=canvas.getContext('2d'); ctx.drawImage(image,x,y,width,height,0,0,width,height);//重繪 $(document.body).append(canvas);//新增到文件中可以檢視效果
步驟4:儲存圖片
我們要獲取 canvas 中圖片的資訊,需要用 toDataURL 轉換成上面用到的 DataURL 。 然後取出其中 base64 資訊,再用 window.atob 轉換成由二進位制字串。但 window.atob 轉換後的結果仍然是字串,直接給 Blob 還是會出錯。所以又要用 Uint8Array 轉換一下。
var data=canvas.toDataURL(); // dataURL 的格式為 “data:image/png;base64,****”,逗號之前都是一些說明性的文字,我們只需要逗號之後的就行了 data=data.split(',')[1]; data=window.atob(data); var ia = new Uint8Array(data.length); for (var i = 0; i < data.length; i++) { ia[i] = data.charCodeAt(i); }; // canvas.toDataURL 返回的預設格式就是 image/png var blob=new Blob([ia], {type:"image/png"});
步驟5:將blob資料傳送至後臺
在後臺可以將Blob格式的資料轉換成image儲存。
相關文章
- ios裁剪圖片iOS
- web技術分享| 圖片上傳與圖片裁剪結合 vue3WebVue
- JavaScript圖片裁剪的無變形實現方法JavaScript
- octobercms 圖片裁剪外掛
- Java 圖片裁剪,擷取Java
- JAVA實現圖片裁剪Java
- Python批次裁剪圖片Python
- Vue圖片裁剪上傳元件Vue元件
- iOS-圖片水印,圖片裁剪和螢幕截圖iOS
- windows10怎樣裁剪圖片_Win10如何使用自帶工具裁剪圖片WindowsWin10
- 前端通過background實現圖片裁剪顯示的方法前端
- ps裁剪工具怎麼自由裁剪 ps如何裁剪自己想要的圖片尺寸
- intervention/image 伺服器圖片裁剪伺服器
- 圖片裁剪上傳示例(node + react)React
- vue專案新增圖片裁剪元件Vue元件
- 圖片裁剪-文字識別-文字新增
- canvas圖片裁剪,雙指縮放順滑體驗,支援PC端移動端Canvas
- Android 開源圖片裁剪工具、圖片顯示工具分享Android
- 微信小程式裁剪圖片成圓形微信小程式
- python 裁剪圖片;位深度不變Python
- Android 拍照、選擇圖片並裁剪Android
- 呼叫系統檔案管理器選擇圖片,呼叫系統裁剪AIP對圖片處理,顯示裁剪之後的圖片...AI
- 基於React Hook實現圖片的裁剪ReactHook
- Flutter基礎-021-ClipOval圖片裁剪Flutter
- 微信小程式之裁剪圖片成圓形微信小程式
- 【譯】如何使用Android MediaStore裁剪大圖片AndroidAST
- 5 款最新的 jQuery 圖片裁剪外掛jQuery
- 開源圖片工具箱(Img Toolbox) 格式轉換 新增水印 圖片壓縮 圖片裁剪 圖片旋轉 圖片縮放
- web圖片使用Web
- Flutter 圖片裁剪旋轉翻轉編輯器Flutter
- 自定義圖片裁剪之雙指縮放思路
- Laravel- 圖片上傳新增自動裁剪功能Laravel
- 圖片裁剪並上傳到阿里雲oss阿里
- Vue-cropper 圖片裁剪的基本原理Vue
- vue2圖片裁剪(vue-cropper外掛)Vue
- 藉助系統自帶圖片裁剪整合圖片選擇以及7.0適配
- 基於cropper.js的圖片上傳和裁剪JS
- Nginx安裝http_image_filter_module圖片裁剪模組NginxHTTPFilter