car.jpg
Perspective distort an image
<?php

// Draw a red outline - just to confirm area to distort
exec("convert src.jpg -draw \"fill none stroke red polygon 0,0 0,239, 319,239, 319,0\" before.jpg ");

// Draw the blue outline to show the distortion
exec("convert src.jpg -draw \"fill none stroke blue polygon 0,0 0,239, 319,189, 319,50\" after.jpg");

// Carry out the distortion ( you can not split the co-ordinates onto seperate lines )
$cmd " src.jpg -matte -background '#262b38' -virtual-pixel background ".
" -distort Perspective '0,0 0,239, 319,239, 319,0, 0,0 0,239, 319,189, 319,50' ";
exec("convert $cmd car.jpg");

// Delete the two tempory images
unlink("before.jpg");
unlink("after.jpg");
?>

The code has now changed around release 6.3.5 - old method below

<?php

// Draw a red outline - just to confirm area to distort
exec("convert src.jpg -draw \"fill none stroke red polygon 0,0 0,239, 319,239, 319,0\" before.jpg ");

// Draw the blue outline to show the distortion
exec("convert src.jpg -draw \"fill none stroke blue polygon 0,0 0,239, 319,189, 319,50\" after.jpg");

// Carry out the distortion
$cmd " src.jpg -matte -background xc:#262b38 -virtual-pixel background ".
" -distort Perspective '0,0 0,0 0,239 0,239 319,239 319,189 319,0 319,50' ";
exec("convert $cmd car.jpg");

// Delete the two tempory images
unlink("before.jpg");
unlink("after.jpg");

?>

Old method using the FX command ( fx is quite slow )- you need a "trapezoidal" type gradiant to get the image to distort.

<?php

exec
("convert src.jpg -resize 640x480 -rotate 270 \\
-bordercolor white -border 10x10 src_border2.bmp"
);

exec("convert map_p_trapezoidal1.png \\
-resize 500!x660! temp_mask2.png"
);

exec("convert -size 660x500 -background white src_border2.bmp \\
temp_mask2.png -fx \"p{v*w,j}\" temp2.bmp "
);

exec("convert temp2.bmp -rotate 90 -resize 360!x240! car.jpg");

unlink("src_border2.bmp");
unlink("temp_mask2.png");
unlink("temp2.bmp");
?>

Back to the other examples index