Question

J'ai beaucoup de fichiers PNG de haute qualité. Je souhaite utiliser PHP pour les convertir au format JPG en raison de la taille réduite des fichiers tout en préservant la qualité. Je souhaite afficher les fichiers JPG sur le Web.

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

Était-ce utile?

La solution

Faites ceci pour convertir en toute sécurité un fichier PNG au format 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);

Autres conseils

Faites attention à ce que vous voulez convertir. JPG ne prend pas en charge la transparence alpha, contrairement à PNG. Vous allez perdre 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 () et le imagejpeg () fonctionne depuis la bibliothèque GD.

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

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

L’espoir que cela aide

<?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 un très bon script miniature =) Voici un exemple:

$ path = Le chemin du dossier où se trouve la photo d'origine. $ name = Le nom du fichier dont vous voulez faire une vignette. $ thumbpath = Le chemin du répertoire dans lequel vous voulez que la vignette soit sauvegardée. $ maxwidth = la largeur maximale de la vignette dans PX, par exemple. 100 (ce qui sera 100px).

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

Vous voudrez peut-être regarder dans la Image Magick , généralement prise en compte la bibliothèque standard de facto pour le traitement d'images. Nécessite toutefois l’installation d’un module php supplémentaire, ne sachant pas si / est disponible dans une installation par défaut.

HTH.

PHP dispose de fonctions de traitement des images , ainsi que du imagecreatefrompng et fonction imagejpeg . Le premier crée une représentation interne d'un fichier image PNG, le second est utilisé pour enregistrer cette représentation au format JPEG.

Voir cette liste de bibliothèques d'images php . C'est fondamentalement GD ou Imagemagick.

Je sais que ce n'est pas une réponse exacte au PO, mais comme des réponses ont déjà été données ...

Avez-vous vraiment besoin de faire cela en PHP?
Ce que je veux dire, c'est que si vous devez convertir beaucoup d'images, le faire en PHP n'est peut-être pas la meilleure solution. Vous serez confronté à memory_limit , max_execution_time , ...

Je dirais également que GD pourrait ne pas vous offrir le meilleur rapport qualité / taille; mais je ne suis pas sûr à ce sujet (si vous faites une comparaison entre GD et d’autres solutions, je suis très intéressé par les résultats ;-))

Une autre approche, sans PHP, consisterait à utiliser Image Magick via le ligne de commande (et non comme une extension PHP comme le suggèrent d’autres personnes)

Vous devez écrire un script shell qui passe en revue tous les fichiers .png , puis les donne à

.
  • convertir pour créer un nouveau Fichier .jpg pour chaque fichier .png
  • ou mogrifiez pour travailler directement sur l'original fichier et le remplacer.


Sidenote: si vous faites cela directement sur votre serveur de production, vous pouvez laisser un peu de temps de sommeil entre les grappes de conversions, afin de le laisser refroidir un peu parfois ^^


J'ai utilisé le script shell + convertir / mogrify à quelques reprises (les ayant exécutés pendant environ 10 heures une fois) , et ils fait le travail vraiment bien: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top