摘要:由于在端,不能直接處理本地文件,因此可以在后臺裁剪圖片,或者利用的來處理。通過來訪問生成的步驟獲取裁剪坐標參照方法中的步驟步驟利用重繪圖片首先要設置剪截后的圖片大小相等的。
由于在Web端,JavaScript不能直接處理本地文件,因此可以在后臺裁剪圖片,或者利用html5的canvas來處理。
方法1:傳送到后臺剪切 步驟1:上傳圖片到后臺,向前端返回圖片URL利用input標簽,將文件發送到后臺。
可以使用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=$("")[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保存。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78430.html
摘要:兼容性如何支持以及的設備的瀏覽器便可運行不一一列舉一共不到行為什么體積這么小騰訊手內大量的都會去不斷地從各個維度進行性能優化。騰訊內部有哪些項目在用目前主要是興趣部落群等業務在用,剛剛開源出來,只要有裁剪圖片的地方都會用到。 傳送門 Github地址:https://github.com/AlloyTeam/AlloyFinger/tree/master/alloy_crop 在線De...
摘要:原文還是在簡書上上傳本地圖片處理各種問題這是最近給公司寫一個項目,項目要求大概是這樣子上傳手機本地圖片,然后裁剪后加的需求能夠旋轉圖片,用于裁剪后面加的需求填寫各種文字,選擇顏色,之后把文字和個相關的圖片,水印到裁剪的圖片上,上傳服務器生成 原文還是在簡書上: html5 上傳本地圖片處理各種問題 這是最近給公司寫一個項目,項目要求大概是這樣子:1.上傳手機本地圖片,然后裁剪(后加的需...
摘要:原文還是在簡書上上傳本地圖片處理各種問題這是最近給公司寫一個項目,項目要求大概是這樣子上傳手機本地圖片,然后裁剪后加的需求能夠旋轉圖片,用于裁剪后面加的需求填寫各種文字,選擇顏色,之后把文字和個相關的圖片,水印到裁剪的圖片上,上傳服務器生成 原文還是在簡書上: html5 上傳本地圖片處理各種問題 這是最近給公司寫一個項目,項目要求大概是這樣子:1.上傳手機本地圖片,然后裁剪(后加的需...
閱讀 1872·2019-08-30 15:53
閱讀 3198·2019-08-30 15:44
閱讀 2811·2019-08-26 13:31
閱讀 1953·2019-08-26 12:10
閱讀 799·2019-08-26 11:01
閱讀 2129·2019-08-23 15:32
閱讀 1588·2019-08-23 13:43
閱讀 2536·2019-08-23 11:58