Я пишу простой сценарий загрузки, который может загружать изображение, указанное пользователем, со своего компьютера на мой сервер. Сейчас это очень просто, но я хочу учитывать pngs
и jpg/jpegs
. Файлы JPG сохраняются нормально, но файлы png, независимо от того, имеют они прозрачность или нет, сохраняются как полностью черное изображение. Я не уверен, почему это происходит, но мне кажется, что это как-то связано с imagecreatetruecolor
?
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
$path = $_FILES['file']['name'];
$uploadedfile = $_FILES['file']['tmp_name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
if ($path == 'png') {
$src = imagecreatefrompng($uploadedfile);
imagealphablending($src, true); // setting alpha blending on
imagesavealpha($src, true); // save alphablending setting (important)
header('Content-Type: image/png');
} else {
$src = imagecreatefromjpeg($uploadedfile);
header('Content-Type: image/jpeg');
}
list($width, $height) = getimagesize($uploadedfile);
$r = $width / $height;
if (800/800 > $r) {
$newwidth = 800*$r;
$newheight = 800;
} else {
$newheight = 800/$r;
$newwidth = 800;
}
$tmp = imagecreatetruecolor($newwidth, $newheight);
$filename = '../items/' . $_FILES['file']['name'];
imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if ($path == 'png') {
imagepng($tmp, $filename);
} else {
imagejpeg($tmp, $filename, 80);
}
imagedestroy($tmp);
}