【问题标题】:PHP imagick detect transparencyPHP imagick 检测透明度
【发布时间】:2011-10-08 05:37:50
【问题描述】:

我希望能够使用 Imagick PHP 扩展来检测图像是否透明。

到目前为止,我唯一的运气就是运行 exec() / 其他一些命令,并使用 ImageMagick 命令行工具来实现这一点。这就是我的意思:

exec("identify -verbose example_transparent_image.png | grep \"Alpha\"", $output);
$is_transparent = !empty($output) ? true : false;

逻辑很简单。对相关图像进行详细检查:如果输出包含任何 alpha 信息,则表示它使用透明度。

似乎 PHP imagick 扩展应该将此作为其命令之一,但缺乏文档让我感到沮丧。每次都必须进行这种检查似乎很愚蠢。

【问题讨论】:

    标签: php transparency identifier imagick


    【解决方案1】:

    啊,解决了(我想)。 Imagick 有一个函数 getImageAlphaChannel() 如果它包含任何 alpha 信息则返回 true,如果不包含则返回 false。

    确保您拥有 ImageMagick 6.4.0 或更高版本。

    http://www.php.net/manual/en/function.imagick-getimagealphachannel.php

    【讨论】:

    • 我自己也遇到了这个确切的问题,我通过了 identifyimage 和 getimagealphachannel。 identifyimage 根本没有提供足够的信息,而 getimagealphachannel 工作得很好。从理论上讲,getImageAlphaChannel() 提供了一个 ALPHACHANNEL 常量,但坦率地说,文档在这方面是垃圾。我得到一个 '0' 表示 JPG,一个 '1' 表示带有 alpha 的 PNG,一个 '0' 表示没有 alpha 的 32 位。基本上,完全预期的结果。所以,即使这是一个 10 个月大的问题/答案,我认为值得增加 2 美分。
    【解决方案2】:
    【解决方案3】:

    这是怎么回事?

    substr((new Imagick($FILE))->identifyImage()['type'], 0, -5) == 'Alpha'
    

    查看documentation of identifyImage。您会注意到缺少函数输出的文档。它只是一个解析版本的

    identify -verbose $FILE (from the imagick package)
    

    其中type 标识图像的类型(比较source)。 您可以看到imagick 从定义为here 的某个MagickTypeOptions 数组中返回值。这个数组包含一个 -Alpha-Matte 版本,如果它的调色板包含 alpha 的话。

    理论上,您可以在不使用此类调色板的情况下保存图像,但在这种情况下,每个体面的程序都应该切换到非 alpha 版本。但误报是可能的,但应该很少见。

    我也不检查 -Matte 图像类型,因为在数组中的定义方式是,对于每个图像类型常量,都有两个具有不同名称的条目(-Alpha -Matte),但是当 -Alpha 先出现时,将为该图像类型返回此名称。

    【讨论】:

    • 您能否添加一些解释,例如文档链接?
    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2018-12-21
    • 2018-03-30
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2011-06-25
    • 2011-04-02
    相关资源
    最近更新 更多