Symfony2 Image Manipulation
Я искал много часов и не могу понять, как сделать некоторые эффективные манипуляции с изображениями в Symfony2. Пакет Liip Imagine, похоже, подходит, но я не могу заставить его работать должным образом в процессе разработки.
Что я хочу:
- При загрузке создайте размеры изображений, предпочтительно на основе% (я бы предпочел сделать это, чтобы дождаться запроса на изображение, потому что, если оно огромно, я не хочу, чтобы этот человек ожидал, пока он кешируется)
- Создать водяной знак на изображении
- получить мета из изображения, размеров, DI и т. д.
Я посмотрел на следующее:
- Использовать LiipImagineBundle для изменения размера изображения после загрузки? но при попытке получить ошибку PHP требуется расширение EXIF для использования ExifMetadataReader
- http://symfony.com/doc/master/bundles/LiipImagineBundle/index.html но при попытке ссылки на него в Twig он добавляет
app_dev.php
перед изображением и не пытается сохранить его кэшированную версию.
Config:
liip_imagine:
resolvers:
default:
web_path: ~
filter_sets:
cache: ~
my_thumb:
quality: 75
filters:
thumbnail: { size: [120, 90], mode: outbound }
Попытка ветки:
img src="{{ asset(file.webPath) | imagine_filter('my_thumb') }}"
РЕДАКТИРОВАТЬ!!
Поэтому я использовал следующий код, чтобы попытаться сделать это при загрузке из вышеприведенного поста:
private function writeThumbnail($document, $filter) {
$path = $document->getWebPath(); // domain relative path to full sized image
$tpath = $document->getRootDir().$document->getThumbPath(); // absolute path of saved thumbnail
$container = $this->container; // the DI container
$dataManager = $container->get('liip_imagine.data.manager'); // the data manager service
$filterManager = $container->get('liip_imagine.filter.manager');// the filter manager service
$image = $dataManager->find($filter, $path); // find the image and determine its type
$response = $filterManager->get($this->getRequest(), $filter, $image, $path); // run the filter
$thumb = $response->getContent(); // get the image from the response
$f = fopen($tpath, 'w'); // create thumbnail file
fwrite($f, $thumb); // write the thumbnail
fclose($f); // close the file
}
А теперь эта строчка $image = $dataManager->find($filter, $path)
выбрасывает следующую ошибку:
MIME-тип загружаемых изображений /files/pic_05052015_827_c6d4b.jpg должен быть image/xxx получил inode/x-empty.
Я немного потерян с некоторыми из этих глубоких имиджевых вещей.