2016-02-26 4 views
3

Я играю в python, пытаясь загрузить некоторые изображения из imgur. Я использовал urrlib и urllib.retrieve, но вам нужно указать расширение при сохранении файла. Это не проблема для большинства сообщений, поскольку ссылка имеет, например, .jpg, но я не уверен, что делать, когда расширение не существует. Мой вопрос в том, есть ли какой-либо способ определить формат изображения файла перед его загрузкой. Вопрос в основном конкретный, но я бы не возражал против решения для большинства сайтов для хостинга изображений.Формат изображения на imgur

Заранее спасибо

+1

Imgur имеет [API] (http://api.imgur.com/). Вы должны изучить это, вместо того, чтобы очищать вручную. В противном случае всегда существует модуль '' imghdr' '(https://docs.python.org/3/library/imghdr.html). – Carsten

+0

Ах спасибо, я посмотрю! – user5977016

ответ

1

Вы можете использовать imghdr.what(filename[, h]) в Python 2.7 и Python 3, чтобы определить тип изображения.

Прочтите here для получения дополнительной информации, если вы используете Python 2.7.

here Read для получения дополнительной информации, если вы не используете Python 3.

+0

Хм, это не работает для нелокальных файлов. – user5977016

+0

Тем не менее, это так же просто, как сохранение временного файла, проверка формата изображения и перемещение файла в соответствующий пункт назначения. – Carsten

0

Предполагая, что изображение имеет никакого расширения файла, нет никакого способа, чтобы определить, какой тип это, прежде чем загрузить его. Все форматы изображений устанавливают начальные байты на определенное значение. Чтобы проверить эти «магические» начальные байты, проверьте https://github.com/ahupp/python-magic - он соответствует начальным байтам относительно известных форматов изображений.

Код ниже загружает изображение с imgur и определяет, какой тип файла он есть.

import magic 
import requests 
import shutil 

r = requests.get('http://i.imgur.com/yed5Zfk.gif', stream=True) ##Download picture 
if r.status_code == 200: 
    with open('~/Desktop/picture', 'wb') as f: 
     r.raw.decode_content = True 
     shutil.copyfileobj(r.raw, f) 

print magic.from_file('~/Desktop/picture') ##Determine type 

## Prints: 'GIF image data, version 89a, 360 x 270' 
Смежные вопросы