我有很多不同形状和大小的图像,我想以像素数小于最大值的方式缩放它们。我还想保持原始图像的纵横比。我想出了这个:
from PIL import Image
img = Image.open("example.jpg")
max_pix = 65536
r = img.size[0] / img.size[1]
if r > 1:
r **= -1 # because I don't know if the height is bigger or the width
n = int(sqrt(max_pix/r))
img.thumbnail((n, n))
img.save("example.jpg")
r
最多为1,因此像素数(n*n(将等于max_pix
。否则它会比这个小
有更好的方法吗?我会做很多次,所以我在寻找最有效的方法。
如果您对算法的行为感到满意,我对Python的这三行或四行的效率表示怀疑。尽管用Python做数学运算很慢,但无论如何,它至少会比缩放64K+像素快一个数量级(或者可能更快(。
如果你正在寻找减速带,你可以检查是否有比Pillow更快的替代品,比如Pillow SIMD,并根据你的用例对它们进行基准测试。