javascript - 如何使用 JavaScript 裁剪图像区域?
问题描述
如何使用 JavaScript 裁剪图像区域?正如我所读到的,我必须使用画布将图像投影在上面。
使用以下代码,我正在切割图像的一个区域,但切割区域的大小不是指定的。
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
// draw cropped image
var sourceX = 0;
var sourceY = 0;
var sourceWidth = 500;
var sourceHeight = 150;
var destWidth = sourceWidth;
var destHeight = sourceHeight;
var destX = canvas.width / 2 - destWidth / 2;
var destY = canvas.height / 2 - destHeight / 2;
context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
<canvas id="myCanvas" style="border:1px solid red"></canvas>
我试图在这张图片中代表我想要做的事情。
我的主要问题是画布不适应裁剪图像的大小,最终的height
( sourceHeight
) 和width
( sourceWidth
) 它们不是我指定的
我该如何解决?
解决方案
问题
您的源“宽度”与图像的宽度相同。
解决方案
当使用带有 9 个参数的 ctx.drawImage 时,可以将其视为剪切和粘贴。
您想将轮廓“剪切”为红色,然后将其“粘贴”到新的居中位置。您想一直“剪切”到源的中途点。所以你需要一直选择到图像的中点。
我还建议可能将变量名称从“源”更改为“crop”(cropX、cropWidth 等)以更好地反映其目的,因为它不再是“源”的真正宽度。
如果您希望图像填满整个画布,请将画布的宽度和高度“粘贴”为 (0,0)
context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, canvas.width, canvas.height);
编码
...
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
// crop from 0,0, to 250,150
var cropX = 0;
var cropY = 0;
var cropWidth = 250;
var cropHeight = 150;
//resize our canvas to match the size of the cropped area
canvas.style.width = cropWidth;
canvas.style.height = cropHeight;
//fill canvas with cropped image
context.drawImage(imageObj, cropX, cropY, cropWidth, cropHeight, 0, 0, canvas.width, canvas.height);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
...
推荐阅读
- java - 在实现抽象方法之后,我什么时候需要使用@Override
- flutter - 如何在flutter中请求位置许可?我尝试了一些东西,但它不起作用
- android - Kotlin 多平台移动:Flow
- > 映射到 Flow
在 iOS 中 - docker - 在 docker pgadmin 容器和 windows10 之间共享目录
- java - 如何在java中重新分配存储在对象中的数组变量
- java - int[] vs ArrayList<>() 在记忆中,Java 中的动态编程
- visual-studio - 调试时未在实验实例上安装 VSIX
- automation - Maya Standalone、PyMel 和属性可访问性
- javascript - Javascript:正确回答或错误回答时未显示问题和消息
- python - 如果 JSON 不包含某些字段,如何重试 http 调用 x 次?