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


Posted in Python onApril 24, 2015

本文实例讲述了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 = "http://freeflowerpictures.net/image/flowers/petunia/"
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程序设计有所帮助。

Python 相关文章推荐
用Python进行基础的函数式编程的教程
Mar 31 Python
Python3.2中的字符串函数学习总结
Apr 23 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
python pandas dataframe 按列或者按行合并的方法
Apr 12 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Python几种常见算法汇总
Jun 02 Python
Python基于Opencv识别两张相似图片
Apr 25 Python
python使用Tkinter显示网络图片的方法
Apr 24 #Python
Python中最常用的操作列表的几种方法归纳
Apr 24 #Python
在Python中使用lambda高效操作列表的教程
Apr 24 #Python
使用Python的判断语句模拟三目运算
Apr 24 #Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 #Python
整理Python最基本的操作字典的方法
Apr 24 #Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 #Python
You might like
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
PHP 采集获取指定网址的内容
2010/01/05 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python 快速排序代码
2009/11/23 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
Python合并多个Excel数据的方法
2018/07/16 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python面向对象封装操作案例详解
2019/12/31 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
秋游活动策划方案
2014/02/16 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis