web-dev-qa-db-fra.com

Créez un fichier png transparent en utilisant PHP

Actuellement, je voudrais créer un png transparent avec la plus basse qualité.

Le 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');
?>

Cependant, il y a quelques problèmes:

  1. Dois-je spécifier un fichier png avant de créer un nouveau fichier? Ou puis-je créer sans aucun fichier png existant?

    Avertissement: imagecreatefrompng (test.png): échec d'ouverture du flux: aucun fichier ou répertoire de ce type dans

    C:\DSPadmin\DEV\ajax_optipng1.5\create.php sur la ligne 4

  2. Bien qu'il y ait un message d'erreur, il génère toujours un fichier png.Cependant, ce que j'ai trouvé est que le fichier est une image de couleur noire, dois-je spécifier un paramètre pour le rendre transparent?

Merci.

14
user782104

Pour 1) imagecreatefrompng('test.png') tente d'ouvrir le fichier test.png Qui peut ensuite être édité avec les fonctions Gd.

To 2) Pour activer la sauvegarde du canal alpha, imagesavealpha($img, true); est utilisée. Le code suivant crée une image transparente de taille 200x200px en activant l'enregistrement alpha et en la remplissant de transparence.

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

Jeter un coup d'œil à:

Un exemple de fonction copie des fichiers PNG transparents:

    <?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");
    ?>
7
neuraminidase7

1) Vous pouvez créer un nouveau fichier png sans aucun fichier existant. 2) Vous obtenez une image en couleur noire car vous utilisez imagecreatetruecolor();. Il crée une image de la plus haute qualité avec un fond noir. Comme vous avez besoin d'une image de la plus basse qualité, utilisez 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 );
?>

Vous pouvez en savoir plus dans cet article: Comment créer une image en utilisant PHP

2
user3051471