gpt4 book ai didi

php - 如何检测调色板 PNG 文件?

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:27 25 4
gpt4 key购买 nike

我想要一个在呈现如下所示的 PNG 文件时返回 true 的函数:

enter image description here

false 当呈现“自然”PNG(例如照片)或除 PNG 之外的任何东西(只是一系列颜色的转储)时,就像这个问题中提出的那样。

But what have you tried?

我什么也没尝试。我有一个或两个想法,例如随机采样水平和垂直的像素条并寻找完美的线性色度变化,但我在这里问是因为我想让 HiveMind 参与以获得更好的洞察力,并且因为我知道大多数问题都有一个 非常简单解决方案。

我更喜欢 JavaScript 的解决方案(考虑使用 ImageMagick 的 NodeJS)或 PHP(使用 Imagick)。也就是说,只要算法可靠,任何语言都可以。

提前谢谢大家

最佳答案

只需查看文件中的“color_type”字节即可。如果是 3,则 PNG 被调色,否则不是。 color_type 字节是字节 25(在从字节 0 开始的 8 字节签名、4 字节长度、4 字节“IHDR” block 名称、4 字节宽度、4 字节高度和 1 字节位深度之后)。请参阅 www.w3.org/TR/REC-png 上的 PNG 规范

正如 @leonbloy 评论的那样,你的示例 PNG 没有调色。这是颜色类型2并且有超过 256 种颜色。

如果您确实想区分“自然”图像(例如照片)和图形艺术,而不是 PNG 颜色类型,您可以检查压缩比(未压缩与压缩的比率;未压缩的宽度*高度*pixel_size,压缩后的文件的大小是您正在检查的文件的大小)。自然图像的压缩效果不如 PNG 好。要从此计算中消除元数据,请使用 IDAT 总大小而不是文件大小。

或者,只需将图像转换为 PNG 和 JPEG。如果生成的 PNG 比 JPEG 大,这是很自然的。如果 PNG 比 JPEG 小,则它是图形艺术。使用您的示例图像,使用 ImageMagick,

convert 1T5aQ.png png:- | wc -c
59872
convert 1T5aQ.png jpg:- | wc -c
703739

PNG 的大小不到 JPEG 的 1/10,因此它是图形艺术。

关于php - 如何检测调色板 PNG 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com