【发布时间】:2016-09-29 10:02:56
【问题描述】:
在使用画布工作/学习几个小时后,我设法获得了图像克隆,它现在是像素,我让用户从颜色光谱中选择一种颜色,并且我的函数中有该颜色十六进制:
move: function (color) {
// 'color' is the value user selected
var img_id = jQuery(".selected_bg_img").attr("id");
alert(img_id);
var x = 0;
var y = 0;
var width = 409;
var height = 409;
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById(img_id);
ctx.drawImage(img,x,y,width,height);
var imageData = ctx.getImageData(0,0,width,height);
var data = imageData.data;
alert(data);
}
现在有两个任务正在进行中,
1.我们如何从数据中提取主色?
2. 我们如何将主色转换为我们在函数中得到的颜色?对于现场工作示例,我在末尾给出了链接
注意:从产品图像的左侧选择图像(任何最后3个),并且当颜色选择它克隆到画布上的图像。
在这里,我试图用用户选择的颜色替换最大颜色来克隆图像..
for (var i=0;i<imgData.data.length;i+=4)
{
imgData.data[i]=255-imgData.data[i];
imgData.data[i+1]=255-imgData.data[i+1];
imgData.data[i+2]=255-imgData.data[i+2];
imgData.data[i+3]=255;
}
*****编辑*****
我的问题不是很复杂我想我有这张图片在此处输入图片描述
所以我们可以清楚地看到主色是灰色,通过任何方法我只是想用我在函数中使用的新颜色替换该颜色移动并用新颜色绘制该图像。我拍摄的图像并显示了另一个示例:
http://www.art.com/products/p14499522-sa-i3061806/pela-silverman-colorful-season-i.htm?sOrig=CAT&sOrigID=0&dimVals=729271&ui=573414C032AA44A693A641C8164EB595 在图像左侧,当我们选择相似图像时,它们在图像底部中心有“更改颜色”选项。这正是我想要做的。
所以现在我尝试读取 1x1 的图像,这就是我在记录它时在控制台中得到的(尤其是我显示的图像):
[166, 158, 152, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…]
所以它可能是从左上角开始的第一个开始,我想它需要遍历整个图像,这就是我遍历整个图像时得到的结果:
[110, 118, 124, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255…]
我用于迭代的循环是:
var imageData = ctx.getImageData(0,0,width,height);
var data = imageData.data;
for (var i=0;i<data.length;i+=4)
{
data[i]=255-data[i];
data[i+1]=255-data[i+1];
data[i+2]=255-data[i+2];
data[i+3]=255;
}
console.log(data);
这个迭代对吗?如果是,它现在似乎正在计算和替换主色,我在这里是空白的,但我现在在 rgb 中有用户值,需要寻找应该放置该值的位置
【问题讨论】:
-
他们使用 2 张图片 - 一张您看到,一张用作遮罩。蒙版使选择要着色的部分变得容易。要着色,只需抓取一个像素的 rgb,转换为 hsv 或 hsl,然后将色调更改为所需的色调并转换回 rgb。当蒙版不透明时,只需对源图像中的每个像素执行此操作即可。看看这两张图片:(彩色)cache1.artprintimages.com/images/spp/living_61_70.jpg 和(反式/白色)cache1.artprintimages.com/images/spp/living_61_70_mask.png
-
@enhzflep 感谢一大群人告诉我,我的技术缺陷也是如此,我们不能这样做吗?无论如何,如果他们使用面具并且如果它的简单技术我现在应该看到这个。有什么资源可以查看我们如何进行掩码(意味着转换以及转换后我们如何编写它)?
-
@enhzflep 你能看看我刚刚找到的东西吗:stackoverflow.com/questions/18379818/… 这是我要做的吗?
-
是的,准确。该死!尽管我阅读了几篇关于使用它们的教程,但我已经忘记了画布的内置合成模式。这个答案看起来很适合你。
-
如果您可以访问原始 RAW(来自相机 HDRI),自动创建蒙版会简单得多。 JPJ 压缩通过减少颜色分量来减少大部分大小。当您需要精细的颜色选择时,这使得它们几乎无法处理。我从未见过一种可以很好地替换 JPG 中的颜色的方法,您总是会流血。您唯一的选择是手动创建蒙版或为整个图像着色。
标签: javascript jquery canvas html5-canvas