1. 程式人生 > >js圖片裁剪並生成base64格式圖片

js圖片裁剪並生成base64格式圖片

外掛

這裡用到一個圖片裁剪jQuery外掛Cropper,是杭州的前端工程師Fengyuan Chen所寫的,功能相當豐富,裁剪時還可以對原圖進行旋轉。

<link rel="stylesheet" href="http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/cropper.min.css" />
        <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
        <script src="http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/cropper.min.js"
>
</script>

引用資源,cropper.min.js,cropper.min.css 放在了runjs上,js為28k,css4k。

html

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/cropper.min.css"
/>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script src="http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/cropper.min.js"></script> <style> .img-con { width: 800px; height: 400px; border
: 1px solid #ccc
; float: left; }
.img-pre { width: 400px; height: 400px; float: right; border: 1px solid #eee; } .img-pre img { width: 180px; height: 180px; padding: 10px; } .img-con img { width: 100%; height: 100%; }
</style> </head> <body> <div id="img_container" class="img-con"> <img src="" alt=""> </div> <div class="img-pre"> </div> <button class="btn">裁剪</button> <button class="change-img2">圖2</button> <script> var $image = $('#img_container img'); var imgurl = 'http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/1-1504051354254R.png'; var imgurl2 = 'http://sandbox.runjs.cn/uploads/rs/269/px1iaa72/psb.jpg'; $image.attr("src", imgurl); $image.on("load", function() { // 等待圖片載入成功後,才進行圖片的裁剪功能 $image.cropper({ aspectRatio: 1 / 1   // 1:1的比例進行裁剪,可以是任意比例,自己調整 }); }); $('.btn').on("click", function() { console.log("裁剪"); var src = $image.eq(0).attr("src"); var canvasdata = $image.cropper("getCanvasData"); var cropBoxData = $image.cropper('getCropBoxData'); convertToData(src, canvasdata, cropBoxData, function(basechar) { // 回撥後的函式處理 console.log(basechar); var imgDom = document.createElement('img'); imgDom.src = basechar; $('.img-pre').append(imgDom); }); }); $('.change-img2').on('click', function() { $image.eq(0).attr("src", imgurl2); $('.cropper-canvas img').attr("src", imgurl2); $('.cropper-view-box img').attr("src", imgurl2); }); function convertToData(url, canvasdata, cropdata, callback) { var cropw = cropdata.width; // 剪下的寬 var croph = cropdata.height; // 剪下的寬 var imgw = canvasdata.width; // 圖片縮放或則放大後的高 var imgh = canvasdata.height; // 圖片縮放或則放大後的高 var poleft = canvasdata.left - cropdata.left; // canvas定點陣圖片的左邊位置 var potop = canvasdata.top - cropdata.top; // canvas定點陣圖片的上邊位置 var canvas = document.createElement("canvas"); var ctx = canvas.getContext('2d'); canvas.width = cropw; canvas.height = croph; var img = new Image(); img.src = url; img.onload = function() { this.width = imgw; this.height = imgh; // 這裡主要是懂得canvas與圖片的裁剪之間的關係位置 ctx.drawImage(this, poleft, potop, this.width, this.height); var base64 = canvas.toDataURL('image/jpg', 1); // 這裡的“1”是指的是處理圖片的清晰度(0-1)之間,當然越小圖片越模糊,處理後的圖片大小也就越小 callback && callback(base64) // 回撥base64字串 } } </script> </body> </html>

效果
圖片裁剪

demo地址