Http服务传输图片的Python实现

Http服务传输图片的Python实现

介绍

主要介绍Python实现的Http服务传输图片的2种方式

以URL的方式传输图片

客户端

向服务器端的httpserver传送图片的url字段即可

import urllib
import urllib2

# image_url为httpserver接受的图片字段
params = {"image_url":"xxxxx"}
data = urllib.urlencode(params)

# server_httpserver_url为httpserver提供服务的接口
request = urllib2.Request("server_httpserver_url", data)
result = urllib2.urlopen(request, timeout=xxx)

服务器端

根据image_url字段获取图片的url,通过requests模块获取图片进行后续的操作。

import requests
from PIL import Image
from StringIO import StringIO

image_url = "http://tupian.qqjay.com/u/2013/1127/19_222949_14.jpg"
image = requests.get(image_url)
if image.status_code == requests.codes.ok:
    print Image.open(StringIO(image.content))

以字节流方式传输图片

pickle模块

客户端

将本地图片文件打包传送给服务器端

import pickle

file_name = "xxxx"
r_file = open(file_name, "rb")
image_rb = pickle.dumps(r_file.read())

#content为httpserver接受的字段
params = {"content":"xxxxx"}
data = urllib.urlencode(params)

# server_httpserver_url为httpserver提供服务的接口
request = urllib2.Request("server_httpserver_url", data)
result = urllib2.urlopen(request, timeout=xxx)

服务器端

获取打包的图片内容,load之后进行后续的处理

#python web 使用的 tornado 框架
#class Handler(tornado.web.RequestHandler)

content = tornado.web.RequestHandler.get_argument('content', "")
image_content =  pickle.loads(content)
image = Image.open(StringIO(image_content))

requests模块

客户端

通过url获取图片,获取图片内容传送给服务器端

import requests

image_url = "http://tupian.qqjay.com/u/2013/1127/19_222949_14.jpg"
image_content  = requests.get(image_url)

#content为httpserver接受的字段
params = {"content":"xxxxx"}
data = urllib.urlencode(params)

# server_httpserver_url为httpserver提供服务的接口
request = urllib2.Request("server_httpserver_url", data)
result = urllib2.urlopen(request, timeout=xxx)

服务器端

获取图片内容,进行后续处理

#python web 使用的 tornado 框架
#class Handler(tornado.web.RequestHandler)
#二进制文件的获取最好采用request.arguments.get而不是get_argument,避免存在编码的问题,request.arguments.get返回值是一个list

content = tornado.web.RequestHandler.request.arguments.get('content', [None]) [0]
image_content =  pickle.loads(content)
image = Image.open(StringIO(image_content))

详情参考:
http://www.tornadoweb.org/en/stable/

http://www.python-requests.org/en/master/

猜你喜欢

转载自blog.csdn.net/ymaini/article/details/80645917