python使用PIL缩放网络图片并保存的方法
来源:易贤网 阅读:2604 次 日期:2015-04-28 11:42:43
温馨提示:易贤网小编为您整理了“python使用PIL缩放网络图片并保存的方法”,方便广大网友查阅!

python使用PIL缩放网络图片并保存的方法

本文实例讲述了python使用PIL缩放网络图片并保存的方法。分享给大家供大家参考。具体实现方法如下:

''' tk_image_view_url_io_resize.py

display an image from a URL using Tkinter, PIL and data_stream

also resize the web image to fit a certain size display widget

retaining its aspect ratio

Pil facilitates resizing and allows file formats other then gif

tested with Python27 and Python33 by vegaseat 18mar2013

'''

import io

from PIL import Image, ImageTk

try:

# Python2

import Tkinter as tk

from urllib2 import urlopen

except ImportError:

# Python3

import tkinter as tk

from urllib.request import urlopen

def resize(w, h, w_box, h_box, pil_image):

'''

resize a pil_image object so it will fit into

a box of size w_box times h_box, but retain aspect ratio

'''

f1 = 1.0*w_box/w # 1.0 forces float division in Python2

f2 = 1.0*h_box/h

factor = min([f1, f2])

#print(f1, f2, factor) # test

# use best down-sizing filter

width = int(w*factor)

height = int(h*factor)

return pil_image.resize((width, height), Image.ANTIALIAS)

root = tk.Tk()

# size of image display box you want

w_box = 400

h_box = 350

# find yourself a picture on an internet web page you like

# (right click on the picture, under properties copy the address)

# a larger (1600 x 1200) picture from the internet

# url name is long, so split it

url1 = ""

url2 = "petunia-flower.jpg"

url = url1 + url2

image_bytes = urlopen(url).read()

# internal data file

data_stream = io.BytesIO(image_bytes)

# open as a PIL image object

pil_image = Image.open(data_stream)

# get the size of the image

w, h = pil_image.size

# resize the image so it retains its aspect ration

# but fits into the specified display box

pil_image_resized = resize(w, h, w_box, h_box, pil_image)

# optionally show resized image info ...

# get the size of the resized image

wr, hr = pil_image_resized.size

# split off image file name

fname = url.split('/')[-1]

sf = "resized {} ({}x{})".format(fname, wr, hr)

root.title(sf)

# convert PIL image object to Tkinter PhotoImage object

tk_image = ImageTk.PhotoImage(pil_image_resized)

# put the image on a widget the size of the specified display box

label = tk.Label(root, image=tk_image, width=w_box, height=h_box)

label.pack(padx=5, pady=5)

root.mainloop()

希望本文所述对大家的Python程序设计有所帮助。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 新媒体/短视频平台 | 手机站点

版权所有:易贤网