IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Conseils sur la méthode à utiliser pour réduire les photos lors de l'upload


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut Conseils sur la méthode à utiliser pour réduire les photos lors de l'upload
    Bonjour,

    J'ai ajouté dans un formulaire la possibilité d'uploader une photo (taille limitée à 8 Mo pour faciliter la vie de l'utilisateur qui prend directement la photo qu'il a faite avec son appareil numérique).
    Seulement, sur le site c'est bien trop volumineux, il me faut donc réduire cette photo une fois uploadée (300 pixels de côté maxi, qualité jpeg 70). Il y a apparemment plusieurs bundles qui le permettent : ImageResizerBundle-LiipImagineBundle-..., ainsi que des méthodes "pur php" : Imagick-GD Library-ImageMagicK...

    Y a-t-il une solution à préférer ?

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    La solution à préférer est celle qui répondra à ton besoin et qui te fera faire le moins de travail toi-même. La vraie question à te poser est :

    Est-ce que tu souhaites les resizer au moment de l'upload ?
    Ou ne préfères-tu pas garder l'originale et la resizer au moment du rendu ?

    La deuxième méthode te permet de garder une qualité acceptable sur les différents formats que tu pourras potentiellement avoir à d'autres endroit de ton site car le resizing se fera depuis la photo originale et non depuis une image déjà compressée. Tu pourras du coup avoir des photos en 300x300 à certains endroits et en 500x500 à d'autres par exemple.

    ++

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Effectivement, j'ai oublié d'amener cette précision.
    Je n'ai pas besoin de garder l'original, car il s'agit de photos pour illustrer des petites annonces, donc 2 tailles d'image me suffisent (une moyenne, 300px de large max, et une vignette, 50px), avec des noms génériques (<id_annonce>.jpg), sans info exif.

    Je laisse la possibilité à l'utilisateur d'uploader une photo directement sortie de son appareil photo (et avec les appareils récents, les photos peuvent peser très lourd !), mais je ne veux pas garder des fichiers super lourds sur le serveur.

    Je pencherais donc pour ta 1ère solution, tu préconises quoi ?

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Si tu es absolument sur que tu n'auras aucune autre fonctionnalité qui te demandera un format plus grand (type agrandissement dans une lightbox, diapo etc.) et que tu as des contraintes d'espace, tu peux envisager la première solution.

    Si la contrainte d'espace n'est pas vraiment un problème, par sécurité je ferai quand même la deuxième méthode qui à mon sens est plus élégante, plus souple car elle te permet d'envisager des changements futurs, et n'est pas beaucoup plus contraignante à mettre en place que la première.

    Dans le premier cas, je pense que tu peux trouver un bundle ou un snippet qui s'occupe de resizer les images que tu upload et les enregistrer dans le dossier adapté.

    Dans le second cas je ne sais pas si une solution complète existe mais dans les grandes lignes : voilà comment je fonctionnais dans un ancien projet.

    Je génère mes images par URL : c'est à dire que l'attribut src de ma balise image est une url contenant le nom (ou l'id) de mon image ainsi que le format que j'attends (500x500).
    L'action appelée vérifie si l'image existe déjà dans ce format en fonction des paramètres (height & width) dans les sous-dossiers d'images nommés 200x200, 300x300, 500x500 etc.
    Si l'image existe on la retourne et l'image s'affiche au bon format, si ce n'est pas le cas, j'appelle un service qui va récupérer l'image originale, la resizer, l'enregistrer dans le sous-dossier adapté et retourner cette image.
    Si elle est appelée une deuxième fois dans le même format elle n'aura pas à être regénérée.

    En gros je n'appelle mon image originale que pour générer des images au format que je souhaite. Avec cette technique, tu n'as plus à te soucier du format de tes images, tu peux à tout moment demander un nouveau format en mettant la taille souhaitée dans l'URL qui se trouve dans le src de ton image.

    Si tu trouves un bundle qui gère ça ne te fatigue pas et utilise-le, sinon tu as déjà les grandes lignes.

    Bon courage.

    ++

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Effectivement, j'utilise un hébergement mutualisé, limité à 10Go d'espace disque. 1000 annonces avec une image à 8Mo et c'est quasiment plein...

    Le fonctionnement que tu décris correspond bien à ce que j'ai pu lire sur différent bundle, mais apparemment il y a la possibilité de les utiliser en tant que services, pour réduire les images depuis le controller. Je pense que je vais tester ça...

    ou il y a aussi un bundle pour utiliser Imagine sur Symfony. Je ne connais pas non plus, mais apparemment c'est une librairie minimaliste PHP pour les traitements basiques d'images.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Il y a aussi cette classe d'upload qui fait un ou plusieurs redimensionnements à la volée lors de l'upload et permet de garder ou non l'image originale. Elle inclue la gestion des erreurs, et pas mal d'options comme l'upload multiple php5, le nommage ou renommage des fichiers etc. En fait elle a été conçue pour les besoins que tu décris. Un exemple avec l'affichage d'une barre de progression et affichage du temps restant (necessite php5.4 pour cette option) est également disponible.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    L'utilisation de librairie telles que plupload permet de faire le redimensionnement coté client.
    C'est sympathique pour l'utilisateur qui n'a pas à attendre l'upload de son image de 8Mo et ça t'économise le traitement coté serveur.

  8. #8
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Merci pour cette dernière info, cela paraît intéressant.

    J'ai voulu tester la classe d'upload indiquée par ABCIWEB, mais je n'ai pas trop vu comment l'intégrer à Symfony.
    J'ai alors installé le bundle AvalancheImagineBundle, j'ai réussi à le faire fonctionner comme l'indiquait Nico_F (conservation de l'image originale sur le serveur et redimensionnement à la volée avec gestion d'un cache, pour affichage dans les templates twig), mais pas en tant que service, pour effectuer le redimensionnement au moment du chargement.

    Comme je souhaite sortir une 1ère version de mon site rapidement, je vais rester sur cette solution pour le moment (le disque dur n'est pas encore plein ), mais dès que c'est fait, je teste la solution de grunk, pour redimensionner côté client, ce qui me plaît bien.

    Merci pour les conseils !
    (et si quelqu'un sait comment utiliser AvalancheImagineBundle en tant que service, je suis preneur )

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/01/2012, 13h01
  2. Réponses: 1
    Dernier message: 27/04/2010, 10h10
  3. Réponses: 6
    Dernier message: 07/01/2009, 10h57
  4. Quelle méthode utiliser pour traiter les images
    Par babozfr dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 02/03/2007, 15h40
  5. Réponses: 4
    Dernier message: 02/05/2006, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo