使用最大像素数限制缩放图像

问题描述

我有很多不同形状和大小的图像,我想以像素数小于最大值的方式缩放它们。我还想保持原始图像的纵横比。我想出了这个:

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,并针对您的用例对它们进行基准测试。