Вот так на GD2 например:
function createsquarethumbnail($filetype, $origfile, $thumbfile, $new_size) {
$compression = "gd2";
if ($filetype == 1) { $origimage = imagecreatefromgif($origfile); }
elseif ($filetype == 2) { $origimage = imagecreatefromjpeg($origfile); }
elseif ($filetype == 3) { $origimage = imagecreatefrompng($origfile); }
$old_x = imagesx($origimage);
$old_y = imagesy($origimage);
$x = 0; $y = 0;
if ($old_x > $old_y) {
$x = ceil(($old_x - $old_y) / 2);
$old_x = $old_y;
} elseif ($old_y > $old_x) {
$y = ceil(($old_y - $old_x) / 2);
$old_y = $old_x;
}
$new_image = imagecreatetruecolor($new_size,$new_size);
if ($filetype == 3 && $compression != "gd1") {
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
}
imagecopyresampled($new_image,$origimage,0,0,$x,$y,$new_size,$new_size,$old_x,$old_y);
if ($filetype == 1) { imagegif($new_image,$thumbfile,100); }
elseif ($filetype == 2) { imagejpeg($new_image,$thumbfile,100); }
elseif ($filetype == 3) { imagepng($new_image,$thumbfile,5); }
imagedestroy($origimage);
imagedestroy($new_image);
}
Пример:
createsquarethumbnail(3, getcwd()."/photo.png", getcwd()."/photo_box.png", 150);
для PNG например.
Если надо на ImageMagick пишите в комментариях. Прочту сделаю.