Мой совет аналогичен предыдущему, но советовал бы
imagemagick, т.к. лично имею опыт работы с ним, а также php обертку для него -
phmagick, от которой поняв весь процесс позже можно будет отказаться.
Кратко, все сводится к тому, что php вызывает методом exec() утилиту операционной системы, которая уже обрабатывает картинку, но не сам php, и уж тем более css js html...
По той же песне можно работать и с видео через ffmpeg.
Рабочие функции для обрезки и ресайза картинок, настрой и подставь свои пути библиотеки (win style: C:/programs/imagemagick).
/**
* Crop images
* @param $file string Path to cropping file
* @param $left int Pixels to left margin
* @param $top int Pixels to top margin
* @param $width int Width of final images in pixels
* @param $height int Height of final images in pixels
*/
public static function crop($file, $left, $top, $width, $height) {
exec(strtr('{imagick}convert {file} -gravity NorthWest -crop {w}x{h}+{l}+{t} {file} 2>&1', array(
'{imagick}' => '/usr/bin',
'{file}' => str_replace(' ', '\\ ', realpath($file)),
'{l}' => $left,
'{t}' => $top,
'{w}' => $width,
'{h}' => $height,
)), $out, $var);
}
/**
* Change resolution of image
* @param $file string Path to image
* @param $size int Value of image's sides in pixels
* @throws Exception\BaseException
* @throws Exception\ImagemagickException
*/
public static function resize($file, $size) {
if (! is_numeric($size)) {
throw new BaseException;
}
exec(strtr('{imagick}convert -scale "{resolution}>" -quality {quality} -strip "{target}" "{target}" 2>&1', array(
'{imagick}' => '/usr/bin',
'{resolution}' => $size.'x'.$size,
'{quality}' => 95),
'{target}' => $file,
)), $out, $var);
if ($var > 0) {
$msg = null;
if ($var === 1) {
$msg .= 'Probably incorrect path to the library';
}
throw new ImagemagickException('Imagemagick error #'.$var.' '.$msg);
}
}