首页 > 解决方案 > 如何使用 python 调整图像的大小和形状?

问题描述

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

我已经尝试过“优化图像”包,但我无法得到我想要的结果,因为我不够具体。我也尝试使用 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。我意识到我的代码非常基础,但我主要是在寻找如何解决这个问题的方向/灵感。提前致谢!

标签: pythonimageimage-processingimage-resizingrescale

解决方案


你可以使用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. 请参阅此线程:如何使用 PIL 减小图像文件大小

参考

HowTo:使用skimage库重新缩放和调整大小


推荐阅读