@Nonebody

Как средствами php, css и js лучше всего реализовать онлайн-обработка изображений?

Добрый вечер, уважаемые.
Необходимо реализовать на сайте онлайн-обработку изображений, т.е. пользователь заходит на сайт, загружает необходимое изображение\делает фото с веб-камеры, после чего может применить различные фильтры (подобие фильтров инстаграма), эффекты, коллажи, текст и пр., после чего сохраняет себе на устройство (Пример такого сайта).

Читал различные статьи, где пишут о решении в нескольких вариантах (php, css, js).
Но все они написаны абстрактно, конкретики совсем нет.

Подскажите пожалуйста, как лучше реализовать поставленную задачу?
Если есть готовые решения (не прошу решений в идеале) - поделитесь пожалуйста, по ним легче ориентироваться и быстрее влиться в реализацию.
На чём оно будет реализовано в принципе неважно - будь то CMS, либо обычный html.
Буду очень признателен.
  • Вопрос задан
  • 4398 просмотров
Пригласить эксперта
Ответы на вопрос 1
@cmx
Мой совет аналогичен предыдущему, но советовал бы 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);
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы