gpt4 book ai didi

javascript - 像饼图一样裁剪图像

转载 作者:数据小太阳 更新时间:2023-10-29 04:12:38 26 4
gpt4 key购买 nike

我想在另一张图片上裁剪一张图片,例如饼图,以创建加载动画。我正在考虑使用 raphaeljs,但找不到任何有关以饼图样式裁剪图像的信息。

以下是示例图片:

开始状态:

Start state

结束状态:

End state

它应该是什么样子:

What it should look like

最佳答案

只需在图像顶部绘制一个半透明的填充圆弧(根据您的喜好调整 alpha 值):

var ctx = document.querySelector("canvas").getContext("2d"),
img = new Image;

img.onload = draw;
img.src = "http://i.imgur.com/hQ5Pljv.png";

function draw(){

var cx = 157, cy = 159, r = 150,
pst = 0,
ang = Math.PI * 2 * (pst/100),
dlt = 2;

// animate the following part
(function loop() {
ctx.drawImage(img, 0, 0);

ctx.beginPath();
ctx.moveTo(cx, cy);
ctx.arc(cx, cy, r, 0, ang);
ctx.fillStyle = "rgba(0,0,0,0.33)"; // adjust alpha here
ctx.fill();

pst += dlt;
if (pst <= 0 || pst >= 100) dlt = -dlt;
ang = Math.PI * 2 * (pst/100);

requestAnimationFrame(loop)
})()
}
<canvas width=320 height=320></canvas>

方法二——合成

使用两个步骤来剪切上面相同的弧以使用图像代替:

  • 画弧,这就是合成数据
  • 改变组合。 mode to source-atop - 下一个绘图替换绘制的圆弧
  • 绘制次要图像
  • 改变组合。 mode to destination-atop - 下一次绘图将填充所有非像素
  • 绘制主图

演示:

var ctx = document.querySelector("canvas").getContext("2d"),
img1 = new Image, img2 = new Image, cnt=2;

img1.onload = img2.onload = loader;
img1.src = "http://i.imgur.com/hQ5Pljv.png";
img2.src = "http://i.imgur.com/k70j3qp.jpg";

function loader(){if (!--cnt) draw()};
function draw(){
var cx = 157, cy = 159, r = 150,
pst = 0, ang = Math.PI * 2 * (pst/100), dlt = 2;

// animate the following part
(function loop() {
ctx.clearRect(0, 0, 320, 320); // clear canvas, or set last comp mode to "copy"

// first arc
ctx.beginPath();
ctx.moveTo(cx, cy);
ctx.arc(cx, cy, r, 0, ang);
ctx.fill(); // this will be comp. basis for the next steps

// comp mode secondary image
ctx.globalCompositeOperation = "source-atop"; // replaces filled arc
ctx.drawImage(img2, 0, 0);

// comp mode main image
ctx.globalCompositeOperation = "destination-atop"; // fills all non-pixels
ctx.drawImage(img1, 0, 0);

pst += dlt; if (pst <= 0 || pst >= 100) dlt = -dlt; ang = Math.PI * 2 * (pst/100);
ctx.globalCompositeOperation = "source-over"; // reset comp. mode
requestAnimationFrame(loop)
})()
}
<canvas width=320 height=320></canvas>

关于javascript - 像饼图一样裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131242/

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