var box_w, box_h; // 图片蒙版宽、高 var r = 344 / 193; // 当前显示屏的宽高比例(344mm x 193mm、15.6寸) var img = document.getElementById("my-img"); var w = img.clientWidth// 图片当前宽度 var h = img.clientHeight// 图片当前高低
if (w < h) { box_w = w; box_h = w / r;
if (box_h > h) { box_h = h box_w = h / r } } elseif (w >= h) { box_w = h * r; box_h = h;
functioncaptureImage() { var divElement = box_line; var imgElement = img; var divRect = divElement.getBoundingClientRect(); var imgRect = imgElement.getBoundingClientRect();
var divLeft = divRect.left - imgRect.left; var divTop = divRect.top - imgRect.top; var divWidth = divRect.width; var divHeight = divRect.height;
var canvas = document.createElement("canvas"); canvas.width = divWidth / ratio; canvas.height = divHeight / ratio; var context = canvas.getContext("2d");
context.drawImage( imgElement, // 要绘制的图像元素 divLeft / ratio, // 源图像的左上角在目标画布中的 X 坐标 divTop / ratio, // 源图像的左上角在目标画布中的 Y 坐标。 divWidth / ratio, // 源图像在目标画布中要绘制的宽度 divHeight / ratio, // 源图像在目标画布中要绘制的高度 0, // 目标画布中绘制的图像的左上角的 X 坐标 0, // 目标画布中绘制的图像的左上角的 Y 坐标 divWidth / ratio, // 目标画布中绘制的图像的宽度 divHeight / ratio // 目标画布中绘制的图像的高度 );
var link = document.createElement("a"); link.href = canvas.toDataURL(); link.download = "crop-image.png"; link.click(); link.remove() }
var crop_image = document.getElementById("crop-image"); crop_image.addEventListener("click", captureImage);
Canvas自带的drawImage函数需要提供9个参数,
imgElement即为需要从上面截取图片的元素;
divLeft / ratio为源图像的左上角在目标画布中的 X 坐标(为保持和原图片一样的像素分辨率,将所有的坐标参数转为源图片的大小,);
/** * Description: 清除box */ functionclearBox() { var img = document.getElementById("my-img"); img.style.width = "" img.style.height = "" var box_line = document.getElementById("box_line"); if (box_line) { let parent = box_line.parentNode; parent.removeChild(box_line); } }
/** * Description: 初始化box */ functioninit_box_line() { var box_w, box_h; var r = 344 / 193; var img = document.getElementById("my-img"); var w = img.clientWidth var h = img.clientHeight
if (w < h) { box_w = w; box_h = w / r;
if (box_h > h) { box_h = h box_w = h / r } } elseif (w >= h) { box_w = h * r; box_h = h;
functioncaptureImage() { var divElement = box_line; var imgElement = img; var divRect = divElement.getBoundingClientRect(); var imgRect = imgElement.getBoundingClientRect();
var divLeft = divRect.left - imgRect.left; var divTop = divRect.top - imgRect.top; var divWidth = divRect.width; var divHeight = divRect.height;
var canvas = document.createElement("canvas"); canvas.width = divWidth / ratio; canvas.height = divHeight / ratio; var context = canvas.getContext("2d");
context.drawImage( imgElement, // 要绘制的图像元素 divLeft / ratio, // 源图像的左上角在目标画布中的 X 坐标 divTop / ratio, // 源图像的左上角在目标画布中的 Y 坐标。 divWidth / ratio, // 源图像在目标画布中要绘制的宽度 divHeight / ratio, // 源图像在目标画布中要绘制的高度 0, // 目标画布中绘制的图像的左上角的 X 坐标 0, // 目标画布中绘制的图像的左上角的 Y 坐标 divWidth / ratio, // 目标画布中绘制的图像的宽度 divHeight / ratio // 目标画布中绘制的图像的高度 );
var link = document.createElement("a"); link.href = canvas.toDataURL(); link.download = "crop-image.png"; link.click(); link.remove() }
var crop_image = document.getElementById("crop-image"); crop_image.addEventListener("click", captureImage); }