Hace poco, me veía en un proyecto en el cuál requería que una imagen esté recortada en x partes iguales.
Así, que lo más sencillo que se pudo hacer, fué crear una función php que reciba la imagen, el alto, el ancho, y el inicio desde donde cortar la imagen.

Luego, con el bucle for se haría lo demás para generar la imagen a partir de el ancho nuevo que tendrá cada imagen (nuevo ancho * el valor actual del bucle).

Como resultado, obtenemos la imagen en x partes iguales, pero con el mismo alto.

Cabe resaltar, que recomiendo usar imágenes que tengan un ancho que sea número par.

function generar_imagen($inicio,$alto,$partes,$imagen)
{
$inicio_x  = $inicio;
$inicio_y  = 0;
$ancho     = $partes;
$alto      = $alto;
$termina_x = 0;
$termina_y = 0;
$imagen = imagecreatefromjpeg($imagen);
$dst_im = imagecreatetruecolor($ancho, $alto);
$white = imagecolorallocate($dst_im, 255, 255, 255);
imagefill($dst_im, 0, 0, $white);

imagecopy($dst_im, $imagen, $termina_x, $termina_y, $inicio_x, $inicio_y, $ancho, $alto);
return $dst_im;
}


$imagen      = 'ted.jpg';
$imagen1     = getimagesize($imagen); 
$ancho       = $imagen1[0];
$alto        = $imagen1[1];

$nuevo_ancho = floor($ancho / 4);
$inicial = 0;

for($i = 1; $i <= 4; $i++):
$imagen_ = generar_imagen($nuevo_ancho*$inicial,$alto,$nuevo_ancho,$imagen);
imagejpeg($imagen_,'parte_'.$i.'.jpg',95);
$inicial++;
endfor;

Como podemos ver, hacemos uso de imagejpeg para generar los recortes y guardarlos. El código anterior, genera 4 partes iguales.

Williams Azabache Sarmiento

Que puedo decir...