首页 > 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小。

在Ubuntu 16.04.5 LTS上利用python 2.7版本的pillow库拼接近千张图片实录

我尝试了市面上所有的压缩软件,发现处理时间冗长且压缩效果较差。下面是采用python的PIL中的Image模块,十几行代码就实现,几分钟就搞定了。感觉python的图像处理功能还是非常强大的,以前小看了它。

压缩之前的图片和压缩之后的图片对比:

压缩前 103327013字节,分辨率9600*5616,

压缩后 5274988字节,分辨率1920*1123,

压缩比大约是20:1

代码

#!/usr/bin/env python
#encoding: utf-8
#description: 压缩指定图片到指定尺寸(1080P),实测比较靠谱
#date: 2018-12-19from PIL import Image
import os#输入参数说明:
#src_dir: 源图片所在目录
#dst_dir: 输出图片所在目录
#fn: 待处理的图片文件名
def resize_image(src_dir, dst_dir, fn):filename = os.path.join(src_dir, os.path.basename(fn))print(filename)with Image.open(filename) as img:width, height = img.sizenew_width = 1920 #1280new_height = int(new_width * height * 1.0 / width)#调整图片到新的尺寸(1080p)#强调是PIL带ANTIALIAS滤镜缩放效果resized_img = img.resize((new_width, new_height), Image.ANTIALIAS)out_fn = filename.replace(src_dir, dst_dir)#将调整后的文件存放到指定目录下面resized_img.save(out_fn)if __name__ == '__main__':source_dir = '/home/taoyx/program_develop/python_dev/img_joint/'target_dir = '/home/taoyx/program_develop/python_dev/img_processing/'#fname = 'poster_all_500*720.png'fname = 'poster_all_300*432.png'                                                                                                                                     resize_image(source_dir, target_dir, fname)

效果图

执行下面的命令,得到我们想要的效果

python img_resize.py

(注意:因为这里图片上传大小不得超过5MB,这里的样例图片是压缩后720P大小的图片,2.5MB大小)

 

更多相关: