js圖片裁剪並生成base64格式圖片
阿新 • • 發佈:2019-02-02
外掛
這裡用到一個圖片裁剪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地址