La classe PHP PSD Reader permet de convertir un fichier au format Photoshop PSD en image JPG (JPEG plus précisément).
Les utilisations de cette classes sont nombreux et intéressants.
Il devient par exemple possible sur un serveur stockant des PSD de générer des miniatures pour une meilleure navigation, ou bien de proposer sur un site de partage d'image le format .psd en entrée avec une conversion en JPG.
Pour utiliser la classe, téléchargez-la puis créer un fichier php dans le même dossier de destination que notre fichier test.psd :
<?php include_once('classPhpPsdReader.php'); header("Content-type: image/jpeg"); echo imagejpeg(imagecreatefrompsd('test.psd')); ?>
Ne rien placer avant l'instruction header ! Cela générerait une erreur du type : "headers already sent by".
Voici le résultat :
Pour obtenir une sortie au format PNG, il vous suffit d'utiliser la fonction imagejpeg par imagepng :
<?php include_once('classPhpPsdReader.php'); header("Content-type: image/png"); echo imagepng(imagecreatefrompsd('test.psd')); ?>
J'ai personnellement testé cette classe avec succès sur un document PSD crée avec Adobe Photoshop CS4.
Le rendu de l'image équivaut à la fonction "aplatir l'image" de Photoshop, les calques masqués ne seront par exemple pas affichés.
Attention toutefois si la résolution de votre fichier PSD est élevée : les ressources consommées par votre serveur seront importantes (CPU, mémoire).
Pensez également à augmenter le temps maximum d'exécution défini dans php.ini (30 secondes par défaut) si celui-ci est insuffisant.
Depuis Windows, vous pouvez également utiliser l'utilitaire gratuit Batch PSD To JPG dont Eric a déjà parlé.
Télécharger la classe PHP PSD Reader (mirroir v1.3)
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
8 commentaires
Mais c'est excellent ça !
Ça m'aurait facilité la vie quelques fois et ça va probablement me la faciliter à partir de maintenant !
Par contre, peut-être augmenter la mémoire aussi, exemple :
---
ini_set("memory_limit","12M");
---
À mon avis des gros psd ça doit prendre pas mal de mémoire pendant le traitement sur le serveur (en plus de la charge cpu). ^^
Moue, ça se démerde comment pour les images en 16 bits ? commence ça se passe pour les profils ICC ?
@Grégoire Lannoy : je n'ai pas réalisé de test avancés tels que pour les profils, si tu en fait les résultats seraient intéressants
Rha bien ! des lib php qui commencent à devenir intéressante 🙂 sinon pour les développeurs qui souhaitent faire évoluer cette excellente base, faites un tour ici : http://pypsd.googlecode.com/svn/trunk/docs/Photoshop_File_Formats.pdf
""
Y'a pas une erreur ? image/jpeg pour un PNG ?
Hi!
Thanks for your article. Always nice to read, great article and instructions.
Please note that the number of layers used in the .psd does not affect the execution time of the script, only the resolution does. Layers are ignored: the script reads an "image summary" at the end of the .psd file.
The main benefit for this class that your not dependant on any libraries but GD. This is usually installed out of the box. If you need more speed, and other libraries are available to you, you can always fall back to imagemagick.
@MyGB : c'est corrigé
@Tim de Koining : thank you for your precision and your feedback !