因为疫情需要经常提供行程码、健康码和核酸码,更麻烦的是需要把三张图拼接成一张长图,用PS(我就只会用PS)过于麻烦,为了方便就做了一个自动拼接图片的脚本,顺便提升一下自己对于Pillow的学习。

功能目标:把选定目标文件夹下的所有图片转化为预定格式(图片模式与其宽高),并最终以对应文件夹的名称输出新图片到指定位置。

pillow内没有直接拼合图片,就只能参考网上其他人的思路,先生成新图片(I)
因为是新手,所以代码过于冗余,等有空再简化修改吧

from PIL import Image
import os#获取文件夹下所有文件名
imageflie_list = os.listdir(r"文件夹路径")
print(imageflie_list)
#遍历各个图片,并统计图片个数,为新图片size(尺寸)确定作准备
count = 0
for imagefliename in imageflie_list:count = count + 1imagename = os.path.splitext(imagefliename) #分割获取图片名称与其后缀名,splitext返回一个元组image = Image.open("文件夹路径"+"\\"+imagename[0]+imagename[1]) #splitext返回一个元组,所以以[0]、[1]分别表示image.load()size = (1080, 2100)print(image.mode)image = image.resize(size) #将图片转化为统一尺寸image.convert("RGB").save("文件夹路径\\"+imagename[0]+".jpg")# 图片mode统一转为jpg,因为jpg的mode是RBG,png的mode是RBGA

处理图片的库选择了pillow,调用os以方便后面的遍历和获取文件名、文件后缀名操作。

在这一步中有一个小坑是"Image.open()"直接使用会出现“查找已关闭文件的错误”,在其后面加上"image.load()"解决了这个问题。

    image = Image.open("文件夹路径"+"\\"+imagename[0]+imagename[1])image.load()

之后是根据前面的遍历结果进行计数,统计有多少张图片,以此确定新图片的高(图片数*单张图片高),生成新图片,再将旧图片一一粘贴到新图片上,由此达到图片拼接的效果。

#输出计数结果并生成对应size图片
countend = int(count)
print(countend)
size = (1080, 2100)
new_image = Image.new('RGB', (size[0], countend * size[1]))#遍历粘贴,生成新图片
new_count = 0
for imagefliename1 in imageflie_list:imageendname = os.path.splitext(imagefliename1)end_image = Image.open("文件夹路径"+"\\"+imageendname[0]+imageendname[1])new_image.paste(end_image, (0, new_count * size[1])) #new_count * size[1]用于改变每张图片的粘贴位置,例如第一张图片粘贴在0,0,第二张图片就粘贴在0,2100,以此形成图片拼接的效果。new_image.save(r"文件夹路径\new.jpg", "JPEG")new_count = new_count + 1

写到最后时遇到一个问题,就是新生成图片粘贴无效,不论怎么粘贴都是黑的,其他的都正常。折磨了两个小时后,终于发现了原因:
原先的代码是:

 new_image.paste =(end_image, (0, new_count * size[1]))

而正确的代码是:

 new_image.paste(end_image, (0, new_count * size[1]))

失之毫厘谬以千里,以后遇到bug时一定要多多仔细看看自己的代码有没有出错。

最后附上完整的代码:

from PIL import Image
import os#获取文件夹下所有文件名
imageflie_list = os.listdir(r"文件夹路径")
print(imageflie_list)
#遍历各个图片,并统计图片个数,为新图片size(尺寸)确定作准备
count = 0
for imagefliename in imageflie_list:count = count + 1imagename = os.path.splitext(imagefliename) #分割获取图片名称与其后缀名,splitext返回一个元组image = Image.open("文件夹路径"+"\\"+imagename[0]+imagename[1]) #splitext返回一个元组,所以以[0]、[1]分别表示image.load()size = (1080, 2100)print(image.mode)image = image.resize(size) #将图片转化为统一尺寸image.convert("RGB").save("文件夹路径\\"+imagename[0]+".jpg")# 图片mode统一转为jpg,因为jpg的mode是RBG,png的mode是RBGA#输出计数结果并生成对应size图片
countend = int(count)
print(countend)
size = (1080, 2100)
new_image = Image.new('RGB', (size[0], countend * size[1]))#遍历粘贴,生成新图片
new_count = 0
for imagefliename1 in imageflie_list:imageendname = os.path.splitext(imagefliename1)end_image = Image.open("文件夹路径"+"\\"+imageendname[0]+imageendname[1])new_image.paste(end_image, (0, new_count * size[1])) #new_count * size[1]用于改变每张图片的粘贴位置,例如第一张图片粘贴在0,0,第二张图片就粘贴在0,2100,以此形成图片拼接的效果。new_image.save(r"文件夹路径\new.jpg", "JPEG")new_count = new_count + 1

python自动图片拼接——基于Pillow和os相关推荐

  1. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  2. 《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)

    基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册.用户登录.实时聊天,文件上传与下载) 用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用 目录 基于Python与T ...

  3. 情人节到了,用Python自动生成520照片墙吧~

    导语 情人节到了,用Python自动生成520照片墙可好,没有对象的自己看 相关文件 关注微信公众号 Python日志, 公众号内回复'照片墙'获取. 视频教学 视频教学:哔哩哔哩照片墙制作 开发工具 ...

  4. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS-III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  5. Python之并行--基于joblib

    Python之并行–基于joblib Python的并行远不如Matlab好用.比如Matlab里面并行就直接把for改成parfor就行(当然还要注意迭代时下标的格式),而Python查 一查并行, ...

  6. Python基本语法(基于3.x)

    Python基本语法(基于3.x) Python的两种运行模式: 命令行模式,运行python,然后在命令行中输入python命令 程序脚本, 在命令行中输入 ./hello.py运行 Python是 ...

  7. Python基础入门:常用的os操作

    Python自动的os库是和操作系统交互的库,常用的操作包括文件/目录操作,路径操作,环境变量操作和执行系统命令等. 文件/目录操作 获取当前目录(pwd): os.getcwd() 切换目录(cd) ...

  8. Python实训day10am【Python中的地址引用、os模块】

    Python实训-15天-博客汇总表 目录 1.Python中的地址引用 2.os模块(操作系统模块) 2.1.os案例1 2.2.os案例2 2.3.os案例3 2.4.os案例4 2.5.os案例 ...

  9. python 图像处理(从安装Pillow开始)

    python 图像处理(从安装Pillow开始) python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library)),最新版本是 1.1.7  可在http:// ...

  10. python自动拨号_Python自动连接ssh的方法

    作者:Sephiroth 字体: 类型:转载 这篇文章主要介绍了Python自动连接ssh的方法,实例分析了基于Python实现连接ssh的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲 ...

最新文章

  1. Problem 5 素数筛法+并查集
  2. 量子导航即将上路:实时更新,全局优化,不仅更快还能解决拥堵
  3. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第11章-大系统的分散控制
  4. 【Matlab】图添加箭头指示
  5. 雷达篇(八)合成孔径雷达工作模式
  6. fatal error LNK1561: 必须定义入口点问题的我是这样解决的
  7. iPhone 12发布前夜:富士康奖励万元招不到人,有工人国庆连轴转
  8. 实用UI设计需要学什么软件?
  9. shell脚本相关指令
  10. 2. 贯穿软件开发生命周期的测试
  11. 上完选修计算机绘图课心得,计算机绘图学习心得体会.doc
  12. 中国情报监视和侦察行业市场供需与战略研究报告
  13. SOCK_NONBLOCK,accept4 阻塞与非阻塞SOCKET
  14. 2022年11月10篇论文推荐
  15. 红帽linux竞赛,浅谈红帽linux挑战赛(三)
  16. 蓝桥杯嵌入式开发经验分享(1.嵌入式学习准备)
  17. uniapp接入微信客服聊天流程(企业微信)
  18. 写好标题 N倍提升你的IP
  19. Git撤销对远程仓库的push 或 Git撤销对远程仓库的commit提交
  20. 使用 markdown语法绘制流程图

热门文章

  1. Java集合--------16
  2. IDO-SBC3019-V1B:PX30 超强 CPU 搭载 Android/Linux 系统(Android8.1)
  3. python 转盘 圆形_python实现大转盘抽奖效果
  4. 2017年《What Hi-Fi?》杂志评选KEF成最大赢家
  5. LOGO特训营 第三节 首字母创意手法
  6. mac上手总结~瞎玩玩
  7. python获取所有上市公司的加权净资产收益率
  8. IEEE Transactions on Industrial Informatics(TII)投稿指导
  9. C语言输出一个19行实心菱形,C语言打印菱形
  10. 芭蕉树上第二十一根芭蕉-- matlab2017b安装的出现问题