Http服务传输图片的Python实现
Http服务传输图片的Python实现
介绍
主要介绍Python实现的Http服务传输图片的2种方式:URL和字节流
以URL的方式传输图片
服务器端
基于tornado框架搭建简单的web服务, 提供post方法, 通过接收image_url字段获取图片的url,通过requests模块获取图片并进行后续的操作。图片的操作重点关注process()方法。
#!/usr/bin/python
# -*-coding=utf-8 -*-import sys
import traceback
from StringIO import StringIOimport requests
import tornado
import tornado.ioloop
import tornado.web
from tornado.escape import json_encode
from PIL import Imagereload(sys)
sys.setdefaultencoding('utf8')class Handler(tornado.web.RequestHandler):def post(self):result = {}image_url = self.get_argument("image_url", default="")print image_urlif not image_url:result["msg"] = "no image url"else:result["msg"] = self.process(image_url)self.write(json_encode(result))def process(self, image_url):"""根据image_url获取图片进行处理:param image_url: 图片url"""try:response = requests.get(image_url)if response.status_code == requests.codes.ok:obj = Image.open(StringIO(response.content))# TODO 根据obj进行相应的操作return "ok"else:return "get image failed."except Exception as e:print traceback.format_exc()return str(e)class ImageServer(object):def __init__(self, port):self.port = portdef process(self):app = tornado.web.Application([(r"/image?", Handler)], )app.listen(self.port)tornado.ioloop.IOLoop.current().start()if __name__ == "__main__":server_port = "6060"server = ImageServer(server_port)print "begin server"server.process()
客户端
向服务器端的HTTP服务发送POST请求, 请求字段定义image_url。
#!/usr/bin/python
# -*-coding=utf-8 -*-import json
import urllib
import urllib2def post(server_url, params):data = urllib.urlencode(params)request = urllib2.Request(server_url, data)return json.loads(urllib2.urlopen(request, timeout=10).read())if __name__ == "__main__":# 图片的URLimage_url = "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2637851855,2992656155&fm=200&gp=0.jpg"# http服务的URLurl = "http://10.10.20.20:6060/image?"print post(url, {"image_url": image_url})
以字节流方式传输图片
pickle模块和requests模块
服务器端
基于tornado的HTTP服务, 提供content参数,获取打包的图片内容,利用pickle.loads()方法获取图片内容,之后进行后续的操作。
HTTP搭建方式同URL方式, 简单修改post方法
# 其他部分参考上文URL服务的搭建方式def post(self):result = {}content = self.get_argument("content", default=None)if content is None:result["msg"] = "no image content"else:result["msg"] = self.content_process(content)self.write(json_encode(result))def content_process(self, image_content):"""根据image_content进行相应操作:param image_content: 图片内容"""try:content = pickle.loads(image_content)image = Image.open(StringIO(content))print image#TODO 根据image进行相应操作return "ok"except Exception as e:print traceback.format_exc()return str(e)
客户端
将本地图片文件利用pickle模块打包, 传送给服务器端进行处理; 利用requests模块获取远程图片并打包数据, 传送给服务器端进行处理。示例代码如下:
#!/usr/bin/python
# -*-coding=utf-8 -*-import json
import urllib
import urllib2
import requests
import pickledef post(server_url, params):data = urllib.urlencode(params)request = urllib2.Request(server_url, data)return json.loads(urllib2.urlopen(request, timeout=10).read())def remote_image(server_url, image_url):"""网络图片处理:param server_url: 服务器端HTTP服务URL:param image_url: 图片URL"""content = requests.get(image_url)params = {"content": content}print post(server_url, params)def local_image(server_url, image_path):"""本地图片处理:param server_url: 服务器端HTTP服务URL:param image_path: 图片本地地址"""r_file = open(image_path, "rb")content = pickle.dumps(r_file.read())params = {"content": content}print post(server_url, params)if __name__ == "__main__":url = "http://localhost:6060/image?"# local imagefile_path = "D:\\log\\fastText.PNG"local_image(url, file_path)# remote imageremote_url = "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2637851855,2992656155&fm=200&gp=0.jpg"remote_image(url, remote_url)
详情参考:
http://www.tornadoweb.org/en/stable/
http://www.python-requests.org/en/master/
Http服务传输图片的Python实现相关推荐
- 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...
新书推荐 <机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序> 点击上图了解及购买 谷歌云和Salesforce首选合作伙伴SpringML数据科学副总裁领衔撰写,讲 ...
- 【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端
网络通信,C/S模型(Client and Server) 工具: C++工具: Clion Python工具: Pycharm g++: MingW Python版本: python3.5 Pyth ...
- aiohttp 高并发web服务_【Python入门】50.异步IO之 asyncio实现异步操作
摘要:如何通过asyncio实现异步IO:用aiohttp模块编写支持多用户高并发的服务器. *写在前面:为了更好的学习python,博主记录下自己的学习路程.本学习笔记基于廖雪峰的Python教程, ...
- 启动FastDFS服务,使用python客户端对接fastdfs完成上传测试
1.启动tracker.storage.nginx服务: 启动fdfs_trackerd:sudo service fdfs_trackerd start 启动fdfs_storaged :sudo ...
- python 服务监控_promethues + python + flask监控后端服务状态
目录 脚本 说明 配置 写在前面 本文适合有python基础.使用过promethues + grafana的人 今天接到个任务,要监控后端的服务状态. Prometheus有个不好的地方在于,在国内 ...
- python句柄无效_作为Windows服务运行的Python:OSError:[WinError 6]句柄无效
subprocess.py中的第1117行是: p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) 这让我怀疑服务流程没有与之关联的STD ...
- 【GIS开发】地理编码服务Geocoder(Python)
文章目录 1.简介 2.百度 3.高德 4.google map 5.nominatim 5.1 overview 5.2 web api 5.3 python api (geopy) 6.geoco ...
- UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)
目录 一.使用UE4建立TCP客户端 二.使用网络调试助手建立服务端 三.基于网络调试助手的服务端与UE客户端通信 四.基于python的TCP服务端与UE客户端通信 一.使用UE4建立TCP客户端 ...
- 如何调试正在运行的python程序_如何调试作为服务运行的Python程序?
我有一个python脚本,在控制台中运行时效果很好.但是,在使用pywin32它以使其作为服务运行时,服务将安装并开始正常,但不会生成所需的输出.所以必定会出现问题 - 但我无法看到发现原因的原因. ...
最新文章
- 最常见企业管理SAAS软件有哪些?要解决哪些问题?
- Android 一个绚丽的loading动效分析与实现!
- 代码片段管理器——SnippetsLab
- Ubuntu shutdown 关机、重启、注销 命令 常用实例
- 视频 | OFC上的腾讯声音
- 绘制条形图python_小白学Python(13)——pyecharts 绘制 柱状图/条形图 Bar
- mysql 导入dbm文件_DBM数据导入到mysql数据库方法
- 电大计算机应用基础试卷号2007,电大计算机应用基础(试卷版)计算机试卷7.doc...
- mips指令分类和寻址大全
- 三分钟带你弄懂slot插槽——vue进阶
- 将职业教育职业化 - 各IT培训中心必须完成的使命
- SylixOS SylixOS CAN总线驱动之三
- jQuery使用手册之三 CSS操作
- C++内存管理之shared_ptr
- 最全的微信小程序代码大全
- 整人BAT\VBS代码 自创
- 华工计算机工图答案,华南理工 网络画法几何及工程制图-课程习题集答案
- linux shell 切换目录,如何在Shell中快速切换目录?
- Linux找回删除文件
- 遗传算法入门(连载之十) 神经网络入门(连载预告)