Python - Открыть изображение в двоичном режиме с URL - PullRequest
1 голос
/ 25 февраля 2020

У меня есть фрагмент, который читает мои изображения локально (возвращает двоичный код), то есть:

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

Я пытаюсь воссоздать то же самое, но с изображениями, которые размещены на inte rnet, я пробовал со следующим, но мне не повезло.

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

РЕДАКТИРОВАТЬ ...

То же самое изображение, одно в облачном хранилище Google, а другое локально. У них разные байты при открытии.

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

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вы не поняли комментарий, который я сделал, объясняя именно это под ответом Михаила.

234 712 байт - это размер JPEG-кодированных данных в файле на диске - он включает в себя высоту изображения, ширину, дату , GPS-координаты, производитель камеры и все пиксели изображения, сжатого DCT в JPEG.

1 077 600 байт - это размер массива, который вам нужно будет создать в памяти для хранения несжатого красного, зеленого и синие пиксели, скажем, 898x400 пикселей по 3 байта (1 красный, 1 зеленый и 1 синий) на пиксель.

898 * 400 * 3 = 1077600
0 голосов
/ 25 февраля 2020

Это просто как:

from urllib.request import urlopen

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

img = urlopen(url).read()
...