前一段時間做了一個圖片上傳的小程序,今天有人說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;
}