用纯Python快速读取PNG像素的Alpha值?

1 投票
2 回答
988 浏览
提问于 2025-04-15 15:59

我遇到了一个问题,64位的Python环境不太喜欢PIL这个库。在我尝试更多方法之前,比如使用ImageMagick这样的编译过的图像编辑器来读取像素,我希望这里的朋友们能想到一个纯Python的解决方案,速度能和那些编译过的工具相当。

我知道编译过的工具通常会快很多,但我希望因为我“只是”想读取一组像素的透明度,也许可以想出一个足够快的纯Python解决方案。有没有人有什么好主意呢?

不过,我试过PyPNG,那个实在太慢了,所以我并不指望有什么神奇的解决方案。尽管如此,我还是想问问。

谢谢大家的回复!

顺便提一下,我要读取的图像平均大小在512*512到2048*2048之间,我会读取从一个到所有像素的透明度(虽然会乘以几百万次,但这些值可以存储,所以不会重复读取)。

2 个回答

0

当你说PyPNG太慢的时候,具体慢到什么程度呢?换句话说,什么样的速度才算快呢?PyPNG并没有做什么特别愚蠢的事情让自己变慢,但它是用Python写的。

确保你在逐行读取图像时使用read(),并且要用row[3::4]来提取透明度通道。用这种切片方式提取透明度通道并不会比读取整个图像慢。

我在PyPNG的文档中添加了一些关于它速度的说明

2

从PNG图片中提取数据需要先把数据解包,然后再解压缩。这些过程在Python中可能会比较慢,不太适合你的应用。一个可行的办法是使用PyPNG这个库,然后把里面你不需要的部分去掉。例如,它可能会把从PNG读取的所有数据都存储起来,而你看到的某些慢速可能是因为内存分配的问题。

撰写回答