zoukankan      html  css  js  c++  java
  • python-URL转jpg图片

    问题描述

    有图片地址,可以在网页打开 URL:https://bdfile.bluemoon.com.cn/group2/M00/0A/BA/wKg_HlwzY1SAIdXDAAFyo-ZOLKQ399.jpg

    现需要将图片url转为图片,保存在本地

    解决思路

    在内存中将图片url打开,编码为base64,在对这个编码进行解码为图片进行保存即可

    import os,base64
    import requests as req
    from PIL import Image
    from io import BytesIO
    
    response = req.get("https://bdfile.bluemoon.com.cn/group2/M00/0A/BA/wKg_HlwzY1SAIdXDAAFyo-ZOLKQ399.jpg")
    
    # 内存中打开图片
    image = Image.open(BytesIO(response.content))
    
    # 图片的base64编码
    ls_f = base64.b64encode(BytesIO(response.content).read())
    
    # base64编码解码
    imgdata = base64.b64decode(ls_f)
    
    # 图片文件保存
    file = open('test.jpg','wb')
    file.write(imgdata)
    file.close()

    结果

    补充:

    原文:https://www.jianshu.com/p/d64354a61359

    1.用OpenCV

    OpenCV的imread()只能加载本地的图片,并不能通过网址加载图片。但是,opencv的VideoCapture类可以从url加载视频。如果只用opencv的话,我们可以一个迂回的方式:先用VideoCapure加载网址下的图片,然后再传给Mat。

    import cv2
    cap = cv2.VideoCapture(img_src)
    if( cap.isOpened() ) :
        ret,img = cap.read()
        cv2.imshow("image",img)
        cv2.waitKey()

    2. OpenCV+Numpy+urllib

    import numpy as np
    import urllib
    import cv2
    resp = urllib.urlopen(img_src)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    cv2.imshow("Image", image)
    cv2.waitKey(0)

    3. skimage

    相对来说,这种方式应该是最简单的,因为skimage可以直接以imread()函数来读取网页图片,而不需要其他的辅助,也不需要迂回。

    from skimage import io
    image = io.imread(img_src)
    io.imshow(image)
    io.show()
  • 相关阅读:
    洛谷 P1550 [USACO08OCT]Watering Hole G(最小生成树||超级源点)
    洛谷 P2168 [NOI2015]荷马史诗(Huffman树|编码)
    洛谷 P5658 括号树(DFS)
    用堆来求中位数
    c++各种输入输出(文件输入输出,标准输入输出,一些字符串)
    Hello,world!
    【NOIP2013】花匠
    【洛谷习题】最长上升子序列
    【NOIP2014】联合权值
    【NOIP2014】飞扬的小鸟
  • 原文地址:https://www.cnblogs.com/zheng1076/p/10251171.html
Copyright © 2011-2022 走看看