J'ai un tas de fichiers PNG de haute qualité. Je veux utiliser PHP pour les convertir en JPG en raison de sa taille de fichier plus petite tout en maintenant la qualité. Je veux afficher les fichiers JPG sur le Web.
PHP a-t-il des fonctions/bibliothèques pour le faire? La qualité/compression est-elle bonne?
Faites cela 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);
Faites attention à ce que vous voulez convertir. JPG ne prend pas en charge la transparence alpha, contrairement à PNG. 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 les fonctions imagecreatefrompng()
et imagejpeg()
de 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);
?>
J'espère que ça t'as aidé
<?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");
}
}
?>
Ceci est un très bon script miniature =) Voici un exemple:
$ path = Le chemin vers le dossier où se trouve l'image d'origine. $ name = Le nom du fichier dont vous souhaitez créer une miniature. $ thumbpath = Chemin d'accès au répertoire dans lequel vous souhaitez enregistrer la miniature. $ maxwidth = la largeur maximale de la vignette dans PX par exemple. 100 (qui sera 100px).
createThumbnail($path, $name, $thumbpath, $maxwidth);
Vous voudrez peut-être examiner Image Magick , généralement considéré comme la bibliothèque standard de facto pour le traitement d'image. Nécessite un module php supplémentaire pour être installé cependant, je ne sais pas si certains/qui sont disponibles dans une installation par défaut.
HTH.
PHP a quelques fonctions de traitement d'image ainsi que imagecreatefrompng
et imagejpeg
fonction . Le premier créera une représentation interne d'un fichier image PNG tandis que le second est utilisé pour enregistrer cette représentation en tant que fichier image JPEG.
Voir cette liste de bibliothèques d'images php . Fondamentalement, c'est Gd ou Imagemagick.
Je sais que ce n'est pas une réponse exacte à l'OP, mais comme des réponses ont déjà été données ...
Avez-vous vraiment besoin de le faire en PHP?
Ce que je veux dire, c'est que si vous avez besoin de convertir beaucoup d'images, le faire en PHP n'est peut-être pas le meilleur moyen: 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 n'en suis pas sûr (si vous faites une comparaison entre Gd et d'autres solutions, je suis très intéressé par les résultats ;-))
Une autre approche, n'utilisant pas PHP, serait d'utiliser Image Magick via la ligne de commande (et non pas comme une extension PHP comme d'autres personnes ont suggéré)
Vous devez écrire un script Shell qui passe par tous les .png
fichiers et les donne à
convert
pour créer un nouveau .jpg
fichier pour chaque .png
fichiermogrify
pour travailler directement sur le fichier d'origine et le remplacer.
En guise de note: si vous faites cela directement sur votre serveur de production, vous pouvez mettre un peu de temps entre les bouquets de conversions, pour le laisser refroidir un peu parfois ^^
J'ai utilisé le script Shell + convert
/mogrify
plusieurs fois (en les faisant exécuter pendant quelque chose comme 10 heures une fois) , et ils font très bien le travail :-)