我有一个图像与填充的轮廓的某一种颜色地图,其中白色是最低的水平。我不想在这张地图上增加alpha透明度,其中白色是完全透明的,颜色和白色越“相似”,它的透明度就越低(达到最大的“模糊性”)。我该怎么做?
编辑:来澄清:我想要分配,例如:
示例:

发布于 2016-07-05 09:54:46
最新答案
我想我现在对你想要的东西有更好的把握。我们如何计算你的图像的亮度,标准化它,把它分割成许多离散的值(通过二进制),然后用它作为透明度.就像这样:
convert image.png \
\( \
+clone -colorspace HSL -separate -delete 0,1 \
-negate -normalize -posterize 5 -black-threshold 60% \
\) -compose copyopacity -composite result.png

让我解释一下怪物的命令。上面写着..。加载image.png,然后进行“侧”处理--这是括号(...)__中的所有内容。当您完成“侧”处理时,使用生成的任何内容作为原始图像-compose copy opacity -composite的不透明度/alpha通道,并保存结果。
现在,让我们看看()内部的“侧”处理。上面写着..。复制原始图像(+clone)并将其转换为色调、饱和度和亮度通道,而不是RGB (-colorspace HSL).然后分离3通道(-separate)和丢弃通道0和1-所以我放弃色调(颜色)和饱和度(生动),我只剩下轻,或亮度的原始图像-这是我们真正想要的。现在,我将(-normalize)的亮度范围标准化为0-255,并使用-posterize 5__将其转换为5步。所以步骤是0-50,50-100,100-150,150-200和200-255。然后,我使所有的步骤少于60%固体,以便所有的阴影和中间色调在你的形象是完全不透明的,只是高光有步骤的不透明度。然后,当我最后退出上面的括号时,它将被用作alpha通道。
如果您希望看到所有“侧”处理生成的不透明通道本身,只需在-write opacity.png后面和关闭)之前添加)即可。然后您可以预览文件opacity.png中的不透明通道。
我把它放在棋盘上,这样你就可以看到透明的区域了。您可能希望更改-posterize参数以设置粒度,然后将阈值设置为不受影响的小于80%的阈值。
为了对方法进行微调,使用此命令生成一个梯度,将其转换为步骤并放弃一些步骤:
convert -size 256x256 xc:red \
\( gradient:white-black -posterize 20 -white-threshold 50% \) \
-compose copyopacity -composite result.png

更改20和50%以更改步骤数和截止值。
如果您想像Photoshop那样在棋盘(棋盘)上进行组合,以便您可以看到透明度,请使用以下命令:
composite -compose Dst_Over -tile pattern:checkerboard result.png preview.png

原始答案
首先建立一个透明面具,然后使用它作为原始图像的不透明度。
所以,做个渐变--或者你想要的任何其他透明度:
convert -size 400x400 gradient:black-white \
-fill white -draw "rectangle 100,100 300,300" \
-fill black -draw "rectangle 150,150 250,250" \
-define png:color-type=0 alpha.png

然后拍一张实心的红色图像:
convert -size 400x400 xc:red red.png

现在,将alpha/不透明层应用于实体图像:
convert red.png alpha.png -compose copyopacity -composite result.png

发布于 2016-07-06 08:20:40
您还可以使用ImageMagick的 -fx操作符来实现这一点,它允许您编写任何您喜欢的程序。请注意,虽然,它是解释,所以它是缓慢的大图像。
因此,您可以获取原始图像并向其添加一个alpha层(-alpha opaque),然后选择新的alpha通道(-channel A)作为-fx要影响的通道。然后,您可以在响应曲线中编程,如下所示:
convert image.png -alpha opaque -channel A -fx "lightness < 0.9 ? 1 : 1-lightness" result.png

基本上,-fx就像一个函数调用,它可以返回一个数字,并且作为-channel A选项的结果,这个数字将作为alpha通道应用。公式上说..。“如果像素亮度小于90%,则使其不透明,否则使其透明度与亮度成正比。”
作为解释,这里是一个黑白渐变。
convert -size 256x256 gradient:black-white result.png

这里是-fx应用于它的地方:
convert -size 256x256 gradient:black-white -fx "lightness < 0.3 ? 1 : 1-lightness" result.png

如果你使用这作为你的阿尔法通道,你可以看到最黑暗的30%的你的图像将是不透明的(阿尔法是白色的)和中间色调和高光将逐步更透明(阿尔法是黑色)。
如果您不想混淆您,如果您喜欢这种方法,但由于-fx太慢,您可以像前面一段所示的那样预先绘制任何梯度/响应曲线,然后使用ImageMagick's -clut运算符反复将其应用于您潜在的数千幅大型图像。因此,您实际上是在创建一个预先构建的不透明查找表,然后将其应用于查找所有图像。我还没有测试过它,但它看起来如下:
第一步-只需做一次:
convert -size 256x1! gradient:black-white -fx "lightness < 0.3 ? 1 : 1-lightness" clut.png主处理回路
convert image.jpg \( +clone -colorspace HSL -separate -delete 0,1 -normalize -clut clut.png \) -compose copyopacity -composite result.pnghttps://stackoverflow.com/questions/38200170
复制相似问题