前一段時間做了一個圖片上傳的小程序,今天有人說jpg圖片上傳不了。我在本地Chrome、Firefox測了下,發現沒有問題,上傳正常。我問他用什麼浏覽器,原來是世界之窗、還有360......我囧。我想,是不是IE的問題?於是我在IE下測了,果然不行。原來的程序如下:
switch($type) { case "image/jpeg": $resultImage = imagecreatefromjpeg($original); imagejpeg($resultImage, $target, $quality); break; case "image/png": $resultImage = imagecreatefrompng($original); imagepng($resultImage, $target, $quality_png); break; case "image/gif": $resultImage = imagecreatefromgif($original); imagegif($resultImage, $target, $quality); break; default : die("不支持此文件類型"); exit; }
後來google了下,發現關於jpg格式的圖片在IE下確實有些差異。
在IE下上傳一副jpg圖片,然後打印該上傳文件的信息如下:
Array ( [name] => bkjia.jpg [type] => image/pjpeg [tmp_name] => /tmp/phprY0loE [error] => 0 [size] => 71189 )
jpg格式的圖片的Mimetype為image/pjpeg。由於開發中都用Chrome或者Firefox開發,在判斷時並沒有加image/pjpeg,所以導致jpg格式的圖片在IE內核的浏覽器無法被識別。
下面是各格式圖片在不同浏覽器中的格式對照:
firefox image/jpeg image/bmp image/gif image/png ie 6 image/pjpeg image/bmp image/gif image/x-png ie 7 image/pjpeg image/bmp image/gif image/x-png ie 8 image/pjpeg image/bmp image/gif image/x-png
傳圖片時,ie會把 jpg、jpeg翻譯成image/pjpeg,png翻譯成image/x-png 。而火狐則很標准:jpg、jpeg翻譯成image/jpeg,png翻譯成image/png。
程序改成這樣就OK了。
switch($type) { case "image/jpeg": $resultImage = imagecreatefromjpeg($original); imagejpeg($resultImage, $target, $quality); break; case "image/pjpeg": $resultImage = imagecreatefromjpeg($original); imagejpeg($resultImage, $target, $quality); break; case "image/png": $resultImage = imagecreatefrompng($original); imagepng($resultImage, $target, $quality_png); break; case "image/gif": $resultImage = imagecreatefromgif($original); imagegif($resultImage, $target, $quality); break; default : die("不支持此文件類型"); exit; }