在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-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大小)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值