Frage

Ich bin GD unter Verwendung von Bildern, um die Größe und zu konvertieren, aber während meiner Tests fand ich eine seltsame Verhalten bei JPEG der transparenten PNG zu konvertieren. Laut Handbuch ImageAlphaBlending () ist standardmäßig aktiviert, sondern um die Transparenz zu bewahren I ImageSaveAlpha () auf true (die wiederum erfordert, dass ich ImageAlphaBlending () auf false gesetzt). So ist die richtige Art und Weise sollte sein:

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, false);
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);

Allerdings, wenn ich es tun die „richtige“ Art und Weise die ganze Transparenz Bereich kommt im JPEG schwarz auf. Dies scheint (mit weißen Hintergrund auf transparenten Bereichen JPEG) zu arbeiten auf meinen Tests:

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, true); // true by default, but still...
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);

Kann jemand bitte aufklären mich zu diesem Thema?

War es hilfreich?

Lösung

Es hängt wahrscheinlich von Ihrem PNG. Eine PNG-Datei kann eine Hintergrundfarbe enthalten, die dazu verwendet werden können, wenn Transparenz nicht funktioniert. Ihre PNG hat wahrscheinlich einen weißen Hintergrund. Wenn Sie imageaplhablending auf true gesetzt nimmt er die Hintergrundfarbe von Ihrem PNG und verwendet, dass, wenn die JPEG-Schreiben. Wenn Sie es auf false gesetzt nimmt es die Standardeinstellung für GD, die schwarz ist.

Sie können es versuchen, für sich selbst. Erstellen Sie eine transparente PNG und speichern Sie sie mit einem orangefarbenen oder rosa Hintergrundfarbe. Ihr zweites Beispiel soll diese Farbe zeigen.

Durch die Art und Weise, der PNG-Hintergrundfarbe Trick ist ein netter für IE6 Bilder. IE6 unterstützt nicht transparent PNGs, so dass es ihnen mit dem, was Hintergrund angezeigt wird Farbe, die Sie gespeichert sie mit. Wenn transparente PNGs zu speichern, speichern Sie sie mit der gleichen Hintergrundfarbe wie Ihre Website. Es sieht besser als weiße oder schwarze Kästen um Ihre PNG-Bilder in IE6.

Andere Tipps

Wenn Sie von PNG konvertieren (oder GIF) in JPG-Dateien, sollten Sie wahrscheinlich das endgültige Bild auf ein anderes Bild kopieren, das mit weißen gefüllt ist, mit imagecopy ($image ist jedes Bild bereits mit GD erstellt):

// Create a new background
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));

// Allocate the color
$color = imagecolorallocate($bg, 255, 255, 255);

// Fill the background with white
imagefill($bg, 0, 0, $color);

// Alpha blending must be enabled on the background!
imagealphablending($bg, TRUE);

// Copy the current image onto the opaque background
if (imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)))
{
    // Replace the image with the background copy
    imagedestroy($image);
    $image = $bg;
}

Ich hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top