首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python PIL 縮放網路圖片並保存:等比例縮放適應顯示區塊

     編輯:更多程式設計知識

下載網路圖片後,依指定顯示區塊寬高進行等比例縮放(保持長寬比),再顯示於 Tkinter 或存檔。核心演算法為計算縮放因子取寬高較小者。

縮放函式


def resize(w, h, w_box, h_box, pil_image):
    f1 = 1.0 * w_box / w
    f2 = 1.0 * h_box / h
    factor = min(f1, f2)
    width = int(w * factor)
    height = int(h * factor)
    return pil_image.resize((width, height), Image.ANTIALIAS)

完整流程


import io
from PIL import Image, ImageTk
try:
    import Tkinter as tk
    from urllib2 import urlopen
except ImportError:
    import tkinter as tk
    from urllib.request import urlopen

w_box, h_box = 400, 350
url = "https://freeflowerpictures.net/image/flowers/petunia/petunia-flower.jpg"

image_bytes = urlopen(url).read()
pil_image = Image.open(io.BytesIO(image_bytes))
pil_resized = resize(*pil_image.size, w_box, h_box, pil_image)

tk_image = ImageTk.PhotoImage(pil_resized)
root = tk.Tk()
root.title("resized {} ({}x{})".format(url.split('/')[-1], *pil_resized.size))
tk.Label(root, image=tk_image, width=w_box, height=h_box).pack(padx=5, pady=5)
root.mainloop()

應用場景

  • 縮圖產生器、圖庫預覽。
  • 自動適應視窗大小的圖片檢視器。
  • 批次處理遠端圖片統一尺寸存檔。

注意

  • Image.ANTIALIAS 為高品質下採樣濾鏡(Pillow 9.1.0+ 建議用 Image.Resampling.LANCZOS)。
  • 大圖下載佔用記憶體,生產環境建議分塊串流處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved