Работа с изображениями (Resize)

Хочу вот написать пережималку картинок налету + кеш.

Дело в том что сам функционал реализовать могу. Работа через GD, пережатие и так далее. Но файлик в итоге является как бы картинкой И данные туда в моем случае передаются с помощью гет.

к примеру:


 <img src="img.php?pic=name&size=400"> 

или тоже через акцесс 

<img src="/images/400/name.jpg">.

Но хотелось бы сделать более функциональную штуку, передавать параметры crop, размер, сжатие и так далее.

Теперь к вопросу, можно ли такую штуку как-то реализовать например в виде виджета, или контроллера, то бишь чтобы не явно передать массив с параметрами, произвести действия и вернуть обработанную картинку, или ее кеш.

было бы удобно например вызвать виджет с параметрами который вернет картинку, и обует ее в тег IMG с виртуальным адресом.

Подскажите если кто делал подобное. У меня не выходит так как возвращается картинка, а перед ней нельзя выводить что-либо (

зы. задавать просто размер без пережимания не вариат, так как часто бывает картинки по несколько метров. При загрузке тоже не вариант так как при редизайне придется перезакачивать все картинки.

Попробуй сделать следующее:

[list=1]

[*]После загрузки сохраняй оригинал в отдельном месте, а потом просто, во время все тойже загрузки, пережимай в нужный размер.

[*]Если хочешь делать виджет или контролер, то просто результат его оборачивай CHtml::image();

[/list]

П.С. Я лично пользуюсь первым вариантом.

По сабжу можно посмотреть в сторону:

http://code.google.com/p/smart-lencioni-image-resizer/

Уже все до сделано давно

Вот extension для работы с изображениями yiiframework com/extension/image/ (так как это мой первый пост тут, то линк не пускают).

Там в камментах есть хелпер (репощу):


<?php

/**

 * Image helper functions

 *

 * @author Chris

 */

class ImageHelper {


	/**

	 * Create a thumbnail of an image and returns relative path in webroot

	 *

	 * @param int $width

	 * @param int $height

	 * @param string $img

	 * @param int $quality

	 * @return string $path

	 */

	public static function thumb($width, $height, $img, $quality = 75)

	{

		$pathinfo = pathinfo($img);

		$thumb_name = "thumb_".$pathinfo['filename'].'_'.$width.'_'.$height.'.'.$pathinfo['extension'];

		$thumb_path = $pathinfo['dirname'].'/.tmb/';

		if(!file_exists($thumb_path)){

			mkdir($thumb_path);

		}


		if(!file_exists($thumb_path.$thumb_name)){


			$image = Yii::app()->image->load($img);


			$image->resize($width, $height, Image::SQUARE)->crop($width, $height)->sharpen(15)->quality($quality);

			$image->save($thumb_path.$thumb_name);

		}


		$relative_path = str_replace(YiiBase::getPathOfAlias('webroot'), '', $thumb_path.$thumb_name);

		return $relative_path;

	}

}

?>

А дальше дело двух строк (ну и соотв надо будет немного дополнить хелпер, чтобы учитывались размер, сжатие итд итп).




$src = ImageHelper::thumb($width, $height, $this->imagePath);

$src = CHtml::image(Yii::app()->request->hostInfo . '/' . $src, $this->name, array('title'=>$this->name));