基于python的图片拼接脚本 发表于 2021-12-29 更新于 2022-02-14 分类于 计算机 , 技术 , Python 阅读次数: Valine: 本文字数: 3.9k 阅读时长 ≈ 4 分钟 最近想把实验截图拼接一下,奈何Mac平台上没有找到趁手的拼图工具,那不如就自己写一个吧! 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143#!/usr/bin/env python# -*- coding:utf-8 -*-"""@author:siriyang@file: concatImg.py@time: 2021/12/29 10:37 """import osfrom PIL import Imageimport argparsedef ConcatImg(input_imgs, direction='v', scale='max', value=0, border=0, margin=0, bgcolor='white', output_img='./out.png'): colors={ "white":(255,255,255), "black":(0,0,0) } # 检查输入图片数量是否不少于2张 if(len(input_imgs)<2): print("需要至少两张图片!") return # 检查输入图片路径是否合法 for i in input_imgs: if not ( i.endswith(".jpg") or i.endswith(".png")): print(i+" 不是一张有效的图片!") return # 检查输出保存路径是否合法 if not ( output_img.endswith(".jpg") or output_img.endswith(".png")): print(output_img+" 不是一张有效的图片保存路径!") return # 读取所有图片,并记录尺寸最大最小值 img_list=[] max_w=0 min_w=-1 max_h=0 min_h=-1 for i in input_imgs: img=Image.open(i) img_list.append(img) if img.size[0] > max_w: max_w = img.size[0] if img.size[1] > max_h: max_h = img.size[1] if min_w==-1: min_w=img.size[0] elif img.size[0] < min_w: min_w=img.size[0] if min_h==-1: min_h=img.size[1] elif img.size[1] < min_h: min_h=img.size[1] res_w=0 res_h=0 img_resize_list=[] # 缩放图片 for img in img_list: if direction=='v': if(value>0): img=img.resize((value,int(value*img.size[1]/img.size[0]))) res_w=value elif scale=="max": img=img.resize((max_w,int(max_w*img.size[1]/img.size[0]))) res_w=max_w else: img=img.resize((min_w,int(min_w*img.size[1]/img.size[0]))) res_w=min_w res_h+=img.size[1] else: if(value>0): img=img.resize((int(value*img.size[0]/img.size[1]),value)) res_h=value elif scale=="max": img=img.resize((int(max_h*img.size[0]/img.size[1]),max_h)) res_h=max_h else: img=img.resize((int(min_h*img.size[0]/img.size[1]),min_h)) res_h=min_h res_w+=img.size[0] img_resize_list.append(img) # 加上边框宽度 res_w+=border*2 res_h+=border*2 # 加上间隔宽度 if direction=='v': res_h+=margin*(len(img_list)-1) else: res_w+=margin*(len(img_list)-1) res=Image.new('RGB', (res_w,res_h),colors[bgcolor]) # 拼合图片 offset=border for img in img_resize_list: if direction=='v': res.paste(img,(border,offset)) offset+=img.size[1] else: res.paste(img,(offset,border)) offset+=img.size[0] offset+=margin # 保存输出图片 res.save(output_img) print("拼接完成!结果保存在 "+output_img)if __name__ == "__main__": parser = argparse.ArgumentParser(description='图片拼接工具') parser.add_argument('imgs', nargs='+',help='要拼接的图片列表') # nargs='+' 读取至少一个参数 parser.add_argument('-d','--direction', choices=['v','h'],default='v',help='图片拼接方向') group = parser.add_mutually_exclusive_group() group.add_argument('-s', "--scale", choices=['max','min'],default='max',help='图片拼接的拉伸方案') group.add_argument('-v', "--value", type=int,default=0,help='图片拼接的拉伸数值') parser.add_argument('-b','--border', type=int,default=0,help='外边框宽度') parser.add_argument('-m','--margin', type=int,default=0,help='内间隔宽度') parser.add_argument('-c','--bgcolor', choices=['white','black'],default='white',help='背景填充颜色') parser.add_argument('-o', default='./out.png',help='输出图片路径(默认为 ./out.png)') args = parser.parse_args() ConcatImg(args.imgs,args.direction,args.scale,args.value,args.border,args.margin,args.bgcolor,args.o) -------- 本文结束 感谢阅读 -------- 相关文章 个人数据中心:使用腾讯云函数进行任务调度 个人数据中心:获取Switch游戏记录 个人数据中心:获取Steam游戏记录 个人数据中心:数据备份模块 个人数据中心:阅读记录模块开发 觉得文章写的不错的话,请我喝瓶怡宝吧!😀 打赏 微信支付 支付宝 本文标题: 基于python的图片拼接脚本 本文作者: SiriYang 创建时间: 2021年12月29日 - 19时12分 修改时间: 2022年02月14日 - 13时02分 本文链接: https://blog.siriyang.cn/posts/20211229191011id.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!