imagecreatefromstring возвращает false для некоторых файлов изображений PNG

У меня есть галерея изображений, пользователи могут загружать изображения, после загрузки изображения PHP-скрипт создает две его копии - одну для миниатюр, а другую для отображения в галерее в увеличенном размере.

Приложение работает нормально, за исключением того, что при загрузке некоторых PNG картинок выписка

 if($image=@imagecreatefromstring($filedata))

возвращает ложь

Ниже приведен сценарий. Пожалуйста помоги.

    <!---------------Processing uploaded image----------------->
<?php
if (isset($_FILES['file1']))
    {
        if($fgmembersite->CheckLogin()) 
            {
            if($_FILES['file1']['error']>0)
                {
                echo "file upload error".$_FILES['file1']['error'];
                }
            else
                {       
                $allowedtype=array('image/jpg','image/jpeg','image/pjpeg','image/gif','image/png');
                $maxsize=10*1024*1024;
                $filename= mysql_real_escape_string($_FILES['file1']['name']);
                $tmp_name=$_FILES['file1']['tmp_name'];
                $size=$_FILES['file1']['size'];
                $type=$_FILES['file1']['type'];
                $ext=$filename;
                if (!in_array($type,$allowedtype))
                    {
                    die ('Invalid file type');
                    }
                if ($size>$maxsize)
                    {
                    die ('error- file size must be less than'.($maxsize/1024/1024).'MB');
                    }
                filedata=file_get_contents($tmp_name);
                if($image=@imagecreatefromstring($filedata))
                    {   
                    $width=imagesx($image);
                    $height=imagesy($image);

                    //creating images
                    $large=imagecreatetruecolor(445,380);   
                    imagecopyresampled($large,$image,0,0,0,0,445,380,$width,$height);
                    $largepath = 'image/large/' . uniqid('img',true) . '.jpg' ; //assigning file location and path
                    $thumb=imagecreatetruecolor(54,54);
                    imagecopyresampled($thumb,$image,0,0,0,0,54,54,$width,$height); 
                    $thumbpath = 'image/thumb/' . uniqid('thumb',true) . '.jpg' ;
                    if (imagejpeg($thumb,$thumbpath) && imagejpeg($large,$largepath))
                        {
                        $con = connect();
                        query("INSERT INTO gallery (caption,thumbpath,largepath) values ('$caption','$thumbpath','$largepath')");
                        }
                    header('location:'.$_SERVER["PHP_SELF"]);
                    }
                else
                    echo "failed";
                }
        }
    }
?>

1 ответ

Посмотрите руководство к imagejpeg, он принимает необязательный третий параметр качества (0 - 100):

if (imagejpeg($thumb,$thumbpath, 92) && imagejpeg($large,$largepath, 96))
Другие вопросы по тегам