Esta es la forma en que lo haría con Imagemagick y php:
// Canvas the same size as the final image
exec("convert -size 800x533 xc:white white.jpg");
// The mask
exec("convert -size 800x533 xc:none -draw \"fill black circle 400,265 400,50\" write_mask.png");
// Cut the whole out of the canvas
exec("composite -compose Dst_Out write_mask.png white.jpg -matte step.png");
// Put the canvas over the image and trim off excess white background
exec("convert IMG_5745.jpg step.png -composite -trim final.jpg");
usted debería ser capaz de seguir el proceso?
Limpiar imágenes temporales después - Tiendo a guardar las imágenes temporales en un formato .miff y luego escribir un ciclo para eliminar todas las imágenes .miff después. Alternativamente déjelos y si usa el mismo nombre para las imágenes temporales, se sobrescribirán cada vez que se ejecute el código.
¿Cómo harías esto con dos imágenes? En lugar de un círculo, con una imagen transparente –
Esta solución no funciona para una imagen png con canal alfa – Dmitry