Изменение размера PNG в PHP приводит к повреждению файлов - PullRequest
0 голосов
/ 08 января 2011

У меня есть PHP-скрипт, который изменяет размеры файлов .jpg, .gif и .png в ограничивающий прямоугольник.

            $max_width = 500;
            $max_height = 600;
            $filetype = $_FILES["file"]["type"];
            $source_pic = "img/" . $idnum;
            if($filetype == "image/jpeg")
            {
                $src = imagecreatefromjpeg($source_pic);                    
            } else if($filetype == "image/png")
            {
                $src = imagecreatefrompng($source_pic);                 
            } else if($filetype == "image/gif")
            {
                $src = imagecreatefromgif($source_pic);
            }
            list($width,$height)=getimagesize($source_pic);
            $x_ratio = $max_width / $width;
            $y_ratio = $max_height / $height;

            if( ($width <= $max_width) && ($height <= $max_height) )
            {
                $tn_width = $width;
                $tn_height = $height;
            } else if (($x_ratio * $height) < $max_height)
            {
                $tn_height = ceil($x_ratio * $height);
                $tn_width = $max_width;
            } else {
                $tn_width = ceil($y_ratio * $width);
                $tn_height = $max_height;
            }

            $tmp = imagecreatetruecolor($tn_width,$tn_height);
            imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
            $destination_pic = "img/thumbs/" . $idnum . "thumb";
            if($filetype == "image/jpeg")
            {
                imagejpeg($tmp,$destination_pic,80);
            } else if($filetype == "image/png")
            {
                imagepng($tmp,$destination_pic,80);
            } else if($filetype == "image/gif")
            {
                imagegif($tmp,$destination_pic,80);
            }
            imagedestroy($src);
            imagedestroy($tmp);

Скрипт отлично работает с jpeg и gif, но при запуске на png файл будет поврежден.

Что-нибудь особенное, что мне нужно использовать при работе с png? Я никогда не работал с подобными вещами в PHP, поэтому я не очень знаком с ним.

Ответы [ 2 ]

1 голос
/ 08 января 2011

Сначала проверьте, включена ли поддержка PNG в вашей gd lib. Вы можете получить это из phpinfo, как функция phpinfo().

Вы не можете установить параметр $quality из imagepng() в 80, возможны только от 1 до 9. Лучше его убрать.

imagepng($tmp, $destination_pic);

А если у вас есть проблемы с прозрачностью, взгляните на следующие функции:

imagealphablending();
imagesavealpha();
0 голосов
/ 08 января 2011

На вашем сервере включена поддержка PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...