【问题标题】:Get specific channel depth with ImageMagick使用 ImageMagick 获取特定的通道深度
【发布时间】:2017-08-24 04:05:41
【问题描述】:

是否可以使用 ImageMagick 命令获取特定通道的位深度?

我可以使用 convert :rose -verbose info: 查看各个通道的深度,但我想知道是否有技巧只打印 alpha 深度。

我这样做的原因是因为我正在尝试编写一个脚本来确定图像是否存在:

  • 不支持透明度(如 JPEG)
  • 仅支持开/关透明度(如 GIF)
  • 支持 >1 位透明度(如 PNG)

我可以使用identify %[opaque] :rose 检查图像是否完全不透明,并且我想我可以通过检查 alpha 位深度是否大于 1 来检查透明度的类型

【问题讨论】:

    标签: image-processing imagemagick imagemagick-convert


    【解决方案1】:

    在Imagemagick中获取alpha通道的位深度,试试

    convert transparent_image -alpha extract -format "%z\n" info:
    

    convert transparent_image -alpha extract -format "%[depth]\n" info:
    

    http://www.imagemagick.org/script/escape.php

    例如:

    convert logo: -transparent white -alpha extract -format "%z" info:
    

    8

    但是,这实际上可能是二进制的,但被列为 8 位。

    因此,您可能需要查看直方图或唯一颜色,以了解存在多少实际颜色。

    convert logo: -transparent white -alpha extract -format "%[colors]\n" info:
    

    2

    【讨论】:

    • 恐怕这行不通。尽管当我运行详细命令时 GIF 清楚地表明“1 位”,但它为 JPEG、PNG 和 GIF 返回 8
    • AFAIK,GIF 只支持transparentnot-transparent,没有可用的透明度,例如75%,只有0%100%,所以你可能需要做一个特殊的检查 GIF。
    • %[colors] 在使用 IM v7.0.6-1 时给我一个错误,尽管文档说它是在 v7.0.3 中引入的。但是,根据您的上一个示例,%k 可以代替并正确显示具有透明度的 GIF 2(透明度)。
    【解决方案2】:

    通过一些痛苦的搜索和反复试验,我可能已经弄清楚了。如果我跑

    convert rose: -channel A -separate -format %[fx:z] info:-

    我得到了 alpha 通道中的位数。对于 PNG,它似乎打印 8,对于 JPEG 和 GIF,它打印 1。

    【讨论】:

    • :rose is not proper IM syntax. It should be rose: 我的命令应该有效。但可能是您的 IM 版本太旧。你从来没有提到什么版本和平台。提供这些信息总是一个好主意,因为语法可能会有所不同,并且会一直添加新功能。
    • @fmw42 我的错,我总是切换: 的位置。我正在使用 ImageMagick 7.0.6-7 Q16,这是 64 位 Windows 上安装了旧版实用程序的动态 dll 选项。
    • 玫瑰:图像完全不透明(和 PNM 格式),但是 8/1 位,所以它应该返回 8 作为深度。在我的带有 IM 6.9.9.9 的 Mac OS X Sierra 上,我得到 8 用于转换玫瑰:-format "%z" 信息:以及 8 用于转换玫瑰:-channel a -separate -format "%z" 信息:。同样对于 IM 7.0.6.9,我得到 8 的魔法玫瑰:-format "%z" 信息:和 8 的魔法玫瑰:-channel a -separate -format "%z" 信息:所以我不知道你为什么会得到1.要得到1,我认为你需要检查alpha通道中的颜色数量。
    • P.S. Imagemagick 7 使用语法 magick 代替 convert。使用 convert 您可能会获得传统的 Imagemagick 6 处理。我也犯了一个错误。玫瑰图像是 PPM,而不是 PNM。
    • 如果 %[colors] 在 IM 7 中不起作用,那么在 unix 上,您可以使用 magick rose: -channel a -separate +channel -unique-colors txt: | tail -n +2 | wc -l。返回 1。
    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多