5 Stimmen

Hintergrundtransparenz in imagerotate()

Seit 2 Tagen versuche ich, den Hintergrund nach dem Drehen eines Bildes mit der PHP-GD-Funktion imagerotate() durchsichtig zu machen.

Aber zu meiner großen Enttäuschung funktioniert es überhaupt nicht.

Es wird nur ein schwarzer Hintergrund dahinter angezeigt.

Hier ist mein Code -

$patchImageS    =   'image.png'; // the image to be patched over the final bg
$patchImage =   imagecreatefrompng($patchImageS); // resource of image to be patched
$patchImage     =   imagerotate($patchImage, 23, 0, 0);
imagepng($patchImage,'tt.png');

Ich habe versucht, die Parameter, die in der Funktion übergeben werden, zu ändern

imagerotate($patchImage, 23, 5, 0);

imagerotate($patchImage, 23, 0, 5);

Für jede Hilfe wären wir Ihnen sehr dankbar.

7voto

z33k3r Punkte 86

Nach einer Reihe von zu 99 % fertigen Antworten habe ich nun die Lösung gefunden:

// Create, or create from image, a PNG canvas
$png = imagecreatetruecolor($width, $height);

// Preserve transparency
imagesavealpha($png , true);
$pngTransparency = imagecolorallocatealpha($png , 0, 0, 0, 127);
imagefill($png , 0, 0, $pngTransparency);

// Rotate the canvas including the required transparent "color"
$png = imagerotate($png, $rotationAmount, $pngTransparency);

// Set your appropriate header
header('Content-Type: image/png');

// Render canvas to the browser
imagepng($png);

// Clean up
imagedestroy($png);

Der Schlüssel dazu ist, die Funktion imagecolorallocatealpha() in den Aufruf imagerotate() einzubinden...

4voto

oezi Punkte 49639

Suchen Sie nach imagesavealpha() in der php-Dokumentation - ich glaube, das ist es, wonach Sie suchen.

EDIT: Hier ist ein Beispiel:

$png = imagecreatefrompng('./alphachannel_example.png');

// Do required operations
$png = imagerotate($png, 23, 0, 0);

// Turn off alpha blending and set alpha flag
imagealphablending($png, false);
imagesavealpha($png, true);

// Output image to browser
header('Content-Type: image/png');

imagepng($png);
imagedestroy($png);

0voto

Lepy Punkte 95

Für alle, die Probleme haben mit imagecopyresampled o imagerotate mit schwarzen Balken auf dem Hintergrund, habe ich hier ein Codebeispiel gefunden:

https://qna.habr.com/q/646622#answer_1417035

        // get image sizes (X,Y)
        $wx = imagesx($imageW);
        $wy = imagesy($imageW);

        // create a new image from the sizes on transparent canvas
        $new = imagecreatetruecolor($wx, $wy);

        $transparent = imagecolorallocatealpha($new, 0, 0, 0, 127);
        $rotate = imagerotate($imageW, 280, $transparent);
        imagealphablending($rotate, true);
        imagesavealpha($rotate, true);

        // get the newest image X and Y
        $ix = imagesx($rotate);
        $iy = imagesy($rotate);

        //copy the image to the canvas
        imagecopyresampled($destImg, $rotate, 940, 2050, 0, 0, $ix, $iy, $ix, $iy);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X