问题描述
我有很多不同形状和大小的图像,我想以像素数小于最大值的方式缩放它们。我还想保持原始图像的纵横比。我想出了这个:
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,并针对您的用例对它们进行基准测试。