一、背景
私立的托儿所,每天会给小朋友门制作一页当天的画册,都是当天老师们给小朋友拍的照片,打印出来以后,贴上去。
大概是长着这样的:
230903225844.png
制作过程需要老师们手工去调整图片的大小以后再打印,有时候拖拉拽还可能会导致图片的比例发生变化,导致图片的小朋友人像变形。
二、看看我们能帮到老师做什么
我们可以做一个小工具,在老师们筛选好的图片的文件夹跑一次脚本就批量把所有的图片按照比例缩小。
三、解决办法
3.1 思路
1.遍历所有的JPG图片
2.取图片的长宽最小来等比例缩小图片到我们制定的大小(200* 200)
3.把缩小的图片的后缀改成PNG, 区分原图。
3.2 源代码
# -*- coding: utf-8 -*-
"""
@Author : Nick
@Time : 2023/9/03
@Comment : #003 批量调整图片的大小
"""
from PIL import Image
import glob
import os
def resize_image(img_name_path,max_width=1500,max_height=800):
"""
等比例缩小图片,并把jpg转为png格式
:param img_name_path 图片路径
:param max_width 缩小后的最大宽度
:param max_height 缩小后的最大高度
:return:
"""
#获取原始尺寸图片
image = Image.open(img_name_path)
width = image.width #获取图片原宽度
height = image.height #获取图片原高度
#宽度和高度有任意不符合我们给定的最大值,将缩小,否则直接转为png格式
if max_width <= width or max_height <= height:
#计算缩小比例
ratio = min(max_width/width,max_height/height)
#计算缩小后的大小
new_width = int(width * ratio)
new_height = int(height * ratio)
#使用PIL库中resize方法进行等比例缩小
resize_img = image.resize((new_width,new_height))
#保存更改之后的图片
resize_img.save(img_name_path.replace('.jpg','.png'))
else:
image.save(img_name_path.replace('.jpg', '.png'))
if __name__ == '__main__':
new_size_w = 200
new_size_h = 200
#folder_path = 'D:\Lab\Python100\#003_resize_img' #替换为你的文件夹路径
folder_path = os.path.dirname(os.path.abspath(__file__)) #py所在的文件夹
file_paths = glob.glob(folder_path + '/*.jpg') #获取文件夹下所有Excel文件的路径
for file_path in file_paths:
print(file_path)
resize_image(file_path,new_size_w,new_size_h)
最后,交付给老师们,让他们按照小朋友的名字整理好每天的照片以后,把这PY文件放到文件夹以后,双击运行一下就好了。