如何使用 python 调整图像大小和形状?

How can I resize and reshape images with python?

我想处理一堆图像 (100+),我需要保持它们的纵横比(彼此之间不同),但将它们调整为最大 1000x1000 并且最大文件大小为100kb.

我已经尝试了 "optimize-images" 包,但我无法得到我想要的结果,因为我不够具体。我也尝试使用 imageio 调整大小,但大小问题仍然存在。我已经阅读了不同的来源和对类似问题的回复,但没有找到这样做的方法。

import imageio
import os

os.chdir("C:\Users\abc123\Pictures\Resize")

im = imageio.imread("a.jpg")

small = transform.resize(im, (1000,1000), mode="symmetric", preserve_range=True)

理想情况下,我会使用 walk() 方法找到文件夹中的所有图像,将它们的大小调整为 1000x1000,通过用空白填充最终大小和调整后的图像之间的差异来保持纵横比,最后应用 0.8 或 0.75 质量降低,直到文件大小 =< 100 kb。我意识到我的代码非常基础,但我主要是在寻找 directions/inspiration 如何解决这个问题。提前致谢!

您可以使用 skimage 库。

import numpy as np
from skimage import data, color
from skimage.transform import rescale, resize

grayimage = color.rgb2gray(data.astronaut())
image_rescaled = rescale(grayimage, 1.0 / 4.0, anti_aliasing=False, multichannel = False)
image_resized = resize(grayimage, (grayimage.shape[0] / 4, grayimage.shape[1] / 4),
                       anti_aliasing=True)
plt.imshow(np.hstack([image_rescaled, image_resized]))
plt.title('Rescaled'+ ''.join([" "]*30) +'Resized')
plt.show()

输出:

以减小的文件大小保存图像

为了在将图像保存到您的文件系统时控制文件大小,您可以将 PIL 库与 optimize=Truequality=some_number 一起使用。请参阅此线程:How to reduce the image file size using PIL

参考资料

HowTo: Rescale and Resize using skimage Library