una transparente quitar online jpg imagen hacer gratis fondo convertir con como celular php image resize gd

php - quitar - fondo transparente online gratis



Cómo reemplazar el fondo negro con blanco al redimensionar/convertir imágenes PNG con fondos transparentes a JPEG. (5)

Estoy usando una secuencia de comandos que permite a los usuarios subir imágenes. El script cambia el tamaño y convierte las imágenes a JPEG.

El problema que tengo es cuando se carga un PNG con transparencia, la imagen JPEG resultante es negra donde había transparencia.

¿Cómo puedo editar la secuencia de comandos siguiente para reemplazar el negro con blanco? Ya hace esto para GIF pero no para PNG.

// RESIZE IMAGE AND PUT IN USER DIRECTORY switch($this->file_ext) { case "gif": $file = imagecreatetruecolor($width, $height); $new = imagecreatefromgif($this->file_tempname); $kek=imagecolorallocate($file, 255, 255, 255); imagefill($file,0,0,$kek); imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break; case "bmp": $file = imagecreatetruecolor($width, $height); $new = $this->imagecreatefrombmp($this->file_tempname); for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break; case "jpeg": case "jpg": $file = imagecreatetruecolor($width, $height); $new = imagecreatefromjpeg($this->file_tempname); for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break; case "png": $file = imagecreatetruecolor($width, $height); $new = imagecreatefrompng($this->file_tempname); for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break; } chmod($photo_dest, 0777); return true; }

Traté de editar el caso "png": parte para que coincida con el del caso "gif": código, pero el JPEG resultante es completamente blanco.

ACTUALIZAR:

Lo arreglé yo mismo.

Gracias, a todos, por contribuir!

He reemplazado:

case "png": $file = imagecreatetruecolor($width, $height); $new = imagecreatefrompng($this->file_tempname); for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break;

con:

case "png": $file = imagecreatetruecolor($width, $height); $new = imagecreatefrompng($this->file_tempname); $kek=imagecolorallocate($file, 255, 255, 255); imagefill($file,0,0,$kek); imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height); imagejpeg($file, $photo_dest, 100); ImageDestroy($new); ImageDestroy($file); break;


Ok, esta función es de php. Como nunca he trabajado con imágenes en php, entonces no lo sabía.

Entonces, las imágenes se componen de tres colores: RGB (rojo, verde, azul). En el caso de PNG, también se compone de otro filtro, llamado alfa, que es la transparencia

ASÍ, solo para PNG, debe cambiar la imagecolorallocate de la imagecolorallocatealpha($file,$i,$i,$i,$i); imagecolorallocate en la imagecolorallocate de la imagen imagecolorallocatealpha($file,$i,$i,$i,$i);

Esto debería hacer que tus imágenes sean transparentes. ¿Esto resuelve su problema o realmente los necesita en fondo blanco?

Editar: También noté que estás usando la función de imagen y en todos los casos. Cambie a la función correspondiente, es decir, imagepng, imagebmp, imagegif


Pruebe de esta manera (no probado):

case "png": $file = imagecreatetruecolor($width, $height); $new = imagecreatefrompng($this->file_tempname); imagefilledrectangle ($file, 0, 0, $width, $height, imagecolorallocate($file, 0,0,0))

(predibujar un fondo blanco en $ imagen de archivo)

Además, el for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); } parte se ve extraño.


switch($image_extension){ case ''gif'': case ''GIF'': $image_orig_resource = imagecreatefromgif($image_orig_path); break; case ''png'': case ''PNG'': $image_orig_resource = imagecreatefrompng($image_orig_path); break; case ''jpg'': case ''jpeg'': case ''JPG'': case ''JPEG'': $image_orig_resource = imagecreatefromjpeg($image_orig_path); break; default: throw new Exception(''Extension not supported''); } $image_resource = imagecreatetruecolor($width, $height); imagefill($image_resource, 0, 0, imagecolorallocate($image_resource, 255, 255, 255)); // white background; imagecopyresampled($image_resource, $image_orig_resource, 0, 0, 0, 0, $width, $height, $image_orig_width, $image_orig_height); imagejpeg($image_resource, $image_path, 100); // quality: [0-100]


Después del color verdadero de la imagen, agregue las líneas:

$file = imagecreatetruecolor($width, $height); $background = imagecolorallocate($file, 0, 0, 0); imagecolortransparent($file, $background); imagealphablending($file, false); imagesavealpha($file, true);

Esto ayudará a enviar por correo alfa para todos los formatos. Haga ping si no obtiene respuesta.