【问题标题】:How can I resize and reshape images with python?如何使用 python 调整图像的大小和形状?
【发布时间】:2020-01-30 06:21:53
【问题描述】:

我想处理一堆图像(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,直到文件大小 =

【问题讨论】:

  • 您可以在stackoverflow.com/q/13407717/5987找到一半的答案
  • 也许这也会有所帮助:stackoverflow.com/a/3008966/5987 如果你将它与 resize() 结合使用。
  • 您无需编写任何代码,只需在终端中使用 ImageMagick 即可。在单独的目录中复制一些图像并尝试magick -resize 1000x1000 -define jpeg:extent=100KB *.jpg

标签: python image image-processing image-resizing rescale


【解决方案1】:

您可以使用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()

输出

以减小文件大小保存图像

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

参考文献

HowTo: Rescale and Resize using skimage Library

【讨论】:

  • 谢谢!我一直在尝试 skimage,但有没有办法用你知道的 skimage 将文件大小限制为 100Kb?
  • 您可以使用 PIL 库优化和应用质量值来保存已经缩放/调整大小的图像并将其保存在磁盘上。看到这个:stackoverflow.com/questions/10607468/…。如果您必须以一定大小保存文件,您可以编写一个 python 循环来检查保存图像的文件大小,如果图像大小大于您的限制,则它会尝试使用较低的质量值。
猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 2011-09-16
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2010-11-27
  • 2016-10-04
相关资源
最近更新 更多