【发布时间】:2014-02-28 03:53:05
【问题描述】:
我正在建立一个网站,我需要用户能够选择一张图片(带有黑色标志的透明 gif)并选择一种颜色。我有所有带有透明背景的黑色 GIF。
如何将 gif 的颜色(仅限黑色)更改为用户选择的颜色?我正在考虑为此使用画布,但我不确定......
【问题讨论】:
-
是gif动画还是简单图片?
标签: javascript html canvas html5-canvas gif
我正在建立一个网站,我需要用户能够选择一张图片(带有黑色标志的透明 gif)并选择一种颜色。我有所有带有透明背景的黑色 GIF。
如何将 gif 的颜色(仅限黑色)更改为用户选择的颜色?我正在考虑为此使用画布,但我不确定......
【问题讨论】:
标签: javascript html canvas html5-canvas gif
您可以为此使用画布。没有必要像许多建议的那样迭代像素缓冲区,我建议尽可能避免,原因有两个:
有一种更简单的方法涉及复合模式:
/// load image here, then:
function render() {
/// this composite mode clears the canvas as well
ctx.globalCompositeOperation = 'copy';
ctx.drawImage(img, 0, 0);
/// this mode fills in whatever, in the image
ctx.globalCompositeOperation = 'source-in';
/// color to change GIF to:
ctx.fillStyle = '#00c';
/// fill color into non-alpha pixels
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
copy 模式在这里工作,因为图像是我们想要绘制到画布上的唯一内容。如果您还需要绘制其他细节,请改用source-over 并使用clearRect() 手动清除画布。
提示:您还可以在顶部绘制另一个图像而不是填充颜色。
ctx.fillStyle = '#00c';
ctx.fillStyle = '#c00';
等等
【讨论】:
假设您要更改图像黑色部分(不是透明部分)的颜色,您必须使用画布获取图像的黑色像素并绘制一个新图像,用颜色替换这些像素您的用户已选择。
如果您想替换透明部分,只需使用 CSS 设置背景颜色即可。
【讨论】: