简要咨询咨询QQ网站导航网站搜索手机站点联系我们设为首页加入收藏 

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

来源:易贤网   阅读:2484 次  日期: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技术专栏

更多信息请查看网络编程
点此处就本文及相关问题在本站进行非正式的简要咨询(便捷快速)】     【点此处查询各地各类考试咨询QQ号码及交流群
上一篇:python使用Tkinter显示网络图片的方法
下一篇:python使用PyGame绘制图像并保存为图片文件的方法
易贤网手机网站地址:python使用PIL缩放网络图片并保存的方法
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!