写博客的时候发现这样一个问题:自己在 Mac 上截的图都是高清的 PNG 格式图片,最小的也超过 1MB。直接放在博客里,既占用服务器存储空间,又导致博客加载出来很慢,体验不好。而且写博客时上传也慢。而 JPG 格式的图片,虽然比起 PNG 色彩会有点失真,也没有透明效果,但清晰度还可以,而且大小小了几个数量级。所以打算以后发博都插入 JPG 格式的图片。为了提高效率,自己用 Python 写了一个批量将任意格式图片(Pillow 支持的格式)转成 JPG 格式的图片。
2、项目设计代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 7 22:39:34 2020
@author: Mekakuactor
"""
from PIL import Image
import os
def IsValidImage(img_path):
"""
判断文件是否为有效(完整)的图片
:param img_path:图片路径
:return:True:有效 False:无效
"""
bValid = True
try:
Image.open(img_path).verify()
except:
bValid = False
return bValid
def transimg(path):
"""
转换图片格式
:param img_path:图片路径
:return: True:成功 False:失败
"""
for filename in os.listdir(path):
img_path = path + '/' + filename
if IsValidImage(img_path):
try:
str = img_path.rsplit(".")
if str[-1] == 'jpg' or str[-1] == 'jpeg' or str[-1] == 'JPG' or str[-1] == 'JPEG':
pass
else:
str = img_path.rsplit(".", 1)
output_img_path = str[0] + ".jpg"
print(output_img_path)
im = Image.open(img_path)
rgb_im = im.convert('RGB')
rgb_im.save(output_img_path)
except:
print("error1:", img_path)
else:
print("error2:", img_path)
if __name__ == '__main__':
path = 'work'
print(transimg(path))
工作文件夹按如下设置,要转换图片放在 “work” 文件夹中:
运行 “toJPG.py” 即可,程序会自动跳过所有已经是 JPG 或 JEPG 格式的文件和非图片的文件。
拿出一张转换前和转换后的图片做对比,发现仅仅是图像色彩有些失真,但清晰度丝毫未影响,很适合作为博客展示图片(为了更好突出效果,这张展示图片未做格式转换)。再看看它们的大小,原来为 6.8MB 的 PNG 图片,转成了 263 KB 的 JPG 图片,足足缩小了30倍。可见这种转换性价比极高。
顺便一提,以上博客图片中除了倒数第二张为了展示转换效果而保持 PNG 格式外,其他图片均是由该工具转换成的 JPG 格式。可见该工具非常实用。
3、未来展望
在本地每次写博客都得转换实在过于麻烦,将来找个时间研究一下 Django 的 admin 的富文本编辑器,直接在上传图片时进行自动转换,就能省很多事。
Happy!
花見に行こう
原创文章 7获赞 3访问量 259
关注
私信
展开阅读全文
作者:花見に行こう