【问题标题】:How to tell if image is PNG24 or PNG8 and the number of bits and channels?如何判断图像是 PNG24 还是 PNG8 以及位数和通道数?
【发布时间】:2011-05-04 23:42:04
【问题描述】:

我正在尝试使用 getimagesize 或 Imagick 区分 PNG-8 和 PNG-24 图像,但我不太知道如何做到这一点。

getimagesize 不会返回我的 PNG 的频道,而是显示 mimetype。它适用于其他图像并显示正确的值,但对于 PNG,它什么也不显示。

编辑:我的环境中没有安装 Imagick,但 gdlib 是...

谁能帮帮我?

您好,
汤姆

编辑2: 这样可以吗?

    //create png for tests
    $testPng = imagecreatefrompng( $file );
    //test how many colors are used
    $meta .= 'colors: ' . imagecolorstotal( $testPng );
    $meta .= ' truecolor: ' . imageistruecolor( $testPng );
    //destroy the test image
    imagedestroy( $testPng );

如果 truecolor 为 false 或未设置,它是 png24 吗?

【问题讨论】:

  • 你可以使用 ImageMagick 吗?

标签: php png gdlib png-24 png-8


【解决方案1】:

【讨论】:

  • 嘿,您的信息很有价值,但它并不能解决我的问题,因为文件中没有元数据可以告诉我它是 png-8 还是 png-24。我只得到“软件:ImageReady”,因为它们是用 Photoshop 制作的。
【解决方案2】:

getimagesize() 似乎可以解决问题:

bits 是每种颜色的位数。

甚至不需要 GD。

【讨论】:

  • 是的,我知道,但 getimagesize() 确实为 png-8 和 png-24 返回 8... :(
  • @shapeshift 很奇怪。 png-24 显示多少个频道?
  • @Pekka:恐怕,但它没有显示任何 png 通道,但应该有 3 个,因为它是 rgb。另一方面,getimagesize() 似乎显示了我的其他图像(如 jpg 或 gifs)的正确值(这可能与文档所述完全不正确)...
  • ...也许我可以检查它是否是真彩色,但我想知道为什么它不 imagecolorstotal() 不会为 png-24 返回任何颜色,因为它确实为 png-8 返回 256 。 .. 呸!
  • @shapeshifta 真的很奇怪! 应该提供这些信息。这听起来像一个错误。回复imagecolorstotal(),当你在图像上这样做时,已经为时已晚:它已被导入 GD 的色彩空间,每通道始终为 8 位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2014-05-07
  • 2012-03-16
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多