Как изменить размер изображения в PHP и сохранить фон? - PullRequest
0 голосов
/ 06 января 2019

Я нашел этот код здесь в стеке ( Создание миниатюры из загруженного изображения ), и он отлично работает для изображений (png, jpeg, jpg), но когда я пытаюсь с тем же встроенным Эта функция просто не работает с GIF (http://php.net/manual/en/function.imagecreatefromgif.php). Кроме того, всякий раз, когда вы загружаете изображение и используете функцию для изменения размера изображения, фон измененного изображения черного цвета.

Так что мои вопросы

  1. что мне делать, чтобы фон не стал черным?
  2. Как мне расширить функцию, чтобы она также охватывала GIF?

    function createThumbnail($type,$image_name,$new_width,$new_height,$uploadDir,$moveToDir){
    $path = $uploadDir . $image_name;
    $mime = getimagesize($path);
    if($mime['mime']=='image/png') { 
        $src_img = imagecreatefrompng($path);
    }
    if($mime['mime']=='image/gif') { 
        $src_img = imagecreatefromgif($path);
    }
    if($mime['mime']=='image/jpg' || $mime['mime']=='image/jpeg' || $mime['mime']=='image/pjpeg') {
        $src_img = imagecreatefromjpeg($path);
    }   
    $old_x      =   imageSX($src_img);
    $old_y      =   imageSY($src_img);
    $thumb_w    =   $new_width;
    $thumb_h    =   $new_height;
    $dst_img    =   ImageCreateTrueColor($thumb_w,$thumb_h);
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
    // New save location
    $image_name_new = explode(".", $image_name);
    if ($type == 1){
        $image_name = $image_name_new[0] . "_thumb." . $image_name_new[1];
    } else if ($type == 2){
        $image_name = $image_name_new[0] . "_image." . $image_name_new[1];
    }
    $new_thumb_loc = $moveToDir . $image_name;
    if($mime['mime']=='image/png') {
        $result = imagepng($dst_img,$new_thumb_loc,8);
    }
    if($mime['mime']=='image/gif') {
        $result = imagegif($dst_img,$new_thumb_loc,8);
    }
    if($mime['mime']=='image/jpg' || $mime['mime']=='image/jpeg' || $mime['mime']=='image/pjpeg') {
        $result = imagejpeg($dst_img,$new_thumb_loc,80);
    }
    imagedestroy($dst_img); 
    imagedestroy($src_img);return $result;}
    
...