Me toca hacer un script que tome 3 imágenes y las combine mediante PHP  y la librería GD para ir creando imágenes personalizadas para cada producto en un proyecto de mi trabajo.
La gracia de esto viene a ser que hay una imagen sólida y las 2 que se apilan son PNG transparentes.

/**
Debemos usar imagecopyresampled() en lugar de imagecopy() ya
que las imagenes transparentes van a rellenar su canal
alpha con negro...
 */

//tomamos la imagen "base"
$tapa_caratula = imagecreatefrompng("tapa_caratula.png");

// Creamos las dos imágenes a utilizar
$caratula_base = imagecreatefrompng("caratula_base.png");
$icono = imagecreatefrompng("icono.png");

// Copiamos una de las imágenes sobre la otra.
// imagecopyresampled( "img_origen", "imagen_que_nueva", pos x imagen_que_nueva, pos y imagen_que_nueva, pos_x_img_origen, pos_y_img_origen, largo_para_imagen_nueva, ancho_para_imagen_nueva, largo_para_imagen_origen, largo_para_imagen_origen);
imagecopyresampled(
    $tapa_caratula,
    $caratula_base,
    0,
    0,
    0,
    0,
    imagesx($caratula_base),
    imagesy($caratula_base),
    imagesx($caratula_base),
    imagesy($caratula_base)
);

imagecopyresampled(
    $tapa_caratula,
    $icono,
    (imagesx($caratula_base) / 2) - (imagesx($icono) / 2) + 10,
    80,
    0,
    0,
    imagesx($icono),
    imagesy($icono),
    imagesx($icono),
    imagesy($icono)
);

// Damos salida a la imagen final a un archivo
imagepng($tapa_caratula, "salida.png");

// Destruimos las imágenes
imagedestroy($tapa_caratula);
imagedestroy($caratula_base);
imagedestroy($icono);

Descargar Ejemplo