在没有 GD 的情况下在 PHP 中加载 PNG 并读取像素?
我需要从真彩色 PNG 文件(最好是 PHP)中读取准确的未改变的像素数据(ARGB)。
不幸的是,PHP 中的 GD 库混淆了 alpha 通道(将其从 8 位减少到 7 位),使其无法使用。
我目前假设我的选择是:
实现我自己的原始 PNG 阅读器来提取必要的数据。- 使用一些不太破坏的语言/库,并从 PHP 作为 shell 进程或 CGI 调用它。
不过,我有兴趣听到任何其他想法,或者对一种方式的建议而不是另一种方式的建议...
编辑:我认为#1 已经过时了。 我尝试将 IDAT 数据流传递给 gzinflate(),但它只是给了我一个数据错误。 (在 PHP 之外使用完全相同的数据执行完全相同的操作会产生预期的结果。)
I have a need to read in the exact unaltered pixel data (ARGB) from a truecolour PNG file, preferably from PHP.
Unfortunately the GD library in PHP messes with the alpha channel (reducing it from 8-bit to 7-bit), making it unusable.
I'm currently assuming that my options are either:
Implement my own raw PNG reader to extract the necessary data.- Use some less-broken language/library and call it from the PHP as a shell process or CGI.
I'd be interested to hear any other ideas, though, or recommendations for one way over the other...
Edit: I think #1 is out. I've tried passing the IDAT data stream to gzinflate(), but it just gives me a data error. (Doing the exact same thing, with the exact same data, outside of PHP produces the expected result.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ImageMagick 怎么样?
How about ImageMagick?
您可以使用 netpbm 的 pngtopnm 函数将 PNG 轻松转换为解析 PNM。 这是一个有点幼稚的 php 脚本,应该可以帮助您获得所需的内容:
You can use the pngtopnm function of netpbm to convert the PNG to an easily parsed PNM. Here is a somewhat naive php script that should help you get what you need: