Обратите внимание, что CSS-решения на самом деле загружают все изображение, а затем показывают только его верхнюю часть.
В зависимости от использования я бы предложил использовать сценарий динамической обрезки или кэширование предварительно обрезанных изображений.
Сценарий обрезки будет выглядеть примерно так:
<?php
// get parameters
$fname = (string) $_GET['f'];
$top = (int) $_GET['h'];
// load original
$old = imagecreatefromjpeg($fname);
list($width, $height) = getimagesize($fname);
// N.B. this reloads the whole image! Any way to get
// width/height directly from $old resource handle??
// create new canvas
$new = imagecreatetruecolor($width, $top);
// copy portion of image
imagecopy($dest, $src, 0, 0, 0, 0, $width, $top);
// Output and free from memory
header('Content-Type: image/jpeg');
imagejpg($new);
?>
и будет вызываться с вашей веб-страницы как:
<img src="crop.php?f=myimg.jpg&h=100" />