Some psd observations

psd files cause problems; mainly due to the layers. The examples below are from a psd file with a transparent background layer, an image of some boots with the area around the boots erased to background ( transparent ) and a text layer.
I have added the border on display so the transparent areas show up.


NOTE: When you look at the first example you will see the code created 4 images the finished image and all the layers; so for example this psd file has:
layer[0] = The complete image
layer[1] = The background layer
layer[2] = The image layer
layer[3] = The text layer
So to convert the complete image and ignore the layers you would use:

<?php 
exec
("convert boots.psd[0] -thumbnail 340x340 boots_png.png");
?>

This is only for images that have not been "merged" as they will only have the one layer.


Converting to a png gives 4 different images named boots_png-0.png etc.

<?php 
exec
("convert boots.psd -thumbnail 340x340 boots_png.png");
?>

psd/boots_png-0.png psd/boots_png-1.png psd/boots_png-2.png psd/boots_png-3.png

Converting to a gif gives this "flashing" image.

<?php
exec
("convert boots.psd -thumbnail 340x340 boots_gif.gif");
?>

psd/boots_gif.gif

Converting to a jpg gives 4 different images named boots_jpg-0.jpg etc.

<?php 
exec
("convert boots.psd -thumbnail 340x340 boots_jpg.jpg");
?>

psd/boots_jpg-0.jpg psd/boots_jpg-1.jpg psd/boots_jpg-2.jpg psd/boots_jpg-3.jpg

Note: The background/transparency comes out black as jpg does not support transparency


Using an the same image but merging the layers down first


Converting to a png gives 2 images named boots_png-0.png etc.

<?php 
exec
("convert boots_merged.psd -thumbnail 340x340 boots_merged_png.png");
?>

psd/boots_merged_png-0.png

Converting to a gif still gives the "flashing" image.

<?php
exec
("convert boots_merged.psd -thumbnail 340x340 boots_merged_gif.gif");
?>

psd/boots_merged_gif.gif

Converting to a jpg gives 2 images named boots_jpg-0.jpg etc.

<?php 
exec
("convert boots_merged.psd -thumbnail 340x340 boots_merged_jpg.jpg");
?>

psd/boots_merged_jpg-0.jpg psd/boots_merged_jpg-1.jpg

Just working on the one layer of the unmerged image


<?php 
exec
("convert 'boots.psd[2]' boots_layer_2.png");
?>

psd/boots_layer_2.png


Merge all the psd layers into one and save as a jpg image


<?php
exec
("convert boots.psd -flatten flat_boots.jpg");
?>

psd/flat_boots.jpg



One method of converting a psd image into a png with transparency.

There are some assumptions being mage with this code - you know which layers you want to work on; which order they are in and where there are supposed to be on the image !
But it will work with this code:


Note: this has used ImageMagick to resize or whatever other comands have been done

<?php
$size 
getimagesize("boots_png-2.png");

exec("convert -size '$size[0]'x'$size[1]' xc:none \\
boots_png-2.png -gravity center -composite boots_png-3.png -gravity south \\
-composite composite_boots.png"
); 
?>

psd/composite_boots.png

Note: this is working directly with the psd layers

<?php
$size 
getimagesize("boots.psd");

exec("convert -size '$size[0]'x'$size[1]' xc:none \\
'boots.psd[2]' -gravity center -composite 'boots.psd[3]' \\
-gravity south -composite composite_boots_psd.png"
); 
 
?>

psd/composite_boots.png