700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 利用Python实现自动批量图片格式转换

利用Python实现自动批量图片格式转换

时间:2024-03-03 09:49:03

相关推荐

利用Python实现自动批量图片格式转换

文章目录

利用Python实现自动批量图片格式转换0.背景1.简单思路2.进一步改进3.最终版本4.总结

利用Python实现自动批量图片格式转换

0.背景

在一个漫画网站下载了一些图片,但下载下来之后发现是webp格式,不能直接查看,于是决定将这些图片全部转为JPG等便于查看的格式,但是无论是网上的一些在线转换网站还是一些软件,要么不好使,要么要钱。于是决定利用Python写一个脚本,来实现这一功能。

1.简单思路

经过查询资料,我们得知主要需要用PIL这个对图片进行操作,即打开并识别webp格式的图片,并保存为JPG格式即可。

那么我们即可获得最初版本的代码:

from PIL import Imagefor 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 Imageimport refor 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 Imageimport osfiles = 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 Imageimport osfiles = 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的语法。记录一下,希望对自己未来和读者有所帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。