Новый модуль для работы с изображениями и модуль FS
В разрабатываемой новой версии мы обновили модуль Image для работы с изображениями.
Теперь он основан на библиотеке Imagine и предоставляет удобные методы для манипуляции с изображениями. Дополнительной особенностью является поддержка разных PHP библиотек (драйверов): gd, imagick и gmagick. Нужный драйвер устанавливается в конфиге
Метод
Далее через объект
Также доступны методы обработки изображений, такие методы можно вызывать через цепочку вызова.
Пример вызова цепочки
Если вам необходимо применить специфические методы библиотеки Imagine, то можно получить ее объект вот так
Дополнительно доступны методы сохранения изображения:
Если потребуется сделать сохранение всех изображения, например, на Amazon S3, то достаточно переопределить специальные методы в модуле Image:
Формат пути файла определяется его префиксом и самим путем —
Такое разделение позволяет в одном поле БД хранить разные варианты путей до файла. Например, для Amazon S3 можно ввести префикс [amazon_s3] и добавить в модуль FS методы конвертации этого пути в другие. С примером Амазона скорее всего будет достаточно введение метода типа GetPathWebFromAmazonS3($sPath), который позволит получить web ссылку на файл.
На данный момент все пути изображений в LS сохраняются с относительным типом (relative). Это позволит избавиться от проблемы переименования изображений при смене домена сайта.
Теперь он основан на библиотеке Imagine и предоставляет удобные методы для манипуляции с изображениями. Дополнительной особенностью является поддержка разных PHP библиотек (драйверов): gd, imagick и gmagick. Нужный драйвер устанавливается в конфиге
$config['module']['image']['driver']='imagick';
/** * Получаем параметры */ $aParams=$this->Image_BuildParams('gallery'); /** * Создаем объект изображения */ if(!$oImage=$this->Image_Open($sFileSource,$aParams)) { $sMsgError=$this->Image_GetLastError(); }
Метод
Open($sFileSource,$aParams)
принимает исходный файл изображения с параметрами, а возвращает объект ModuleImage_EntityImage
. Параметры формируются на основе конфига, по умолчанию они такие:$config['module']['image']['params']['default']['size_max_width']=7000; $config['module']['image']['params']['default']['size_max_height']=7000; $config['module']['image']['params']['default']['format_auto']=true; $config['module']['image']['params']['default']['format']='jpg'; $config['module']['image']['params']['default']['quality']=95;
Далее через объект
$oImage
уже можно проводить различные манипуляции с изображением. $oImage->getWidth()
— возвращает ширину изображения$oImage->getHeight()
— вернет высоту$oImage->getFormat()
— вернет формат, например, jpgТакже доступны методы обработки изображений, такие методы можно вызывать через цепочку вызова.
$oImage->resize($iWidthDest,$iHeightDest=null,$bForcedMinSize=true)
— изменяет размеры изображения$oImage->cropProportion($fProp,$sPosition='center')
— вырезает максимально возможный прямоугольный в нужной пропорции$oImage->cropSquare($sPosition='center')
— вырезает максимально возможный квадрат$oImage->cropFromSelected($aSelectedSize,$iCanvasWidth=null)
— вырезает область выделенную пользователем с помощью библиотеки jCropПример вызова цепочки
$oImage->cropProportion(150/100)->resize(50);
Если вам необходимо применить специфические методы библиотеки Imagine, то можно получить ее объект вот так
$oImagine=$oImage->getImage();
и уже с ним работать.Дополнительно доступны методы сохранения изображения:
$oImage->save($sFile)
— сохраняет изображение в нужный файл$oImage->saveTmp()
— сохраняет изображение во временный файл$oImage->saveSmart($sDir,$sFileName)
— сохраняет файл в нужный каталог ( относительно корня сайта) с нужным именемЕсли потребуется сделать сохранение всех изображения, например, на Amazon S3, то достаточно переопределить специальные методы в модуле Image:
/** * Сохраняет(копирует) файл изображения на сервер * Если переопределить данный метод, то можно сохранять изображения, например, на Amazon S3 * * @param string $sFileSource Полный путь до исходного файла * @param string $sDirDest Каталог для сохранения файла относительно корня сайта * @param string $sFileDest Имя файла для сохранения * @param int|null $iMode Права chmod для файла, например, 0777 * @param bool $bRemoveSource Удалять исходный файл или нет * @return bool | string При успешном сохранении возвращает относительный путь до файла с типом, например, [relative]/image.jpg */ public function SaveFileSmart($sFileSource,$sDirDest,$sFileDest,$iMode=null,$bRemoveSource=false) { ... }
/** * Сохраняет(копирует) файл изображения на сервер * Если переопределить данный метод, то можно сохранять изображения, например, на Amazon S3 * * @param string $sFileSource Полный путь до исходного файла * @param string $sFileDest Полный путь до файла для сохранения с типом, например, [server]/home/var/site.ru/image.jpg * @param int|null $iMode Права chmod для файла, например, 0777 * @param bool $bRemoveSource Удалять исходный файл или нет * @return bool | string При успешном сохранении возвращает относительный путь до файла с типом, например, [relative]/image.jpg */ public function SaveFile($sFileSource,$sFileDest,$iMode=null,$bRemoveSource=false) { ... }
/** * Удаляет файл изображения * Если переопределить данный метод, то можно удалять изображения, например, с Amazon S3 * * @param string $sPathFile Полный путь до файла с типом, например, [relative]/image.jpg * * @return mixed */ public function RemoveFile($sPathFile) { ... }
/** * Проверяет изображение на существование * Если переопределить данный метод, то можно проверить существование изображения, например, на Amazon S3 * * @param string $sPathFile Полный путь до файла с типом, например, [relative]/image.jpg * * @return mixed */ public function IsExistsFile($sPathFile) { ... }
/** * Открывает файл изображения, в качестве источника изображения может использоваться полный путь до файла с типом, например, [relative]/image.jpg * Если переопределить данный метод, то можно открывать изображения, например, с Amazon S3 * * @param string $sFile Полный путь до файла с типом, например, [relative]/image.jpg * @param null $aParams * * @return bool|ModuleImage_EntityImage */ public function OpenFrom($sFile,$aParams=null) { ... }
Модуль FS
Для работы с файлами и их путями мы добавили новый модуль FS — модуль файловой системы. На данный момент он выполняет только основные операции над файлами и берет на себя конвертацию путей различных форматов.Формат пути файла определяется его префиксом и самим путем —
[prefix]/path/to/file
. Стандартно поддерживается 3 префикса:- server — локальный полный серверный путь до файла
- relative — локальный относительный путь до файла
- web — полный web путь до файла (с учетом адреса сайта)
[web]http://site.com/uploads/image.jpg [relative]/uploads/image.jpg [server]/var/www/site.com/uploads/image.jpg
Такое разделение позволяет в одном поле БД хранить разные варианты путей до файла. Например, для Amazon S3 можно ввести префикс [amazon_s3] и добавить в модуль FS методы конвертации этого пути в другие. С примером Амазона скорее всего будет достаточно введение метода типа GetPathWebFromAmazonS3($sPath), который позволит получить web ссылку на файл.
На данный момент все пути изображений в LS сохраняются с относительным типом (relative). Это позволит избавиться от проблемы переименования изображений при смене домена сайта.
5 комментариев
Я имею ввиду что-то типа bilinear, spline, sinc-filter (Lanczos filter).
Будет ли настройка в параметрах?