gpt4 book ai didi

javascript - 通过 Javascript 更改图像颜色

转载 作者:搜寻专家 更新时间:2023-11-01 04:24:49 28 4
gpt4 key购买 nike

我一直在寻找在使用点击事件时改变图像颜色的方法。

我看到了这篇文章,它对 Mug 的第一个也是主要的回应非常有效。

但是,我需要使用类而不是 ID,因为我需要更改多个图像的颜色。当我将代码更改为 getElementsByClassName 而不是 byID 时,它不再有效。

当然,我将 ID=mug 更改为 class=mug。

我在代码中看不到任何其他地方会导致问题,因此我们将不胜感激。

我不能在原件上发帖,所以在这里添加。原文链接是: How to change color of an image using jquery

这是代码:

<img src="mug.png" id="mug" width="25%" height="25%" onload="getPixels(this)" />
<input type="text" id="color" value="#6491ee" />
<input type="button" value="change color" onclick="changeColor()">

<script type="text/javascript">
var mug = document.getElementById("mug");
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var originalPixels = null;
var currentPixels = null;

function HexToRGB(Hex)
{
var Long = parseInt(Hex.replace(/^#/, ""), 16);
return {
R: (Long >>> 16) & 0xff,
G: (Long >>> 8) & 0xff,
B: Long & 0xff
};
}

function changeColor()
{
if(!originalPixels) return; // Check if image has loaded
var newColor = HexToRGB(document.getElementById("color").value);

for(var I = 0, L = originalPixels.data.length; I < L; I += 4)
{
if(currentPixels.data[I + 3] > 0)
{
currentPixels.data[I] = originalPixels.data[I] / 255 * newColor.R;
currentPixels.data[I + 1] = originalPixels.data[I + 1] / 255 * newColor.G;
currentPixels.data[I + 2] = originalPixels.data[I + 2] / 255 * newColor.B;
}
}

ctx.putImageData(currentPixels, 0, 0);
mug.src = canvas.toDataURL("image/png");
}

function getPixels(img)
{
canvas.width = img.width;
canvas.height = img.height;

ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, img.width, img.height);
originalPixels = ctx.getImageData(0, 0, img.width, img.height);
currentPixels = ctx.getImageData(0, 0, img.width, img.height);

img.onload = null;
}
</script>

谢谢

最佳答案

我认为这可能与浏览器支持有关,因为 document.getElementByClassName("mug"); 应该返回一个元素数组(旧浏览器可能不支持)。此时很容易遍历每个杯子并像这样更改颜色

<img src="mug.png" id="mug" width="25%" height="25%" onload="getPixels(this)" />
<input type="text" id="color" value="#6491ee" />
<input type="button" value="change color" onclick="changeMugsColor()">

<script type="text/javascript">
var mug = document.getElementsByClassName("mug");
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var originalPixels = null;
var currentPixels = null;

function HexToRGB(Hex)
{
var Long = parseInt(Hex.replace(/^#/, ""), 16);
return {
R: (Long >>> 16) & 0xff,
G: (Long >>> 8) & 0xff,
B: Long & 0xff
};
}

function changeMugsColor() {
for (var ii = 0; ii < mug.length; ii++) {
changeColor(mug[ii]);
}
}

function changeColor(amug)
{
if(!originalPixels) return; // Check if image has loaded
var newColor = HexToRGB(document.getElementById("color").value);

for(var I = 0, L = originalPixels.data.length; I < L; I += 4)
{
if(currentPixels.data[I + 3] > 0)
{
currentPixels.data[I] = originalPixels.data[I] / 255 * newColor.R;
currentPixels.data[I + 1] = originalPixels.data[I + 1] / 255 * newColor.G;
currentPixels.data[I + 2] = originalPixels.data[I + 2] / 255 * newColor.B;
}
}

ctx.putImageData(currentPixels, 0, 0);
amug.src = canvas.toDataURL("image/png");
}

function getPixels(img)
{
canvas.width = img.width;
canvas.height = img.height;

ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, img.width, img.height);
originalPixels = ctx.getImageData(0, 0, img.width, img.height);
currentPixels = ctx.getImageData(0, 0, img.width, img.height);

img.onload = null;
}
</script>

我还没有运行代码,但它应该可以工作

关于javascript - 通过 Javascript 更改图像颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301340/

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