Я использую LiipImagineBundle с Symfony 2.1 и хотел бы изменить размер загруженных пользователем изображений при загрузке, прежде чем сохранять их в постоянное местоположение файловой системы (чтобы разбить метаданные, наложить формат jpeg и ограничить размер файла). Мне нужно вызвать фильтр «strip» и «resize» из контроллера, а затем сохранить отфильтрованное изображение из временного местоположения в папку по своему выбору в файловой системе.Использование LiipImagineBundle для изменения размера изображения после загрузки?
Я попытался использовать LiipImageBundle Controller as a service as indicated in the bundle's readme, но вызываемое действие предназначено в основном для создания отфильтрованного изображения в каталоге кеша, когда запрос на отображение изображения (его использование для фильтрации при загрузке - это еще один случай). Я попытался реализовать его в любом случае, и получил его на работу. Я должен был сначала перенести файл из временного каталога php веб-сервера в каталог в веб-папке, чтобы иметь возможность применить фильтр. Во-вторых, я применил фильтр и удалил (unlink()) исходный нефильтрованный файл. Наконец, мне пришлось переместить (переименовать()) отфильтрованный файл в постоянное место в файловой системе. Необходимо было дважды переместить файл, применить фильтр один раз и удалить (отсоединить) 1 файл, чтобы все работало. Есть ли лучший способ (не требующий промежуточного перемещения) использовать пакет при загрузке?
class MyController extends Controller
{
public function new_imageAction(Request $request)
{
$uploadedFile = $request->files->get('file');
$tmpFolderPathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/tmp/';
$tmpImageNameNoExt = rand();
$tmpImageName = $tmpImageNameNoExt . '.' . $fileExtension;
$uploadedFile->move($tmpFolderPathAbs, $tmpImageName);
$tmpImagePathRel = '/uploads/tmp/' . $tmpImageName;
// Create the filtered image in a tmp folder:
$this->container->get('liip_imagine.controller')->filterAction($request, $tmpImagePathRel, 'my_filter');
unlink($tmpFolderPathAbs . $tmpImageName);
$filteredImagePathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/cache/my_filter/uploads/tmp/' . $tmpImageNameNoExt . '.jpeg';
$imagePath = $imageManagerResponse->headers->get('location');
// define permanent location ($permanentImagePathAbs)...
rename($filteredImagePathAbs, $permanentImagePathAbs);
}
}
Мой фильтр в приложение/Config/config.yml выглядит следующим образом:
liip_imagine:
filter_sets:
my_filter:
format: jpeg
filters:
strip: ~
thumbnail: { size: [1600, 1000], mode: inset }
A similar question was asked for the ImagineAvalancheBundle но не много подробностей не дано. Возможно ли реализация another service from the here provided list - лучшее решение?
ли вы когда-нибудь найти лучшее решение? Я тоже хочу этого. Фильтр работает хорошо, но производительность невелика, когда у меня много эскизов, перемещение их из кеша в известное место при загрузке ускоряет работу. –
@PeterWooster: Я не нашел другого решения, но описанное выше, похоже, работает нормально (я сохранил его таким образом). – RayOnAir
Я работаю над решением и опубликую здесь, когда он работает. –