在前面的博文中,我将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-19
from 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.size
new_width = 1920 #1280
new_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大小)