Я пишу сценарий, который будет загружать файл из пользовательского ввода, изменять его размер в миниатюру и добавлять два новых имени файла в базу данных.
Однако я не могу на всю жизнь понять,как заставить PHP определить тип изображения MIME и затем передать его заголовку.Вот код, я поместил комментарии, чтобы попытаться сделать его как можно более понятным:
$picture = $_FILES['picture']['name'];
/*original file location*/
$file = 'picture/'.$picture.'';
/*save thumbnail location*/
$save = 'thumb/tn-'.$picture.'';
/*append thumbnail filename with tn-*/
$thumb = 'tn-'.$picture.'';
/*get original file size*/
list($width, $height) = getimagesize($file);
/*get image MIME type*/
$size = getimagesize($file);
$fp = fopen($file, "r");
if ($size && $fp)
{
header("Content-type:".$size['mime']);
fpassthru($fp);
exit;
}
else
{
echo 'Error getting filetype.';
}
/*define thumbnail dimensions*/
$modwidth = 300;
$modheight = 200;
/*check to see if original file is not too small*/
if (($width > 301) || ($height > 201))
{
/*create shell for the thumbnail*/
$tn = imagecreatetruecolor($modwidth, $modheight);
/*HERE IS WHERE I HAVE TROUBLE*/
/*if MIME type is PNG*/
if ($size['mime'] == "image/png")
{
/*try to create PNG thumbnail*/
$image = imagecreatefrompng($file);
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
imagepng($tn, $save, 100);
}
/*if MIME type is JPEG*/
if ($size['mime'] == "image/jpeg")
{
$image = imagecreatefromjpeg($file);
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
imagejpeg($tn, $save, 100);
}
/*if MIME type is GIF*/
if ($size['mime'] == "image/gif")
{
$image = imagecreatefromgif($file);
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
imagegif($tn, $save, 100);
}
}
else { echo 'Your file is too small.'; }
Итак, вот часть, которую я не понимаю: код отлично работает, когда я загружаю a.jpeg, но если это PNG или GIF, появляется страница с надписью: «Изображение« 127.0.0.1:8888 »не может быть отображено, поскольку оно содержит ошибки».Я полагаю, что он не должен иметь правильный тип MIME заголовка, но может ли это быть что-то еще?
Когда я выбираю .jpeg, он прекрасно загружается в папку с изображениями и генерирует миниатюру в папку с миниатюрами, как я хочу.
Но как только я попробую это с PNG и GIF, это не получится.Должно быть, я упускаю что-то очевидное?
Этот код полезен для того, чего я пытаюсь достичь?
Заранее спасибо,