在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大小)
?
總結
以上是生活随笔為你收集整理的在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 16.04.5 LTS上
- 下一篇: 在Ubuntu 16.04.5 LTS上