gpt4 book ai didi

python - 图像大师 : Optimize my Python PNG transparency function

转载 作者:太空狗 更新时间:2023-10-30 01:30:34 25 4
gpt4 key购买 nike

我需要用 alpha 透明度替换 PNG 图像中的所有白色(左右)像素。

我在 AppEngine 中使用 Python,因此无法访问 PIL、imagemagick 等库。AppEngine 确实有一个图像库,但主要用于调整图像大小。

我找到了优秀的小 pyPNG module并设法实现了一个满足我需要的小功能:

make_transparent.py

主循环的伪代码类似于:

for each pixel:
if pixel looks "quite white":
set pixel values to transparent
otherwise:
keep existing pixel values

并且(假设 8 位值)“非常白”将是:

where each r,g,b value is greater than "240" 
AND each r,g,b value is within "20" of each other

这是我第一次以这种方式处理原始像素数据,虽然有效,但性能也非常差。似乎必须有一种更有效的方法来处理数据,而无需以这种方式遍历每个像素? (矩阵?)

我希望在处理这些事情方面有更多经验的人能够指出我在算法中的一些更明显的错误/改进。

谢谢!

最佳答案

这仍然会访问每个像素,但可能会更快:

new_pixels = []
for row in pixels:
new_row = array('B', row)
i = 0
while i < len(new_row):
r = new_row[i]
g = new_row[i + 1]
b = new_row[i + 2]
if r>threshold and g>threshold and b>threshold:
m = int((r+g+b)/3)
if nearly_eq(r,m,tolerance) and nearly_eq(g,m,tolerance) and nearly_eq(b,m,tolerance):
new_row[i + 3] = 0
i += 4
new_pixels.append(new_row)

它避免了 slicen 生成器,后者将为每个像素复制整行像素(每次少一个像素)。

它还通过直接复制输入行来预分配输出行,然后只写入发生变化的像素的alpha值。

甚至更快的方法是根本不分配一组新的像素,而只是直接在源图像中的像素上写入(假设您不需要源图像做任何其他事情)。

关于python - 图像大师 : Optimize my Python PNG transparency function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045377/

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