gpt4 book ai didi

javascript - 根据内容自动裁剪 HTML5 Canvas

转载 作者:技术小花猫 更新时间:2023-10-29 11:53:56 24 4
gpt4 key购买 nike

假设这是我的 Canvas ,上面画了一张邪恶的脸。我想使用 toDataURL() 将我的邪恶面孔导出为 PNG;然而,整个 Canvas 都被栅格化了,包括邪恶面孔和 Canvas 边缘之间的“空白”。

+---------------+
| |
| |
| (.Y. ) |
| /_ |
| \____/ |
| |
| |
+---------------+

根据内容裁剪/trim/收缩包裹我的 Canvas 的最佳方法是什么,这样我的 PNG 就不会比面部的“边界框”大,如下所示?最好的方法似乎是缩放 Canvas ,但假设内容是动态的......?我确信应该有一个简单的解决方案,但它正在逃避我,大量谷歌搜索。

+------+
|(.Y. )|
| /_ |
|\____/|
+------+

谢谢!

最佳答案

已编辑(参见 comments)

function cropImageFromCanvas(ctx) {
var canvas = ctx.canvas,
w = canvas.width, h = canvas.height,
pix = {x:[], y:[]},
imageData = ctx.getImageData(0,0,canvas.width,canvas.height),
x, y, index;

for (y = 0; y < h; y++) {
for (x = 0; x < w; x++) {
index = (y * w + x) * 4;
if (imageData.data[index+3] > 0) {
pix.x.push(x);
pix.y.push(y);
}
}
}
pix.x.sort(function(a,b){return a-b});
pix.y.sort(function(a,b){return a-b});
var n = pix.x.length-1;

w = 1 + pix.x[n] - pix.x[0];
h = 1 + pix.y[n] - pix.y[0];
var cut = ctx.getImageData(pix.x[0], pix.y[0], w, h);

canvas.width = w;
canvas.height = h;
ctx.putImageData(cut, 0, 0);

var image = canvas.toDataURL();
}

关于javascript - 根据内容自动裁剪 HTML5 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com