2012-05-25 13 views
5

Voglio rimuovere lo sfondo bianco di qualsiasi immagine caricata sul sito funzionante su piattaforma PHP. La funzione di caricamento è terminata ma incasinata con questa funzionalità.Rimuovi immagine sfondo con php e salva png trasparente

ecco il link che ho trovato qui: Remove white background from an image and make it transparent

Ma questo sta facendo retromarcia. Voglio rimuovere lo sfondo colorato e renderlo immagine con sfondo trasparente.

+3

Si prega di indicare il motivo per il minus voto –

+0

spiegare di più e ci mostrano quello che hai fatto, e io sono non colui che ha downvoted. –

+0

Ho appena modificato la mia domanda. –

risposta

0

Utilizzare l'elaborazione delle immagini e php GD, leggere l'immagine pixel per pixel se le componenti RGB sono tutti 255 (Il pixel è bianco), impostare il canale alfa 255 (trasparente). Potrebbe essere necessario modificare il tipo di file dell'immagine a seconda che il tipo di file caricato supporti un canale alfa.

4

Poiché è necessaria solo la trasparenza a un colore, il modo più semplice è definire il bianco con imagecolortransparent(). Qualcosa di simile (codice non testato):

$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

Ho provato a dis, ma ho mostrato caratteri indesiderati sullo schermo: $ file = 'itsmehere.png'; // percorso all'immagine png $ img = imagecreatefrompng ($ file); // apri immagine $ bianco = imagecolorallocate ($ img, 255, 255, 255); imagecolortransparent ($ img, $ color); imagepng ($ img, $ output_file_name); –

+0

Si prega di elaborare 'caratteri indesiderati'. – Maerlyn

+0

È un avviso (che imagefill() ottiene una risorsa non valida), quindi un'immagine PNG. – Maerlyn

1

ottenere l'indice di colore bianco a immagine e impostarlo su trasparente.

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

in alternativa è possibile utilizzare imagecolorclosest() se non si conosce il colore esatto.

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

Prova ImageMagick ha fatto il trucco per me. Puoi anche controllare la quantità di colore che deve essere rimossa. Basta passare il percorso dell'immagine, bgcolor come una matrice di RGB e fuzz in percentuale. Finché hai installato ImageMagick sul tuo sistema/hosting. Ho avuto il mio provider di hosting installarlo per me come modulo.

sto usando la versione 6.2.8 ImageMagick

Esempio:

$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 funzione da @ geoffs3310 dovrebbe essere la risposta accettata qui, ma nota, che il png salvato non contiene un alfa canale.

per rimuovere lo sfondo e salvare il nuovo PNG come png trasparenti con alfa il seguente codice funziona

$_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); 
Problemi correlati