在Ubuntu 16.04.5 LTS上利用python 2.7中的PIL模块智能等比例压缩过大的图片集实操
生活随笔
收集整理的這篇文章主要介紹了
在Ubuntu 16.04.5 LTS上利用python 2.7中的PIL模块智能等比例压缩过大的图片集实操
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求
有時候自媒體創作寫稿時難免遇到大規模壓縮某個文件夾內的圖片的情況,通常我們可以使用一些批量壓縮的工具來處理,但我覺得,這是小白的做法,對于我們這些經驗豐富的老司機來說,使用代碼來處理,將是一件高效而且高逼格的事情。使用PIL中的Image模塊,就能很快地完成這項工作。
準備
我的電腦圖片文件夾中有一個壁紙文件夾"win8壁紙",都是分辨率超過1080P的大圖,我將使用python代碼將它們中超過1MB的圖片批量等比例壓縮一下
代碼
#!/usr/bin/env python
#encoding: utf-8
#description: 壓縮指定目錄下面的圖片到指定尺寸(1080P),實測比較靠譜
#date: 2018-12-19from PIL import Image
from glob import glob
import os
import math#輸入參數說明:
#src_dir: 源圖片所在目錄
#dst_dir: 輸出圖片所在目錄
#fn: 待處理的圖片文件名
#thrd: 圖片字節大小的閾值,超過就會等比例縮放處理
def resize_image(src_dir, dst_dir, fn, thrd):filename = os.path.join(src_dir, os.path.basename(fn))with Image.open(filename) as img:#獲取圖片高度和寬度width, height = img.sizeif width >= height:new_width = int(math.sqrt(thrd/2))new_height = int(new_width * height * 1.0 / width)else:new_height = int(math.sqrt(thrd/2))new_width = int(new_height * width * 1.0 / height)#調整圖片到新的尺寸(兼容各種尺寸大小)#強調是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)def resize_images(src_dir, dst_dir, thrd):filenames = glob('{}/*'.format(src_dir))if not os.path.exists(dst_dir):os.makedirs(dst_dir)for filename in filenames:#獲取圖片大小filesize = os.path.getsize(filename)print('filename:%s, size:%d' %(filename, filesize))if filesize >= threshold:resize_image(src_dir, dst_dir, filename, thrd) if __name__ == '__main__':source_dir = '/home/taoyx/圖片/win8壁紙/'target_dir = '/home/taoyx/圖片/img_test/'threshold = 1*1024*1024resize_images(source_dir, target_dir, threshold)
效果
執行上述腳本
python?imgs_resize.py
得到如下效果
總結
以上是生活随笔為你收集整理的在Ubuntu 16.04.5 LTS上利用python 2.7中的PIL模块智能等比例压缩过大的图片集实操的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 16.04.5 LTS上
- 下一篇: 在Ubuntu 14.04.5 LTS上