SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签107

  • 分类32

  • 归档268

  • 关于

  • lab

  • 搜索

基于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)
-------- 本文结束 感谢阅读 --------
相关文章
  • Transista for iPadOS
  • 2020 CCF BDCI——企业非法集资风险预测
  • 基于Pythonista和百度API的图片文本识别翻译脚本
  • 中医药天池大数据竞赛--中药说明书实体识别挑战
  • Hexo:将大尺寸图片等比列压缩到896像素的宽度
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
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学习笔记
Procreate画作:蜂鸟
SiriYang

SiriYang

大数据研究生
268 日志
31 分类
82 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 打赏记录
  • 作品商铺

蜀ICP备19008337号 © 2019 – 2022 SiriYang | 1.5m | 22:01
0%