SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档320

  • 关于

  • 搜索

基于python的图片拼接脚本

发表于 2021-12-29 更新于 2022-02-14 分类于 计算机 , 技术 , Python 阅读次数: Valine:
本文字数: 3.9k 阅读时长 ≈ 4 分钟

  最近想把实验截图拼接一下,奈何Mac平台上没有找到趁手的拼图工具,那不如就自己写一个吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author:siriyang
@file: concatImg.py
@time: 2021/12/29 10:37
"""

import os
from PIL import Image
import argparse

def 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游戏记录
  • 个人数据中心:数据备份模块
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: 基于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 许可协议。转载请注明出处!
Python PIL
Git学习笔记
论文翻译:ARNOR: Attention Regularization based Noise Reduction for Distant Supervision Relation Classification
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
320 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%