成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web端裁剪圖片方法

ysl_unh / 2553人閱讀

摘要:由于在端,不能直接處理本地文件,因此可以在后臺裁剪圖片,或者利用的來處理。通過來訪問生成的步驟獲取裁剪坐標(biāo)參照方法中的步驟步驟利用重繪圖片首先要設(shè)置剪截后的圖片大小相等的。

由于在Web端,JavaScript不能直接處理本地文件,因此可以在后臺裁剪圖片,或者利用html5的canvas來處理。

方法1:傳送到后臺剪切 步驟1:上傳圖片到后臺,向前端返回圖片URL

利用input標(biāo)簽,將文件發(fā)送到后臺。

    

可以使用jQuery中的ajaxFileUpload方法

     $.ajaxFileUpload(
        {
            url: "live/apply/uploadImage", //用于文件上傳的服務(wù)器端請求地址
            type:"post",
            secureuri: false, //一般設(shè)置為false
            fileElementId: image, //文件上傳空間的id屬性  
            dataType: "json", //返回值類型 一般設(shè)置為json
            data:data, //可以傳遞圖片屬性及其他數(shù)據(jù)
            success: function (data, status)  //服務(wù)器成功響應(yīng)處理函數(shù)
                {
                    //上傳傳成功處理
                },
            error: function (data, status, e)//服務(wù)器響應(yīng)失敗處理函數(shù)
                 {
                    //上傳失敗處理
                 }
步驟2: 進(jìn)行裁剪,獲取圖片的坐標(biāo)及長寬等值,傳回后臺

這里一般是利用一個移動的div來獲取剪截的動畫效果,目前有多種jquery插件可以使用,本文使用的是Jcrop插件,比較簡單方便。

    $("#myPhoto").Jcrop({
        onChange:showPreview,
        onSelect:showPreview,
        aspectRatio:1
    });    
    function showPreview(coords){
        if(parseInt(coords.w){
        //計算預(yù)覽區(qū)域圖片縮放的比例,通過計算顯示區(qū)域的寬度(與高度)與剪裁的寬度(與高度)之比得到
            var rx = $("#preview_box").width() / coords.w; 
            var ry = $("#preview_box").height() / coords.h;
            //通過比例值控制圖片的樣式與顯示
            $("#crop_preview").css({
                width:Math.round(rx * $("#myPhoto").width()) + "px",    //預(yù)覽圖片寬度為計算比例值與原圖片寬度的乘積
                height:Math.round(rx * $("#myPhoto").height()) + "px",    //預(yù)覽圖片高度為計算比例值與原圖片高度的乘積
                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);
        }
    }
});

根據(jù)上述過程,可以將獲取到的剪截橫縱坐標(biāo)和長寬數(shù)據(jù)發(fā)送到后臺。

步驟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);
           //根據(jù)不同的后綴獲取圖片讀取器
           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(); 
          
           //設(shè)置裁剪位置
           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技術(shù)

這個需要瀏覽器支持以下幾個點,并且兼容性還沒有進(jìn)行測試:

File API

Blob

canvas

步驟1:讀取文件

如方法1一樣,需要用input標(biāo)簽來獲取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:獲取裁剪坐標(biāo)

參照方法1中的步驟2

步驟3:利用canvas重繪圖片

首先要設(shè)置剪截后的圖片大小相等的canvas。

// 以下四個參數(shù)由步驟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 轉(zhuǎn)換成上面用到的 DataURL 。 然后取出其中 base64 信息,再用 window.atob 轉(zhuǎn)換成由二進(jìn)制字符串。但 window.atob 轉(zhuǎn)換后的結(jié)果仍然是字符串,直接給 Blob 還是會出錯。所以又要用 Uint8Array 轉(zhuǎn)換一下。

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 返回的默認(rèn)格式就是 image/png
var blob=new Blob([ia], {type:"image/png"});
步驟5:將blob數(shù)據(jù)發(fā)送至后臺

在后臺可以將Blob格式的數(shù)據(jù)轉(zhuǎn)換成image保存。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78430.html

相關(guān)文章

  • 騰訊 AlloyTeam 移動 Web 裁剪組件 AlloyCrop 正式開源

    摘要:兼容性如何支持以及的設(shè)備的瀏覽器便可運(yùn)行不一一列舉一共不到行為什么體積這么小騰訊手內(nèi)大量的都會去不斷地從各個維度進(jìn)行性能優(yōu)化。騰訊內(nèi)部有哪些項目在用目前主要是興趣部落群等業(yè)務(wù)在用,剛剛開源出來,只要有裁剪圖片的地方都會用到。 傳送門 Github地址:https://github.com/AlloyTeam/AlloyFinger/tree/master/alloy_crop 在線De...

    yexiaobai 評論0 收藏0
  • html5 上傳本地圖片處理各種問題

    摘要:原文還是在簡書上上傳本地圖片處理各種問題這是最近給公司寫一個項目,項目要求大概是這樣子上傳手機(jī)本地圖片,然后裁剪后加的需求能夠旋轉(zhuǎn)圖片,用于裁剪后面加的需求填寫各種文字,選擇顏色,之后把文字和個相關(guān)的圖片,水印到裁剪的圖片上,上傳服務(wù)器生成 原文還是在簡書上: html5 上傳本地圖片處理各種問題 這是最近給公司寫一個項目,項目要求大概是這樣子:1.上傳手機(jī)本地圖片,然后裁剪(后加的需...

    iOS122 評論0 收藏0
  • html5 上傳本地圖片處理各種問題

    摘要:原文還是在簡書上上傳本地圖片處理各種問題這是最近給公司寫一個項目,項目要求大概是這樣子上傳手機(jī)本地圖片,然后裁剪后加的需求能夠旋轉(zhuǎn)圖片,用于裁剪后面加的需求填寫各種文字,選擇顏色,之后把文字和個相關(guān)的圖片,水印到裁剪的圖片上,上傳服務(wù)器生成 原文還是在簡書上: html5 上傳本地圖片處理各種問題 這是最近給公司寫一個項目,項目要求大概是這樣子:1.上傳手機(jī)本地圖片,然后裁剪(后加的需...

    Taste 評論0 收藏0

發(fā)表評論

0條評論

ysl_unh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<