50 votes

Utiliser PHP pour convertir PNG en JPG avec compression ?

J'ai un tas de fichiers PNG de haute qualité. Je veux utiliser PHP pour les convertir en JPG en raison de leur taille réduite tout en maintenant la qualité. Je veux afficher les fichiers JPG sur le web.

PHP a-t-il des fonctions ou des bibliothèques pour faire cela ? La qualité/compression est-elle bonne ?

175voto

Daniel De León Points 2842

Faites ceci pour convertir en toute sécurité un PNG en JPG avec la transparence en blanc.

$image = imagecreatefrompng($filePath);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 50; // 0 = worst / smaller file, 100 = better / bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality);
imagedestroy($bg);

58voto

Andrew Moore Points 49765

Faites attention à ce que vous voulez convertir. Le JPG ne supporte pas l'alpha-transparence alors que le PNG le fait. Vous perdrez cette information.

Pour convertir, vous pouvez utiliser la fonction suivante :

// Quality is a number between 0 (best compression) and 100 (best quality)
function png2jpg($originalFile, $outputFile, $quality) {
    $image = imagecreatefrompng($originalFile);
    imagejpeg($image, $outputFile, $quality);
    imagedestroy($image);
}

Cette fonction utilise le imagecreatefrompng() y el imagejpeg() des fonctions de la bibliothèque GD.

11voto

Al. Points 2254

Il s'agit d'un petit exemple qui convertira une 'image.png' en 'image.jpg' avec une qualité d'image de 70% :

<?php
$image = imagecreatefrompng('image.png');
imagejpeg($image, 'image.jpg', 70);
imagedestroy($image);
?>

J'espère que cela vous aidera.

10voto

Patrik Points 59
<?php
function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) {
    $explode = explode(".", $imageName);
    $filetype = $explode[1];

    if ($filetype == 'jpg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        $srcImg = imagecreatefrompng("$imageDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        $srcImg = imagecreatefromgif("$imageDirectory/$imageName");
    }

    $origWidth = imagesx($srcImg);
    $origHeight = imagesy($srcImg);

    $ratio = $origWidth / $thumbWidth;
    $thumbHeight = $origHeight / $ratio;

    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
    imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight);

    if ($filetype == 'jpg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        imagepng($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        imagegif($thumbImg, "$thumbDirectory/$imageName");
    }
}
    ?>

C'est une très bonne vignette script =) Voici un exemple :

$path = Le chemin vers le dossier où se trouve l'image originale. $name = Le nom de fichier du fichier dont vous voulez faire une vignette. $thumbpath = Le chemin d'accès au répertoire dans lequel vous souhaitez que la vignette soit enregistrée. $maxwidth = la largeur maximale de la vignette en PX, par exemple 100 (qui sera de 100px).

createThumbnail($path, $name, $thumbpath, $maxwidth);

4voto

falstro Points 16545

Vous pourriez envisager de Magie de l'image qui est généralement considérée comme la bibliothèque standard de facto pour le traitement des images. Elle nécessite cependant l'installation d'un module php supplémentaire, dont on ne sait pas s'il est disponible dans l'installation par défaut.

HTH.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X