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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tao_627/article/details/85195065

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

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

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

压缩之前的图片和压缩之后的图片对比, 压缩比大约是50: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

猜你喜欢

转载自blog.csdn.net/tao_627/article/details/85195065