Функция изменения размера изображения PHP не работает должным образом

Я хочу изменить размер изображения PNG с помощью прозрачности, пожалуйста. Вот код:

function createThumb($upfile, $dstfile, $max_width, $max_height){
   $size = getimagesize($upfile);
   $width = $size[0];
   $height = $size[1];
   $x_ratio = $max_width / $width;
   $y_ratio = $max_height / $height;
   if( ($width <= $max_width) && ($height <= $max_height)) {
           $tn_width = $width;
           $tn_height = $height;
   } elseif (($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;
   }
   if($size['mime'] == "image/jpeg"){
           $src = ImageCreateFromJpeg($upfile);
           $dst = ImageCreateTrueColor($tn_width, $tn_height);
           imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);
           imageinterlace( $dst, true);
           ImageJpeg($dst, $dstfile, 100);
   } else if ($size['mime'] == "image/png"){
        $src = ImageCreateFrompng($upfile);
        $dst = ImageCreateTrueColor($tn_width, $tn_height);
        imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);

      // integer representation of the color black (rgb: 0,0,0)
     $background = imagecolorallocate($dst, 255, 255, 0);
     // removing the black from the placeholder
     imagecolortransparent($dst, $background);

     // turning off alpha blending (to ensure alpha channel information
     // is preserved, rather than removed (blending with the rest of the
     // image in the form of black))
     imagealphablending($dst, false);

     // turning on alpha channel information saving (to ensure the full range
     // of transparency is preserved)
     imagesavealpha($dst, true);


              Imagepng($dst, $dstfile);

      } else {

           $src = ImageCreateFromGif($upfile);
           $dst = ImageCreateTrueColor($tn_width, $tn_height);
           imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);
           imagegif($dst, $dstfile);
   }
}

Источник изображения:

enter image description here

Текущий результат (который мне не нужен):

enter image description here

Как изменить размер изображения и сохранить прозрачность цвета фона? Нужна помощь, пожалуйста. Спасибо.

7
задан Jonathan M 27 September 2011 в 15:25
поделиться