Если это в целях эффективности, то нет вы не можете получить непрямоугольную форму, используя getImageData()
.Однако, если вам нужна функциональность, вы можете обрезать примерно так ( Пример JS Lint ):
var img1 = new Image();
img1.onload = function(){
var w = img1.width
var h = img1.height
ctx.drawImage(img1,0,0);
// Create a circular clipping path
ctx.translate(w / 2, 1.5 * h);
ctx.beginPath();
ctx.arc(0,0,100,0,Math.PI*2,true);
ctx.clip();
ctx.drawImage(img1,-w / 2,-150);
}
img1.src = "foobar.jpg";
То, что вы получите, является оригиналом, а затемобрезанная версия.Вы можете делать это каждый раз, когда загружаете изображение.Кроме того, вы можете создать изображение, создав второй холст, рисуя его, но с клипом.По сути, это создает кэшированную версию вашего изображения, она по-прежнему представляет собой прямоугольник, но клип делает все, что находится за пределами клипа, прозрачным (, если хотите, я тоже могу привести пример этого см. Здесь ).