2013-06-24 11 views
6

Derzeit möchte ich ein transparentes PNG mit der niedrigsten Qualität erstellen.Erstellen Sie eine transparente PNG-Datei mit PHP

Der Code:

<?php 
function createImg ($src, $dst, $width, $height, $quality) { 
    $newImage = imagecreatetruecolor($width,$height); 
    $source = imagecreatefrompng($src); //imagecreatefrompng() returns an image identifier representing the image obtained from the given filename. 
    imagecopyresampled($newImage,$source,0,0,0,0,$width,$height,$width,$height); 
    imagepng($newImage,$dst,$quality);  //imagepng() creates a PNG file from the given image. 
    return $dst; 
} 

createImg ('test.png','test.png','1920','1080','1'); 
?> 

Allerdings gibt es einige Probleme:

  1. Muss ich bestimmte eine PNG-Datei benötigen, bevor sie eine neue Datei zu erstellen? Oder kann ich ohne vorhandene PNG-Datei erstellen?

    Warning: imagecreatefrompng (test.png): failed to open stream: Datei oder ein Verzeichnis in

    C: \ DSPadmin \ DEV \ ajax_optipng1.5 \ create.php auf Leitung 4

  2. Obwohl es eine Fehlermeldung gibt, erzeugt es immer noch eine PNG-Datei. Was ich jedoch gefunden habe, ist, dass die Datei ein schwarzes Farbbild ist. Muss ich irgendeinen Parameter spezifizieren, um ihn transparent zu machen?

Danke.

Antwort

25

Zu 1) imagecreatefrompng('test.png') versucht, die Datei test.png zu öffnen, die dann mit GD-Funktionen bearbeitet werden kann.

Zu 2) Zum Speichern des Alphakanals imagesavealpha($img, true); wird verwendet. Der folgende Code erstellt ein 200x200px großes transparentes Bild, indem Sie Alpha speichern und mit Transparenz füllen.

<?php 
$img = imagecreatetruecolor(200, 200); 
imagesavealpha($img, true); 
$color = imagecolorallocatealpha($img, 0, 0, 0, 127); 
imagefill($img, 0, 0, $color); 
imagepng($img, 'test.png'); 
+0

Vielen Dank Ihre Hilfe! Würde es Ihnen etwas ausmachen, mir beizubringen, wie Sie die Größe der PNG-Datei minimieren können?Ist das Einstellen der Qualitätsstufe "9" in der imagepng-Funktion das einzige, was ich tun kann? danke – user782104

+1

'imagepng' s Standard "Qualität" Einstellung (die Kompressionen genannt werden sollte, da 'png's Kompressionen verlustfrei ist) ist 9 (afaik, ich habe ohne Set-Qualität (234' Bytes'), Qualität 0 (ein paar hundert KB) und eine Einstellung von 9 (234 Bytes)). Ich denke, das ist der beste GD. –

+0

das macht meine schwarzen Linien verschwinden –

5

Werfen Sie einen Blick auf:

Ein Beispiel Funktion kopiert transparente PNG-Dateien:

<?php 
    function copyTransparent($src, $output) 
    { 
     $dimensions = getimagesize($src); 
     $x = $dimensions[0]; 
     $y = $dimensions[1]; 
     $im = imagecreatetruecolor($x,$y); 
     $src_ = imagecreatefrompng($src); 
     // Prepare alpha channel for transparent background 
     $alpha_channel = imagecolorallocatealpha($im, 0, 0, 0, 127); 
     imagecolortransparent($im, $alpha_channel); 
     // Fill image 
     imagefill($im, 0, 0, $alpha_channel); 
     // Copy from other 
     imagecopy($im,$src_, 0, 0, 0, 0, $x, $y); 
     // Save transparency 
     imagesavealpha($im,true); 
     // Save PNG 
     imagepng($im,$output,9); 
     imagedestroy($im); 
    } 
    $png = 'test.png'; 

    copyTransparent($png,"png.png"); 
    ?> 
2

1) Sie können eine neue PNG-Datei ohne eine vorhandene erstellen. 2) Sie erhalten ein schwarzes Farbbild, weil Sie imagecreatetruecolor(); verwenden. Es erzeugt ein Bild höchster Qualität mit einem schwarzen Hintergrund. Wie Sie die niedrigste Bildqualität Verwendung imagecreate();

<?php 
$tt_image = imagecreate(100, 50); /* width, height */ 
$background = imagecolorallocatealpha($tt_image, 0, 0, 255, 127); /* In RGB colors- (Red, Green, Blue, Transparency) */ 
header("Content-type: image/png"); 
imagepng($tt_image); 
imagecolordeallocate($background); 
imagedestroy($tt_image); 
?> 

benötigen, können Sie mehr in diesem Artikel lesen: How to Create an Image Using PHP

1

können Sie die Konsole Dienstprogramm convert, die Teil von ImageMagick ist - in den meisten Linux-repos und in homebrew für OSX:

exec('convert image.png -transparent black image_transparent.png') 

In diesem Beispiel black ist die transparente Farbe.