2012-05-25 120 views
5

Quiero eliminar el fondo blanco de cualquier imagen cargada en el sitio que trabaja en la plataforma PHP. La función de carga está hecha, pero está mal con esta funcionalidad.Eliminar el fondo de la imagen con php y guardar png transparente

Aquí está el enlace que he encontrado aquí: Remove white background from an image and make it transparent

Pero esto está haciendo inversa. Quiero eliminar el fondo de color y hacerlo imagen con fondo transparente.

+3

favor mencionar la razón de menos voto –

+0

explicar más y nos muestran lo que han hecho, y estoy no el que rechazó. –

+0

Acabo de editar mi pregunta. –

Respuesta

0

Utilice el procesamiento de imágenes php y GD, lea el píxel de la imagen por pixel si los componentes RGB son todos 255 (el píxel es blanco), establecer el canal alfa a 255 (transparente). Es posible que tenga que cambiar el tipo de archivo de la imagen dependiendo de si el tipo de archivo cargado admite un canal alfa.

4

Como solo necesita la transparencia de un solo color, la forma más fácil es definir el blanco con imagecolortransparent(). Algo como esto (código no probado):

$img = imagecreatefromstring($your_image); //or whatever loading function you need 
$white = imagecolorallocate($img, 255, 255, 255); 
imagecolortransparent($img, $white); 
imagepng($img, $output_file_name); 
+0

Intenté dis pero mostré caracteres no deseados en la pantalla: $ file = 'itsmehere.png'; // ruta a la imagen de png $ img = imagecreatefrompng ($ file); // imagen abierta $ white = imagecolorallocate ($ img, 255, 255, 255); imagecolortransparent ($ img, $ color); imagepng ($ img, $ output_file_name); –

+0

Por favor, elabore sobre 'caracteres no deseados'. – Maerlyn

+0

Es una advertencia (que imagefill() obtiene un recurso no válido), luego una imagen PNG. – Maerlyn

1

obtener el índice de color blanco en la imagen y establecerlo en transparente.

$whiteColorIndex = imagecolorexact($img,255,255,255); 
$whiteColor = imagecolorsforindex($img,$whiteColorIndex); 
imagecolortransparent($img,$whiteColor); 

puede utilizar alternativamente imagecolorclosest() si usted no sabe el color exacto.

4
function transparent_background($filename, $color) 
{ 
    $img = imagecreatefrompng('image.png'); //or whatever loading function you need 
    $colors = explode(',', $color); 
    $remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]); 
    imagecolortransparent($img, $remove); 
    imagepng($img, $_SERVER['DOCUMENT_ROOT'].'/'.$filename); 
} 

transparent_background('logo_100x100.png', '255,255,255'); 
2

Prueba ImageMagick que funcionó bien para mí. También puede controlar la cantidad de color que debe eliminarse. Simplemente pase la ruta de la imagen, bgcolor como una matriz de RGB y fuzz en porcentaje. Siempre que tenga ImageMagick instalado en su sistema/hosting. Hice que mi proveedor de hosting lo instalara como un módulo.

estoy usando la versión 6.2.8 ImageMagick

Ejemplo:

$image = "/path/to/your/image.jpg"; 
    $bgcolor = array("red" => "255", "green" => "255", "blue" => "255"); 
    $fuzz = 9; 
    remove_image_background($image, $bgcolor, $fuzz); 

     protected function remove_image_background($image, $bgcolor, $fuzz) 
     { 
      $image = shell_exec('convert '.$image.' -fuzz '.$fuzz.'% -transparent "rgb('.$bgcolor['red'].','.$bgcolor['green'].','.$bgcolor['blue'].')" '.$image.''); 
      return $image; 
     } 
0

La función de @ geoffs3310 debería ser la respuesta aceptada aquí, pero tenga en cuenta, que el png salvado no contiene un alfa canal.

para eliminar el fondo y guardar la nueva png como un png transparente con alfa el siguiente código funciona

$_filename='/home/files/IMAGE.png'; 
$_backgroundColour='0,0,0'; 
$_img = imagecreatefrompng($_filename); 
$_backgroundColours = explode(',', $_backgroundColour); 
$_removeColour = imagecolorallocate($_img, (int)$_backgroundColours[0], (int)$_backgroundColours[1], (int)$_backgroundColours[2]); 
imagecolortransparent($_img, $_removeColour); 
imagesavealpha($_img, true); 
$_transColor = imagecolorallocatealpha($_img, 0, 0, 0, 127); 
imagefill($_img, 0, 0, $_transColor); 
imagepng($_img, $_filename); 
Cuestiones relacionadas