利用Python实现自动批量图片格式转换
文章目录
- 利用Python实现自动批量图片格式转换
- 0.背景
- 1.简单思路
- 2.进一步改进
- 3.最终版本
- 4.总结
利用Python实现自动批量图片格式转换
0.背景
在一个漫画网站下载了一些图片,但下载下来之后发现是webp格式,不能直接查看,于是决定将这些图片全部转为JPG等便于查看的格式,但是无论是网上的一些在线转换网站还是一些软件,要么不好使,要么要钱。于是决定利用Python写一个脚本,来实现这一功能。
1.简单思路
经过查询资料,我们得知主要需要用PIL这个对图片进行操作,即打开并识别webp格式的图片,并保存为JPG格式即可。
那么我们即可获得最初版本的代码:
from PIL import Image
for i in range(1,25):if (i<10):filename = f'0{i}.webp'else:filename = f'{i}.webp'im = Image.open(filename)if im.mode == "RGBA":im.load() # required for png.split()background = Image.new("RGB", im.size, (255, 255, 255))background.paste(im, mask=im.split()[3]) save_name = filename.replace('webp', 'jpg')im.save('{}'.format(save_name), 'JPEG')
其中自动打开文件依赖于文件名称十分规则,而面对名称比较奇怪的就需要做进一步的修正,具体如下:
from PIL import Image
import re
for i in range(24,52):if (i<10):filename = f'0{i}_0{i-1}.webp'elif (i==10):filename = f'10_09.webp'else:filename = f'{i}_{i-1}.webp'im = Image.open(filename)if im.mode == "RGBA":im.load() # required for png.split()background = Image.new("RGB", im.size, (255, 255, 255))background.paste(im, mask=im.split()[3]) save_name = filename.replace('webp', 'jpg')im.save('{}'.format(save_name), 'JPEG')
2.进一步改进
然后在后续的一些图片集中,出现了一些实在没有规律的名称,这是我突然意识到,我直接找所有文件的文件名,然后把不是图片的不管,是webp格式的转为JPG就好了。。。
于是就有了下面这个进阶版的脚本,可以无视图片名称,完成格式转换。
from PIL import Image
import os
files = os.listdir()
for file in files :filename = fileif(file=='.DS_Store'):continueif(file=='Untitled的副本 3.py'):continueim = Image.open(filename)if im.mode == "RGBA":im.load() # required for png.split()background = Image.new("RGB", im.size, (255, 255, 255))background.paste(im, mask=im.split()[3]) save_name = filename.replace('webp', 'png')im.save('{}'.format(save_name), 'png')
这一阶段遇到的bug:
1.部分图片无法保存为.jpg格式,一顿操作之后也没整好,最后保存为.png格式反而就没事了。
2.苹果系统自带.DS_Store文件,需要把这个排除掉。
3.最终版本
在上一个版本用了很久之后,我又遇到了一个新问题,那就是当图片集太多时一个一个处理仍需要很多时间。于是我思考,有没有什么好的方法,可以实现一键处理包含许多图片集文件夹的方法。
经过我缜密的思考,以及查询,最后获得了这个最终版本,我还顺便做了图片格式转换完成后删除原webp格式的图片
具体如下:
from PIL import Image
import os
files = os.listdir()
for file in files :if(file=='.DS_Store'):continueif(file=='Untitled的副本3.py'):continuenow = os.path.dirname(os.path.abspath(__file__))File = os.listdir(f'{now}/{file}')#print(File)for real_file in File:filename = real_fileif(real_file=='.DS_Store'):continueif(real_file=='Untitled的副本3.py'):continue#print(filename)im = Image.open(f'{now}/{file}/{filename}')if im.mode == "RGBA":im.load() # required for png.split()background = Image.new("RGB", im.size, (255, 255, 255))background.paste(im, mask=im.split()[3]) save_name = filename.replace('webp', 'png')#im.save('{}'.format(save_name), 'png')im.save(f'{now}/{file}/{save_name}', 'png')os.remove(f'{now}/{file}/{filename}')
这一阶段甚至没遇到什么bug,核心就是把变量名和地址搞清楚。打开路径,保存路径和删除路径不能搞错。
4.总结
首先是Python yyds!
这个自动化功能的实现主要是依赖于Python的os库和PIL库,他们的功能分别是处理系统文件和处理图片。在写这个之前AFK了Python好久,在不断改进的过程中也顺便复习了下Python的语法。记录一下,希望对自己未来和读者有所帮助。
利用Python实现自动批量图片格式转换相关推荐
- Python脚本—批量图片格式转换
使用Python的os.sys.PIL库完成批量图片格式转换 import os import sys from PIL import Imageinput_folder = r'D:\Toolkit ...
- 如何快速批量图片格式转换呢?
在日常工作中,我们会找到很多不同的图片格式,其中有些格式是不常用的,这些格式的兼容性较差,这样就经常需要把图片转换成常用格式,方便工作使用.有时需要批量处理图片格式转换.如果你想快速转换图像格式,可以 ...
- 【图片格式转换】python实现批量图片格式转换:emf、jpeg等转为png
[图片格式转换]python批量进行图片格式转换emf.jpeg等转为png 文章目录 [图片格式转换]python批量进行图片格式转换emf.jpeg等转为png 1. 代码 2. 效果 3. 总结 ...
- python gif_python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? 这个哥们通过爬气象网站的气象雷达图,生成一个gif的动态图.非常有趣且很实用,那咱也实现下. 我们先实现一个从GIF提取帧的代码 ...
- 怎样把图片转换成jpg格式?如何完成批量图片格式转换?
处理图片时,如果遇到图片格式转换(https://www.yasuotu.com/geshi)的时候该怎么办呢?尤其需要批量图片格式转化的时候,有没有比较方便又快捷的方法呢?推荐使用压缩图的图片处理工 ...
- python实现图片格式转换_python实现批量图片格式转换
本文实例为大家分享了python实现批量格式转换的具体代码,供大家参考,具体内容如下 深度学习过程中总是绕不开数据集的制作,有时候实际图片格式或大小可能与需要关心的图片信息不一致,那么我们只能手动做好 ...
- ENVI批量图片格式转换(IDL语言实现,raw转换为tif)
笔者最近需要将大量.raw后缀的多光谱图像转换为tif格式,然后再利用matlab对tif格式的图片进行处理. 然而,利用ENVI将.raw图片读入后,只能一张一张地将其另存为.tif格式. 笔者考虑 ...
- 利用Python自制一个批量图片水印添加器
前段时间写了个比较简单的批量水印添加的python实现方式,将某个文件夹下面的图片全部添加上水印. 今天正好有时间就做了一个UI应用的封装,这样不需要知道python直接下载exe的应用程序使用即可. ...
- 如何批量图片格式转换_批量图片转换器免费下载
有的时候需要做一些图片类型材料,需要将其他格式转换为JPG格式.下面我来讲解一种比较简单的方式. 首先下载软件 Leftso Image Compression 访问密码 9987 软件免费授权码申请 ...
最新文章
- 临床基因组学数据分析实战助力解析Case,快速发表文章
- OpenERP里面继承的用法
- DDD-EF-数据仓储
- ubuntu 在 rc.local 里添加了命令为什么无法执行
- 29-分数求模(逆元)
- python智能识别_Python人工智能识别文字内容(OCR)
- Controller 如果能保持单例,尽量使用单例
- 史上最全的并发编程学习
- 游戏设计与计算机,RPG游戏设计与实现-数学与计算机系.doc
- blocks bytes extents比较
- 让HTML播放器使用指定ua,chimee-mobile-player
- 星际争霸2 AI 开发探索与展望
- TIPTOP 智能仓库扫描系统解决方案
- 远程协作从“特殊”到“常态”,你可能需要的会议平板测评
- 渗透测试如何学习? (*╹▽╹*) 信息收集 ~ 其一
- 人工神经网络英文简称,人工神经网络 英文
- python项目案例开发pdf-python项目开发案例锦集 pdf|消费金融公司概念股
- GCC-PHAT算法
- 【ABAQUS仿真问题及解决方案整理】
- PCBA产业摩尔MES解决方案
热门文章
- 使用JMS进行消息传递
- PS改变图像尺寸和分辨率保存为tif图片颜色变成黑色-解决办法
- ValueError: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C
- 中外企业文化杂志中外企业文化杂志社中外企业文化编辑部2022年第5期目录
- 二进制如何转十进制,十进制如何转二进
- VIT attention实现(paddle2.2)
- [32期] 想学PHP来兄弟连是正确的选择 初识兄弟连三周
- 在iOS中进行Mapbox地图开发杂谈
- spring boot的启动与配置
- 【图像配准】SIFT图像配准【含Matlab源码 1007期】