Плагин/компонент конвертера медиафайлов в CakePHP

Я пытаюсь разработать плагин/компонент, который может изменить формат медиафайла с одного на другой. В частности, мне нужно преобразовать файл «tiff» в массив/единственную копию файла изображения «jpg».

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


person Arun Jain    schedule 23.07.2012    source источник


Ответы (1)


Мы сделали это в нашей CMS (построенной на CakePHP 1.2; извините, если есть какие-то существенные несоответствия, о которых я не знаю), используя поведение. Это делает логику контроллера очень простой (на самом деле мы используем запеченный контроллер без каких-либо модификаций).

К сожалению, TIFF не поддерживается в GD (библиотека обработки изображений по умолчанию в PHP). Вам нужно будет использовать ImageMagick или эквивалентный инструмент, чтобы сделать фактическое преобразование, но логика его реализации в вашем проекте CakePHP не будет отличаться от того, что я здесь описываю.

Поведение (в нашем случае) использовалось для создания изображений в виде эскизов, а также разрешения страницы и для преобразования формата загруженного файла в JPEG.

В своем методе beforeSave() он проверял, что данные были указаны (и что не было ошибки), а затем извлекал значение tmp_name из отправленных данных (и удалял отправленный объект данных).

В своем методе afterSave() он фактически сам выполнял задачу преобразования изображения (помещая сгенерированные изображения в ожидаемое место на диске), а затем обновлял все внешние ключи расширенных моделей с помощью идентификатора загруженного изображения. Мы делаем это в операции afterSave(), поэтому у нас есть идентификатор базы данных, который можно использовать для именования файлов на диске.

В его методе afterDelete() мы разъединяем файлы на диске.

Использовать поведение в модели так же просто, как сообщить модели (где ContentImage — имя поведения):

var $actsAs = array('ContentImage');

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

function getThumbnailDir() {
    return WWW_ROOT.'img'.DS.'upload'.DS.'thumb';
}

и в самом поведении выходной путь становится:

$Model->getThumbnailDir().DS.$Model->id.'.jpg'
person Kit Grose    schedule 23.07.2012
comment
Действительно спасибо Кит Гроуз. Если вы можете предоставить мне соответствующий код, разработанный вами, тогда я смогу перенести его в Cake2.X, а также загрузить эту функцию в общедоступный репозиторий, чтобы помочь другим. Я ожидаю положительного ответа от вас. - person Arun Jain; 23.07.2012
comment
@ Арун, извини, у меня нет полномочий делиться кодом, кроме того, что у меня есть. Вы должны быть в состоянии найти некоторые подобные поведения в пекарне, если вы ищете tmp_name. - person Kit Grose; 24.07.2012
comment
Большое спасибо, Кит Гроуз. Я начал работать над этим и надеюсь скоро жить :) - person Arun Jain; 24.07.2012