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实现相关推荐

  1. 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...

    新书推荐 <机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序> 点击上图了解及购买 谷歌云和Salesforce首选合作伙伴SpringML数据科学副总裁领衔撰写,讲 ...

  2. 【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端

    网络通信,C/S模型(Client and Server) 工具: C++工具: Clion Python工具: Pycharm g++: MingW Python版本: python3.5 Pyth ...

  3. aiohttp 高并发web服务_【Python入门】50.异步IO之 asyncio实现异步操作

    摘要:如何通过asyncio实现异步IO:用aiohttp模块编写支持多用户高并发的服务器. *写在前面:为了更好的学习python,博主记录下自己的学习路程.本学习笔记基于廖雪峰的Python教程, ...

  4. 启动FastDFS服务,使用python客户端对接fastdfs完成上传测试

    1.启动tracker.storage.nginx服务: 启动fdfs_trackerd:sudo service fdfs_trackerd start 启动fdfs_storaged :sudo ...

  5. python 服务监控_promethues + python + flask监控后端服务状态

    目录 脚本 说明 配置 写在前面 本文适合有python基础.使用过promethues + grafana的人 今天接到个任务,要监控后端的服务状态. Prometheus有个不好的地方在于,在国内 ...

  6. python句柄无效_作为Windows服务运行的Python:OSError:[WinError 6]句柄无效

    subprocess.py中的第1117行是: p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) 这让我怀疑服务流程没有与之关联的STD ...

  7. 【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 ...

  8. UE4 TCP通信 (UE客户端与网络调试助手服务端、python服务端通信)

    目录 一.使用UE4建立TCP客户端 二.使用网络调试助手建立服务端 三.基于网络调试助手的服务端与UE客户端通信 四.基于python的TCP服务端与UE客户端通信 一.使用UE4建立TCP客户端 ...

  9. 如何调试正在运行的python程序_如何调试作为服务运行的Python程序?

    我有一个python脚本,在控制台中运行时效果很好.但是,在使用pywin32它以使其作为服务运行时,服务将安装并开始正常,但不会生成所需的输出.所以必定会出现问题 - 但我无法看到发现原因的原因. ...

最新文章

  1. 最常见企业管理SAAS软件有哪些?要解决哪些问题?
  2. Android 一个绚丽的loading动效分析与实现!
  3. 代码片段管理器——SnippetsLab
  4. Ubuntu shutdown 关机、重启、注销 命令 常用实例
  5. 视频 | OFC上的腾讯声音
  6. 绘制条形图python_小白学Python(13)——pyecharts 绘制 柱状图/条形图 Bar
  7. mysql 导入dbm文件_DBM数据导入到mysql数据库方法
  8. 电大计算机应用基础试卷号2007,电大计算机应用基础(试卷版)计算机试卷7.doc...
  9. mips指令分类和寻址大全
  10. 三分钟带你弄懂slot插槽——vue进阶
  11. 将职业教育职业化 - 各IT培训中心必须完成的使命
  12. SylixOS SylixOS CAN总线驱动之三
  13. jQuery使用手册之三 CSS操作
  14. C++内存管理之shared_ptr
  15. 最全的微信小程序代码大全
  16. 整人BAT\VBS代码 自创
  17. 华工计算机工图答案,华南理工 网络画法几何及工程制图-课程习题集答案
  18. linux shell 切换目录,如何在Shell中快速切换目录?
  19. Linux找回删除文件
  20. 遗传算法入门(连载之十) 神经网络入门(连载预告)

热门文章

  1. linux命令tee用法
  2. 制造业如何做好生产经营分析?
  3. lte usb modem Linux,天翼4G LTE modem +openwrt
  4. C#字节数组和字符数组与字符串之间的转换
  5. 如何在 3 年内摆脱“普通程序员”标签
  6. css字体阴影+渐变
  7. HDU--5575、Discover Water Tank (思维、优先队列)
  8. 北京科技大学计算机考研专业课计算机综合一871(2021年真题)分享
  9. 数据结构与算法-动态规划
  10. vSphere6.7创建Windows10虚拟机及磁盘扩容