python - 如何使用 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。我意识到我的代码非常基础,但我主要是在寻找如何解决这个问题的方向/灵感。提前致谢!
解决方案
你可以使用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=True
和quality=some_number
. 请参阅此线程:如何使用 PIL 减小图像文件大小。
参考
推荐阅读
- intellij-idea - IntelliJ:如何配置已经在版本控制下的字典?
- react-native - React Native:如何从子组件更改父组件的状态并重新渲染父组件?
- angular - 如何在角度 4 中验证日期
- java - 使用正确的数据值自动创建新的 Java 对象
- time - Fiware Cosmos OAuth2 Token 时间增加
- highcharts - Highchart:Flags 在设置极端时出现缺货图表
- excel - 在较长期间内找到较短的天数进行计算
- android - 为什么在 Constraintlayout 中为视图提供偏差约束会影响调整动画大小?
- android - 如何在蓝牙 POS 打印机中打印右对齐的文本?
- swagger - $ref 响应示例