2010-06-25 5 views
3

Я имею немного неприятности получать Gravatars работу:Путаница с Gravatar URL-

Когда я прошу следующее:

 
http://gravatar.com/avatar/8a17d0d0d8bdf6a8d527bbc943a17cf8.jpg?s=64&d=identicon 

Firefox с гордостью показывает следующее:
http://files.quickmediasolutions.com/gravatar_p.png

... указывая, что файл является PNG.

Это меня смущает - я думал, что Gravatars были изображениями в формате JPEG. Похоже, они тоже могут быть. Как я могу узнать, является ли данное изображение PNG или JPEG , желательно, не загружая его сначала?


Примечание: Некоторые люди сообщают, что Gravatar только возвращает PNG изображения. Пожалуйста, объясните это:

http://files.quickmediasolutions.com/gravatar_p2.png

 
http://gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413?s=64&d=identicon 

ответ

1

Если значки Gravatar имеют точные MIME-типы, назначенные сервером, к которому вы обращаетесь, просто проверьте это. Он должен быть image/jpeg для JPEG и image/png для PNG.

В противном случае ...

http://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header

PNG-файл начинается с 8-байтовой подписью. Значения шестнадцатеричного байта составляют 89 50 4E 47 0D 0A 1A 0A; десятичные значения составляют 137 80 78 71 13 10 26 10.

Так что просто проверьте восемь байтов в начале файла; если это PNG, он будет иметь указанные значения в этих байтах, а если нет, это не будет. Просто загрузите файл, возможно, временно сохраните его где-нибудь (что не должно быть слишком сложным, учитывая, что оно не должно быть слишком большим) и обрабатывать его по-разному в зависимости от того, что содержит заголовок. Вы всегда можете изменить расширение файла, а затем использовать графическую библиотеку PHP, если сначала сохранить его как неправильный. (Или вы не позволили сделать это?)


Как примечание стороны, мой любимый бит о PNG заголовка:

50 4E 47 В ASCII, буквы PNG, позволяющих человеку легко определить формат, если он просматривается в текстовом редакторе.

+0

Правда. Но разве файлы JPEG не имеют «JFIF»? В любом случае, спасибо. –

+0

@George: Не обязательно (хотя обычно у них есть заголовок JFIF). http://en.wikipedia.org/wiki/JPEG#JPEG_files. Сначала заголовок PNG попал мне в голову. – JAB

+0

По моему опыту заголовки 'Content-Type' на' gravatar.com' заслуживают доверия, поэтому вы можете определить его без загрузки всего изображения: просто запустите HTTP HEAD hequest, например: 'curl -head ' HTTP: //gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413 s = 1'' или 'свернуться --head 'HTTP: //gravatar.com/avatar/6dd5fae7d8f0c38b515a19a6ca4ca41d s = 1'' – ecmanaut

0

Конечный тег JPG, но строка интерпретируется сервером и соответствующее изображение передается. В этом случае PNG.

+0

Есть ли все * Gravatars PNG изображения, то? Если нет, то как я могу сказать на индивидуальной основе, какой формат это? –

+0

Все они отправляются как PNG. –

+0

@George, да все они отправлены как PNG. –

Смежные вопросы