2012-05-25 11 views
5

Ich möchte den weißen Hintergrund eines Bildes auf der Website auf PHP-Plattform hochgeladen hochgeladen. Die Upload-Funktion ist erledigt, aber mit dieser Funktionalität versaut.Entfernen Bild Hintergrund mit PHP und speichern transparente PNG

Hier ist der Link, den ich hier gefunden: Remove white background from an image and make it transparent

Aber diese umgekehrt tut. Ich möchte den farbigen Hintergrund entfernen und es mit transparentem Hintergrund machen.

+3

Bitte erwähnen Sie den Grund für minus Abstimmung –

+0

mehr erklären funktioniert und zeigen Sie uns, was Sie getan haben, und ich bin nicht derjenige, der herabgestimmt hat. –

+0

Ich habe gerade meine Frage bearbeitet. –

Antwort

0

Verwenden Sie die PHP-Bildverarbeitung und GD, lesen Sie das Bild Pixel für Pixel , wenn die RGB-Komponenten alle 255 (Das Pixel ist weiß), setzen Sie den Alpha Kanal auf 255 (transparent). Sie müssen möglicherweise den Dateityp des Bildes abhängig davon ändern, ob der hochgeladene Dateityp einen Alphakanal unterstützt.

4

Da Sie nur einfarbige Transparenz benötigen, ist der einfachste Weg, Weiß mit imagecolortransparent() zu definieren. So etwas (ungeprüfter Code):

$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

Ich versuchte dis, aber zeigte unerwünschte Zeichen auf dem Bildschirm: $ file = 'itsmehere.png'; // Pfad zum PNG-Bild $ img = imagecreatefrompng ($ datei); // Bild öffnen $ white = imagecolorallocate ($ img, 255, 255, 255); imagecolortransparent ($ img, $ color); imagepng ($ img, $ ausgabedateiname); –

+0

Bitte erläutern Sie "unerwünschte Zeichen". – Maerlyn

+0

Es ist eine Warnung (dass imagefill() eine ungültige Ressource erhält), dann ein PNG-Bild. – Maerlyn

1

Den Index der weißen Farbe im Bild erhalten und auf transparent setzen.

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

Alternativ können Sie imagecolorcloses() verwenden, wenn Sie die genaue Farbe nicht kennen.

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

Versuchen Sie ImageMagick es hat den Trick für mich getan. Sie können auch die Menge an Farbe steuern, die entfernt werden muss. Übergeben Sie einfach den Bildpfad, bgcolor als ein RGB-Array und fuzz in Prozent. Solange Sie ImageMagick auf Ihrem System/Hosting installiert haben. Ich habe es von meinem Hosting-Provider für mich als Modul installiert.

Ich bin mit ImageMagick-Version 6.2.8

Beispiel:

$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

Die Funktion von @ geoffs3310 sollte hier die akzeptierte Antwort sein, aber beachten Sie, dass die png gespeichert keinen Alpha enthalten Kanal.

den Hintergrund zu entfernen und das neue png als transparente PNG mit Alpha speichern Sie den folgenden Code

$_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); 
Verwandte Themen