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))