【问题标题】:Imagick. Changing a color to be transparent想象一下。将颜色更改为透明
【发布时间】:2012-03-07 01:34:00
【问题描述】:

我想改变这张图片的黑色边框: http://dev.loungeup.net/im/ 在 PHP 中使用 Imagick 透明化。

结果图像的灰色边框应可见,灰色边框内的图像可见,灰色边框外的所有内容(今天为黑色)都应该是透明的,并让底层内容(例如 HTML 页面)可见。

我已经多次阅读文档并尝试了几种解决方案,但没有弄清楚如何实现它。

感谢任何帮助。

谢谢

【问题讨论】:

    标签: php png imagemagick imagick


    【解决方案1】:

    您可以使用一种类似于 Photoshop 魔术棒工具的方法:

    convert original.jpg -alpha set -channel alpha -fuzz 18% \
    -fill none -floodfill +0+0 black transparent-border.png
    

    以下是分解的命令:

    convert original.jpg: 用原图启动Imagemagick

    -alpha set:激活alpha通道

    -channel alpha: 让后续操作符作用于 alpha 通道

    -fuzz 18%:见-floodfill...

    -fill none:见-floodfill...

    -floodfill +0+0 black:从左上角(+0+0)开始,在black-fuzz颜色距离内找到相邻像素并将其替换为-fill

    transparent-border.png:输出图片

    结果如下:

    不幸的是,如您所见,这种方法仍然会在您提供的图像中留下一些暗像素,因为边框不是纯黑色并且与内部灰色边框混合了一点,并且图像本身很小。

    如果您有一个质量更好的源图像,或者您可以在修改后缩小尺寸的更大的源图像,您将获得更好的结果。

    如果您对这些小图像感到困惑(或者您只想使用其他方法),我建议您采用不同的方法,创建自己的蒙版形状,该形状比原始照片的形状小,然后添加回您自己的灰色边框。我在下面汇总了这个过程的一个示例。

    此方法的可能命令是:

    convert original.jpg mask.png -compose CopyOpacity -composite \
    -compose src-over new-border.png -composite clean-result.png
    

    ...坏掉了...

    convert original.jpg mask.png: 以原图启动Imagemagick,并引入mask.png作为第二层(mask.png是黑底照片的白色圆角矩形,但形状略小于原件 - 结果将删除原件的灰色和黑色边框)。

    -compose CopyOpacity -composite: 使用 mask.png 从 original.png 中“剔除”形状

    -compose src-over: 将复合方法重置为简单的覆盖

    new-border.png -composite: 覆盖一个灰色边框(png 是一个 3 px 宽的边框,透明背景上遮罩边缘每边各 1px)

    clean-result.png:输出图片

    我在 Photoshop 中创建了 mask.png 和 new-border.png。您可以使用 Imagemagick 的矢量工具并仅使用 original.jpg 在一个命令中完成所有操作,但这并不容易。

    以上结果:

    最后一点,我不确定您使用的是 PHP 的 Imagick 还是命令行中的 Imagemagick。几年前,我尝试使用 Imagick,但很快就因为与命令行相比缺乏文档而感到沮丧(不过,这可能已经改变了)。相反,我从 PHP 执行命令(例如,来自 exec()passthru())。一些或许多其他人可能会告诉你,你不应该从 PHP 执行 shell 命令,但只要你小心地转义任何参数,我还没有看到一个令人信服的反对这样做的论据。然后,您将拥有整个 Imagemagick 文档 (http://www.imagemagick.org/Usage/)。

    干杯。

    【讨论】:

    • 不知道图形大小的情况下,你知道如何从右下角泛滥填充吗?
    • @alfC 旋转 180 度,填充然后旋转回来 :-)
    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多