python使用PIL缩放网络图片并保存的方法
来源: 阅读:2251 次 日期: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技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map