【问题标题】:Python - Open image in binary mode with a URLPython - 使用 URL 以二进制模式打开图像
【发布时间】:2020-02-25 07:11:17
【问题描述】:

我有一个 sn-p 可以在本地读取我的图像(返回二进制文件),即:

image = 'car.jpg'
with open(image, 'rb') as image_file:
    content = image_file.read()

我正在尝试重新创建相同的内容,但使用托管在互联网上的图像,我尝试了以下内容,但我没有运气。

from urllib.request import  urlopen
from PIL import Image
import io

url = 'https://somewebsite.com/fm-01/car.jpg'

image = urlopen(url)
image_file = io.BytesIO(image.read())
im = Image.open(image_file)
im = im.tobytes()

编辑...

完全相同的图像,一张在谷歌云存储上,另一张在本地。 打开它们时它们有不同的字节。

with open('car.jpg','rb') as image_file:
    content = image_file.read()
    print(len(content))

大小:234712

url = 'https://storage.googleapis.com/fm-01/car.jpg'
img = Image.open(urlopen(url))
image = img.tobytes()
print(len(image))

尺寸:1077600

【问题讨论】:

    标签: python python-imaging-library google-cloud-vision


    【解决方案1】:

    很简单:

    from urllib.request import urlopen
    
    url = 'https://somewebsite.com/fm-01/car.jpg'
    
    img = urlopen(url).read()
    

    【讨论】:

    • 它返回一个“”,我需要它的二进制文件。
    • 我无法获得您真正想要实现的目标。如果您需要托管在互联网上的文件字节,则根本不需要 PIL b = urlopen(url).read()
    • 哎呀,真不敢相信我错过了!哈..!非常感谢。
    • @gm_will "in binary" 不是很好的描述!您的意思是您需要 JPEG 编码文件 "as-is" 的字节,因为它们与相机型号、品牌和 GPS 一起出现在磁盘上,都已编码,还是您的意思是您需要二进制文件像素的表示,即0xff 0x00 0x00...,如果第一个像素是红色的。
    • 我基本上需要“读取”图像,就像使用带有'rb'的python内置函数open(),读取二进制模式。您发送的 sn-p 运行良好。
    【解决方案2】:

    你还没有理解我在米哈伊尔的回答下准确解释这一点的评论。

    234,712 字节是磁盘文件中 JPEG 编码数据的大小 - 它包括图像高度、宽度、日期、GPS 坐标、相机制造商以及图像 DCT 压缩成 JPEG 的所有像素。

    1,077,600 字节是您需要在内存中创建的数组大小,以保存未压缩的红色、绿色和蓝色像素,例如 898x400 像素,每个像素 3 个字节(1 个红色、1 个绿色和 1 个蓝色)。

    898 * 400 * 3 = 1077600
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      相关资源
      最近更新 更多