我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Http服务传输图片的Python实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 StringIO

import requests
import tornado
import tornado.ioloop
import tornado.web
from tornado.escape import json_encode
from PIL import Image

reload(sys)
sys.setdefaultencoding('utf8')


class Handler(tornado.web.RequestHandler):

    def post(self):
        result = {}
        image_url = self.get_argument("image_url", default="")
        print image_url
        if 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 = port

    def 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 urllib2


def 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__":
    # 图片的URL
    image_url = "/file/imgs/upload/202301/31/i0vh3us4jub.jpg"
    # http服务的URL
    url = "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 pickle


def 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 image
    file_path = "D:\\log\\fastText.PNG"
    local_image(url, file_path)

    # remote image
    remote_url = "/file/imgs/upload/202301/31/i0vh3us4jub.jpg"
    remote_image(url, remote_url)

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Http服务传输图片的Python实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Http服务传输图片的Python实现

介绍主要介绍Python实现的Http服务传输图片的2种方式:URL和字节流以URL的方式传输图片服务器端基于tornado框架搭建简单的web服务, 提供post方法, 通过接收image_url字段获取图片的url,通过requests
2023-01-31

python用socket传输图片的项目实践

PythonSocket图像传输项目实践本项目介绍如何使用Python套接字在客户端和服务器端传输图像数据。步骤:设置客户端和服务器端使用套接字发送和接收图像字节数组将字节数组转换为图像文件代码示例:客户端:连接服务器并发送图像字节数组服务器:监听连接并接收字节数组转换并保存图像文件最佳实践:使用缓冲区提高效率压缩图像缩短传输时间使用校验和确保完整性通过遵循这些步骤,您可以创建可靠高效的图像传输系统。
python用socket传输图片的项目实践
2024-04-02

Vue+Flask怎么实现图片传输功能

今天小编给大家分享一下Vue+Flask怎么实现图片传输功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。完整流程:1.图片
2023-06-29

js实现上传图片到服务器的

这篇文章主要介绍了js实现上传图片到服务器的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下HTML//多张图片上传multiple2023-06-14

java实现图片上传至服务器

实现的思路:工具:MySQL,eclipse首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息,一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID,T_touxiang表中的用户ID对应
java实现图片上传至服务器
2021-04-29

python使用socket实现图像传输功能

在python中使用socket进行linux服务器与win10主机间的图像传输,供大家参考,具体内容如下 前提:服务器与主机需要在同一局域网内 使用方法: (1)分别将下面两段代码存入对应位置 (2)先运行服务器端代码,显示Wait fo
2022-06-02

Thinkphp怎么结合ajaxFileUpload实现ajax异步图片传输

这篇文章主要介绍“Thinkphp怎么结合ajaxFileUpload实现ajax异步图片传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Thinkphp怎么结合ajaxFileUpload实现a
2023-07-05

Python的Tornado框架实现图片上传及图片大小修改功能

图片的上传 上传图片使用了表单提交, 下面是html部分, enctype="multipart/form-data"表示不对字节进行编码,上传文件类型时需指定. input标签的 type="file" 指定上传类型.
2022-06-04

Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】

文章目录 1 前提知识1.1 服务端签名后直传1.1.1 流程和源码解析1.1.2 实现步骤 1.2 Aliyun Spring Boot OSS 示例(接入微服务)1.2.1 简略说明1.2.2步骤 2、项目中实际
2023-08-24

Android 通过Base64上传图片到服务器实现实例

Android 通过Base64上传图片到服务器之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下。前台图片处理:(传Bitmap对象即可)/**
2023-05-31

Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码

这篇文章主要介绍了Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码的相关资料,需要的朋友可以参考下
2023-03-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录