我已經編寫了一個腳本來上傳,縮放,重新採樣和保存圖像,以便在我的網站上用作頭像。這適用於JPG和GIF文件,但是當我嘗試上傳PNG文件時,它只是返回一個損壞的圖像文件。我在這裏搜索了一個答案,但沒有找到任何幫助。使用GD從PNG文件中破碎的圖像
- 是的,我知道MIME類型是正確的。
- 是的,我知道文件是不是完好
- 是的,我知道這是「選擇」,「png格式」
- 沒有,有沒有輸出錯誤或警告的情況下。
這是迄今爲止我已經得到了代碼,或者至少一塊的故障:
if(@$_FILES['newAvatar']['name'] != '') {
$filename = 'profpics/' . $_SESSION['id'] . '__' . date("Y_m_d__H_i_s") . '__' . $_FILES['newAvatar']['name'];
move_uploaded_file($_FILES['newAvatar']['tmp_name'], $filename);
// Kontrollera filändelse för att gd ska veta vilken filtyp att konvertera från.
switch(end(explode(".", strtolower($filename)))):
case "jpg":
$image = imagecreatefromjpeg($filename);
break;
case "jpeg":
$image = imagecreatefromjpeg($filename);
break;
case "gif":
$image = imagecreatefromgif($filename);
break;
case "png":
$image = imagecreatefrompng($filename);
break;
default:
$image = imagecreatefromjpeg($filename);
endswitch;
// Max slutliga dimensioner
$max_width = 200;
$max_height = 270;
// Nuvarande dimensioner
$old_width = imagesx($image);
$old_height = imagesy($image);
// Beräkna skala
$scale = min($max_width/$old_width, $max_height/$old_height);
// Sätt nya dimensioner utifrån den beräknade skalan
$new_width = ceil($scale*$old_width);
$new_height = ceil($scale*$old_height);
// Skapa tomt bildobjekt
$new = imagecreatetruecolor($new_width, $new_height);
// Förminska (troligtvis, annars förstora, men det lär väl aldrig hända)
imagecopyresampled($new, $image, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
// Spara
// Kontrollera filändelse för att gd ska veta vilken filtyp att spara som.
switch(end(explode(".", strtolower($filename)))):
case "jpg":
imagejpeg($new, $filename, 60);
break;
case "jpeg":
imagejpeg($new, $filename, 60);
break;
case "gif":
imagegif($new, $filename, 60);
break;
case "png":
imagepng($new, $filename, 60);
break;
default:
imagejpeg($new, $filename, 60);
break;
endswitch;
// Förstör objekt
imagedestroy($image);
imagedestroy($new);
$sql = "UPDATE tblprofiles SET strAvatarPath = '" . $filename . "' WHERE userId = " . $_SESSION['id'];
mysql_query($sql) or die(mysql_error() . "<br />" . $sql);
}
什麼意思破了?你看過嗎?該文件包含什麼內容? –
我發佈了下面的解決方案! –