Image.resize()和Image.thumbnail()的區別
根據代碼和代碼註釋, 這兩個函數都是對圖片進行縮放, 二者的主要區別以下:python
thumbnail()函數內部調用了resize(), 能夠認爲thumbnail()是對resize()的一種封裝 app
Pillow中最重要的類就是Image,該類存在於同名的模塊中。能夠經過如下幾種方式實例化:從文件中讀取圖片,處理其餘圖片獲得,或者直接建立一個圖片。函數
使用Image模塊中的open函數打開一張圖片:tornado
>>> from PIL import Image >>> im = Image.open("lena.ppm")
若是打開成功,返回一個Image對象,能夠經過對象屬性檢查文件內容測試
>>> from __future__ import print_function >>> print(im.format, im.size, im.mode) PPM (512, 512) RGB
format屬性定義了圖像的格式,若是圖像不是從文件打開的,那麼該屬性值爲None;size屬性是一個tuple,表示圖像的寬和高(單位爲像素);mode屬性爲表示圖像的模式,經常使用的模式爲:L爲灰度圖,RGB爲真彩色,CMYK爲pre-press圖像。spa
若是文件不能打開,則拋出IOError異常。.net
當有一個Image對象時,能夠用Image類的各個方法進行處理和操做圖像,例如顯示圖片:code
>>> im.show()
若是有寬或長大於了, 測試出來的結果感受有點像成比例似的orm
x, y = self.size
if x > size[0]:
y = int(max(y * size[0] / x, 1))
x = int(size[0])
if y > size[1]:
x = int(max(x * size[1] / y, 1))
y = int(size[1])
size = x, y對象
#!/usr/bin/env python # -*- coding:utf-8 -*- # -----<縮略圖>----- # import os, datetime from PIL import Image def ThumbNailImg(infile): # 略縮圖路徑 outfile = os.path.splitext(infile)[0] + "_ThumbNail" + ".jpeg" im = Image.open(infile) size = (206, 206) im.thumbnail(size, Image.ANTIALIAS) im.save(outfile) return outfile
def make_thumb(path, size): """生成縮略圖""" img = Image.open(path) width, height = img.size # 裁剪圖片成正方形 if width > height: delta = (width - height) / 2 box = (delta, 0, width - delta, height) region = img.crop(box) elif height > width: delta = (height - width) / 2 box = (0, delta, width, height - delta) region = img.crop(box) else: region = img # 縮放 thumb = region.resize((900, 500), Image.ANTIALIAS) filename = os.path.splitext(path)[0] + "_ThumbNail" + ".gif" print(filename) # 保存 thumb.save(filename, quality=70)
參考連接: https://blog.csdn.net/jiaju_cao/article/details/16958185
def merge_thumb(files, output_file): """上下合併圖片""" imgs = [] width = 0 height = 0 # 計算總寬度和長度 print(files) for file in files: img = Image.open(file) if img.mode != 'RGB': img = img.convert('RGB') imgs.append(img) if img.size[0] > width: width = img.size[0] height += img.size[1] # 新建一個白色底的圖片 merge_img = Image.new('RGB', (width, height), 0xffffff) cur_height = 0 for img in imgs: # 把圖片粘貼上去 merge_img.paste(img, (0, cur_height)) cur_height += img.size[1] print(output_file) merge_img.save(output_file, quality=70) if __name__ == '__main__': # 上下合併圖片 THUMB_PATH = "/opt/code/my_code/tornado_uedit" # ['/opt/code/my_code/tornado_uedit/143351404554_ThumbNail.gif', '/opt/code/my_code/tornado_uedit/171047953516_ThumbNail.gif'] files = glob.glob(os.path.join(THUMB_PATH, '*_ThumbNail.gif')) merge_output = os.path.join(THUMB_PATH, 'thumbs.gif') merge_thumb(files, merge_output)
glob模塊,glob.glob(pathname),返回全部匹配的文件路徑列表