Utilisation LiipImagineBundle de Redimensionnement de l'Image après l'Upload?

Je suis en utilisant le LiipImagineBundle avec Symfony 2.1 et souhaitez redimensionner utilisateur de télécharger des images à télécharger avant de les enregistrer sur la localisation du système de fichiers (pour la bande de métadonnées, imposer format jpeg, et de limiter la taille du fichier). J'ai appeler une 'bande' et 'redimensionner' filtre de la manette, puis enregistrer l'image filtrée à partir d'un emplacement temporaire dans un dossier de mon choix dans le système de fichiers.

J'ai essayé d'utiliser le LiipImageBundle Contrôleur comme un service, comme indiqué dans le bundle du readme mais l'Action demandée est principalement pour la création d'une image filtrée dans le répertoire de cache quand une demande est faite à l'affichage de l'image (de l'utiliser pour le filtrage pendant le téléchargement est une autre affaire). J'ai essayé de la mettre en œuvre comme suit, de toute façon, et il a obtenu de travailler. J'ai dû d'abord déplacer le fichier à partir du serveur web php du répertoire temporaire vers un répertoire dans le dossier web pour être en mesure d'appliquer le filtre. Ensuite, j'ai appliqué le filtre et supprimés (unlink()) la première non filtrée fichier. Enfin, j'ai dû déplacer (rename()) le fichier filtré à l'emplacement permanent dans le système de fichiers. Il était nécessaire de déplacer le fichier deux fois, appliquer le filtre une fois, et de supprimer (unlink) 1 fichier pour les faire fonctionner. Est-il une meilleure façon de (ne nécessitant pas le mouvement intermédiaire) pour utiliser le bundle à télécharger?

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);
    }
}

Mon filtre dans le dossier app/config/config.yml comme suit:

liip_imagine:
    filter_sets:
        my_filter:
            format: jpeg
            filters:
                strip: ~
                thumbnail: { size: [1600, 1000], mode: inset }

Une question similaire a été posée pour la ImagineAvalancheBundle mais pas beaucoup de détails sont donnés. Peut-être la mise en œuvre de un autre service à partir de la liste fournie ici est une meilleure solution?

Avez-vous jamais trouver une meilleure solution? Je veux aussi cela. Le filtre fonctionne bien, mais la performance n'est pas idéal lorsque j'ai beaucoup de miniatures, de les déplacer à partir de la mémoire cache de l'emplacement est connu au moment de l'importation de la vitesse, de façon spectaculaire.
Je n'ai pas trouvé d'autre solution, mais celui décrit ci-dessus semble fonctionner correctement (je l'ai gardé de cette façon).
Je suis en train de travailler sur une solution et poster ici quand il fonctionne.

OriginalL'auteur RayOnAir | 2013-02-24