2010-06-25 66 views
3

我有一點麻煩Gravatars正常工作:混淆的Gravatar網址

當我請求如下:

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

火狐自豪地展示如下:
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類型由您正在訪問的服務器分配,請檢查該圖標。對於JPEG,它應該是image/jpeg,對於PNG應該是image/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'嗎?不管怎樣,謝謝。 – 2010-06-25 20:35:57

+0

@George:不一定(儘管通常他們確實有JFIF頭)。 http://en.wikipedia.org/wiki/JPEG#JPEG_files這只是PNG頭首先彈出到我的頭上。 – JAB 2010-06-25 20:52:06

+0

根據我的經驗,'gravatar.com'上的'Content-Type'標頭值得信賴,因此您可以在不下載整個圖像的情況下確定它:只需發送HTTP HEAD hequest,例如: 'curl - head' http://gravatar.com/avatar/03cd042b82ac85b2c5fe0757a94e0413?s = 1'' 或 'curl --head'http://gravatar.com/avatar/6dd5fae7d8f0c38b515a19a6ca4ca41d?s = 1'' – ecmanaut 2012-05-30 22:15:49

0

結束標記爲JPG,但字符串由服務器解釋和相應的圖像發送。在這種情況下,一個PNG。

+0

Are * all * Gravatars PNG images,then?如果不是,我怎樣才能告訴個人什麼格式呢? – 2010-06-25 19:28:40

+0

它們全部以PNG格式發送。 – 2010-06-25 19:30:05

+0

@George,是的,他們都是以PNG的形式發送的。 – 2010-06-25 19:33:42