缩放具有最大像素数限制的图像
Scale images with a maximum limit for their number of pixels
我有很多不同形状和大小的图像,我想以一种方式缩放它们,使它们的像素数小于最大值。我还想保留原始图像的纵横比。我想到了这个:
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,并针对您的用例对它们进行基准测试。
我有很多不同形状和大小的图像,我想以一种方式缩放它们,使它们的像素数小于最大值。我还想保留原始图像的纵横比。我想到了这个:
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,并针对您的用例对它们进行基准测试。