hwd1069 发表于 2023-10-26 08:59 您好,图片锁定长宽比,修改像素大小,老师帮忙给一个能批量修改图片像素的分辨率的程序,谢谢email: 我在GitHub找了一下,修改图片的程序大多数指定长宽,不能锁定长宽比,并且是拿GO写的,不会GO语言,所以没尝试改别人的,自己写了一个: 如果楼主知道如何运行python代码可以直接运行;如果不知道请回复我,帮你打包成exe文件 程序只经过简单测试,可能会出现bug,如果有任何bug都可以找我帮你改 如果不放心请先备份修改前的图片(不过如果作死把修改前和修改后的地址写成同一个应该问题不大) 如果楼主不会用命令行,也可回帖我尝试教会楼主或者改成图形界面 [Python] 纯文本查看 复制代码 import argparse import os from PIL import Image def cli(): parser = argparse.ArgumentParser( prog="ImageResizer", description="批量修改图片长宽比") parser.add_argument("-S", "--source", type=str, required=True, help="需要转换的文件所在文件夹") parser.add_argument("-D", "--dest", type=str, required=True, help="转换结果保存文件夹; 请不要与源文件夹相同") parser.add_argument("-W", "--width", type=int, default=- 1, help="转换后图片的宽度(非必须)") parser.add_argument("-H", "--height", type=int, default=- 1, help="转换后图片的高度(非必须); 若指定长、宽中某一项,则另一项跟据原图长宽比自动计算\r\n\t; 若两项都为空,则不改变图片大小") parser.set_defaults(handle=ImageResizer) args = parser.parse_args() if hasattr(args, 'handle'): args.handle(args) else: parser.print_help() def ImageResizer(args): source = args.source dest = args.dest width = args.width height = args.height for (root, dirs, files) in os.walk(source): for file in files: file_name = os.path.join(root, file) image = None try: image = Image.open(file_name) except: continue (now_w, now_h) = image.size target_w = width target_h = height if (target_w == -1 and target_h == -1): target_h = now_h target_w = now_w elif (target_w == -1): target_w = now_w * target_h // now_h elif (target_h == -1): target_h = now_h * target_w // now_w new_size = (target_w, target_h) new_image = image.resize(new_size) new_image.save(os.path.join(dest, file)) print("done") if __name__ == '__main__': cli()
chanmao 发表于 2023-10-23 19:12 楼主能否详细描述一下要求,尤其是是否锁定长宽比这种? 我可以用Python帮楼主写一个,批量修改程序所在文 ... 能批量修改图片尺寸和图片名字吗 指定的尺寸名字