PHP замена прозрачного фона в png на белый

131
29 января 2022, 18:40

Всем привет, делаю загрузку картинок для превью товаров(в магазине).

Есть такая функция

<?php 
  function resize($file, $type = 1, $quality = 75, $tmp_path){ 
            $max_mini_size = 1000; 
            $max_size = 800; 
 
            if ($file['type'] == 'image/jpeg') $src = imagecreatefromjpeg ($file['tmp_name']); 
            else if ($file['type'] == 'image/png') $src = imagecreatefrompng ($file['tmp_name']); 
            else if ($file['type'] == 'image/gif') $src = imagecreatefromgif ($file['tmp_name']); 
            else return false; 
 
            $width_src = imagesx($src);  
            $height_src = imagesy($src); 
 
            if ($type == 1) 
                $width = $max_mini_size; 
            else if ($type == 2) 
                $width = $max_size; 
 
            if ($width_src < $width) { 
                $ratio       = $width_src/$width; 
                $width_dest  = round($width_src/$ratio); 
                $height_dest = round($height_src/$ratio); 
  
                $dest = imagecreatetruecolor($width_dest, $height_dest);         
 
                imagecopyresampled($dest, $src, 0, 0, 0, 0, $width_dest, $height_dest, $width_src, $height_src); 
 
                imagejpeg($src, $tmp_path . $file['name'], $quality); 
 
                imagedestroy($dest); 
                imagedestroy($src); 
                echo 'no'; 
 
                return $file['name']; 
            }else { 
                imagejpeg($src, $tmp_path . $file['name'], $quality); 
 
                imagedestroy($src); 
                 
                return $file['name']; 
            } 
?>

она работает нормально, но есть одно но -- если я загружаю png картинку с прозрачным фоном, то этот прозрачный фон заменяется на черный, а мнея нужен белый фон, что я только не перепробовал!

Самое близкое по нужному мне результату это --

<?php 
  $white = imagecolorallocate($src, 255, 255, 255); 
  imagefill ($src, 0, 0, $white); 
>?

Но здесь еще одно НО -- оно заливает только те места, которые не замкнуты, те вот такой результат

На картинке иконка сохранения с прозрачным фоном,который заменяется на белый, но если что-то "перегараживает" путь, то там остается черный цвет (на картинке выделены такие места красным.

Так же есть функция imagefilledrectangle

READ ALSO
Назначить ключи массива из переменной. PHP

Назначить ключи массива из переменной. PHP

Мне необходимо создать массив с ключами и значениями из пременныхКод примерно такой

59
Посчитать количество каждой цифры и создать объект

Посчитать количество каждой цифры и создать объект

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

168
Проблемы с анимацией jQuery

Проблемы с анимацией jQuery

У меня есть код, который выполняется при вызове функции theBestFunction:

123
Всплывающая форма обратной связи при наведении на картинку

Всплывающая форма обратной связи при наведении на картинку

Как сделать так, чтобы при наведении на картинку открывалось модальное окно с формой обратной связи?

85