[Résolu] Nouvelle option de redimensionnement d'image
Bonjour,
Je viens de m'apercevoir qu'un de mes clients envoie des images de 3456x4608 pixels, sous la barre des 16Mo, via le gestionnaire de média. Je m'en suis rendu compte parce que l'affichage d'admin/medias.php faisait tout bonnement planter php :
Dans class.plx.utils.php , line 698 memory problem :
238326#0: *20552 FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 63700992 bytes) in /core/lib/class.plx.utils.php on line 698" while reading response header from upstream
J'ai pour l'instant esquivé le problème en augmentant la mémoire php de 128Mo à 256Mo, mais bon... C'est idiot d'afficher des images de 8Mo contenant un fond blanc et du texte... Et les images uploadées n'ont pas besoin d'être plus larges que le site, soit 1000 pixels.
Donc, je comptais forcer le redimensionnement des images.
Le problème est que les choix proposés ne conviennent pas :
- Taille originale : bien ou bien trop gros, selon la magie du client
- 320x200, 500x380, 640x480 : trop petit, et puis c'est bizarre d'aller recadrer une image en plus de la redimensionner...
- 1000x0 (Modifier) : fonctionne pour les images plus grandes, mais augmente la taille des petites images
- [ ] x [ ] : trop compliqué pour le client...
J'aimerais donc que l'image soit redimensionnée de cette manière sans proposer de choix au client :
new_width = width < 1000 ? width : 1000;
new_height = width != new_width ? new_width * height / width : height;
Est-ce que je modifie directement la class.plx.medias.php public function uploadFiles($usrfiles, $post), ou est-ce qu'il y a une manière plus élégante de le faire ?
Merci
Réponses
Bonjour
Tu peux aller dans parametres option d'affichage, et tu peux modifier les tailles des images et des miniatures par defaut.
Après on peut aussi modifier la taille des images avant téléchargement car 16M°!!.
Il y a des feewares qui le permettent facilement.; si tu n'as pas trop d'images à traiter .. photofiltre.. ancien mais il fait encore son travail
Cordialement
Merci, c'est ce que je fais en modifiant la taille des images par défaut en 1000x0 : ça redimensionne les grandes images tout en ne recadrant pas l'image en hauteur.
Mais en sélectionnant cette option, ça augmente aussi les petites images jusqu'à 1000 pixels de large.
C'est pour ça que je programme ma propre méthode : pour ne pas laisser le client avoir le choix et faire n'importe quoi.
Je vais effectivement traiter les images déjà uploadées avec une petite moulinette ImageMagick. Mais ma question demeure :
Est-ce que je modifie directement la class.plx.medias.php public function uploadFiles($usrfiles, $post), ou est-ce qu'il y a une manière plus élégante de le faire ?
Bonjour,
L'idéal serait de transposer ton script en un plugin.
Cela a plusieurs avantages.
Peut dispo actuellement, je pourrais néanmoins t'aider à passer ton script en plugin.
Cdt
Pour infos:
Le fichier medias.php (dans core/admin) dispose de 3 hooks sur lesquels le plugin peut s'articuler en fonction de ce que tu souhaites
eval($plxAdmin->plxPlugins->callHook('AdminMediasPrepend'));
// pour traiter par exemple un upload avant affichage ou pour remplacer tout le reste de la page avec un nouveau formulaire fournis par un plugin . C'est à cet endroit qu'il faudrait traiter les upload et retoucher les images envoyéseval($plxAdmin->plxPlugins->callHook('AdminMediasTop'))
# // qui permet d’insérer ici du HTML et d'autres fonctions , visible dans les deux pages (celles listant les fichiers et celle avec le formulaire d'upload)eval($plxAdmin->plxPlugins->callHook('AdminMediasUpload'))
// qui insère du contenu à la fin du formulaire d'upload , permettrait d'ajouter des options complétant celles déjà existantesIl y a un quatrième hook/point d'accroche :
eval($plxAdmin->plxPlugins->callHook('AdminMediasFoot'))
en pied de page lui aussi visible dans les deux pages (listing et formulaire) , peut servir à indiquer la présence du plugin.Accessoirement deux pages peuvent-être crées et ajoutées via deux fichiers du plugin (fichiers optionnels)
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Merci @gcyrillus-nomade. J'étais justement en train de parcourir la doc de création de plugins. Je vais tenter de le faire moi-même et je posterai mes avancées
Okay, j'étais en train de me dire que de transformer tes scripts (si tu souhaitais les partager) en plugin, pouvait aussi être l'occasion de faire un tutoriel à partir d'un cas concret. Comme ça, j'avais un truc à mettre sur pluxopolis.
Cdt
Comme on dit, plutôt que donner un poisson à quelqu'un, il vaut aussi de lui apprendre à pécher
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
C'est pas un méga script, tu peux en faire un tuto sur pluxopolis. Je suis curieux de voir comment fonctionne le remplacement des fonctions php existantes avec les hook... Parce que j'arrive à cacher les options de resize image et thumb après coup avec le hook AdminMediasUpload, mais j'imagine que ça ne ça fait pas du tout comme ça
simpleImageResizer.php :
simpleImageResizer.js :
Et sinon voilà ma modification de class.plx.medias.php qui fonctionne bien :
Il me tarde de savoir comment utiliser les hooks correctement
Bonjour,
Alors, j'ai repris ta fonction mais depuis le plugin, et ai aussi fait une copie de l'autre fonction native de PluXml pour évincé le fonctionnement natif.
Pour évincé le traitement du formulaire par PluXml, j'ai branché le plugin sur le hook AdminPrepend. De là on teste la variable $_POST['btn_upload'] et si il y a quelque chose, on lance tout de suite ta fonction et dans la foulé on fait la redirection vers la page médias .
En copiant/modifiant les fonctions de pluXml, il faut aussi recreer les variables necessaires au sein du plugin où ces nouvelles fonctions se trouvent.
Pour la page config, j'ai opté pour un select avec des largeurs prédéterminées, mais un simple input de type text conviendrais aussi. 1000 est la valeur par défaut tant que la configuration du plugin n'est pas faite.
Voici ci-dessous la class du plugin
Le fichier config.php
Vient aussi les fichier de langues (juste fr , les autres seront à creer aux besoins) dans le repertoire lang du plugin.
fr.php:
Le fichier d'aide , des fois que
Et puis un fichier infos.xml
Je peut te faire un zip du plugin si tu as des difficultés à le reconstruire
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
C'est gentil. Aucune difficulté à le reconstruire. Je comprends maintenant comment faire : c'est comme une déviation d'autoroute
Mais du coup, est-ce qu'il ne vaut pas mieux récupérer entièrement la création de la page html dans le plugin, plutôt que de cacher les options de redimensionnement après coup avec le js comme j'avais fait ?
Pour le choix de la largeur, on peut effectivement le remplacer par :
C'est mieux de laisser l'admin mettre la taille qu'il souhaite plutôt qu'un chiffre arbitraire. Au passage, ça vérifie si la largeur est > 0.
Et pour l'info.xml, ajoutes tes infos si tu comptes le mettre en tuto sur pluxopolis ou dans ton github.
Pour finir, je pense qu'au lieu d'être un plugin, ce devrait être le comportement de base de pluxml concernant l'upload d'images, plutôt que redimensionner et recadrer en 320x200 comme en 2001.
Edit:
mmm... Il doit avoir un couac avec le hook, car ça affiche "Erreur pendant l'envoi du fichier" (L_PLXMEDIAS_UPLOAD_ERR) en haut de page alors que l'envoi et le redimensionnement de l'image s'est passée parfaitement.
Curieusement, le problème vient du fichier lib/class.plx.media.php :
Est-ce que le plugin prend bien la place de la fonction native, ou est-ce qu'ils sont exécutés les deux à la suite ?
Quelle version de php et de PluXml utilises tu?
Modification sur le traitement du formulaire: on vide la variable au lieu de rediriger. (je n'avai pas ces messages d'erreur du à la redirection)
Oui, c'est bien sur possible et cela va en plus montrer comment injecter du code dans PluXml depuis un plugin.
C'est evidement plus sûr que de dépendre de javascript dans ce genre de cas.
La class devient_(edit:maj)_:
avec un nouveau fichier pour le plugin nommé : simpleImageResizerForm.php
cdt
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Php 8.2.10 et PluXml 5.8.9. Super à la page !
Plus de faux message d'erreur avec ta dernière modification, parfait
Bonjour,
Cette discussion m’intéresse, parce que à la suite d'une précédente question sur ce forum (que j'ai pas réussie à retrouver), je n'indique plus la dimension de mes images, c'est à dire que j'efface systématiquement l'info de hauteur et de largeur dans le dialogue d'insertion d'image, et ça se débrouille beaucoup mieux comme ça.
Vous pouvez voir la chose sur mon pluxml perso : https://papillonembarrasse.ouvaton.org
J'ai l'impression que ce plugin fait ça tout seul ?... Est-ce que c'est mieux de l'utiliser, ou bien est-ce qu'il va être intégré, parce que ça pourrait être une option naturelle ?... Et si oui d'où se télécharge-t-il ?...
Merci.
Bonjour @herve
Je vais préparer une archive dans le week-end pour que tu puisses le télécharger et l'installer.
Pour les infos du fichier, sitôt que tu redimensionne ou retravail une image via php, les données exif sont perdues . Pour les garder ou les modifier, il faut aussi inclure cette moulinette dans le code. Pluxml ne le fait pas.
De quelles options aurait tu besoin ou bien qui te semblerait utile pour une majorité. C'est l'occasion ou jamais .....
Cdt
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Oaf je sais pas. Merci en tous cas.
Du coup j'ai fait exprès un message avec une photo, pour voir. Je les fais pratiquement toujours de la même façon : l'image, puis un petit texte descriptif, et quand c'est une image que j'ai mise sur Commons - la médiathèque de wikipédia - j'y mets le lien vers ça.
Je voulais vous mettre une photo d'écran pour vous montrer ma situation, mais le système de téléchargement de photo ne fonctionne pas sur le forum avec moi ?
Bon, dans la série "ça serait bien..." : un bouton et pouf ! la largeur et la longueur sont vides - il ne faut pas "0", il faut rien, ou alors, plus intellectuel, un bouton "l'image s'adapte à la place disponible", quelque chose comme ça ; aussi, que l'aperçu soit à la bonne forme, ça serait plus confort. De toutes façons ce qui m'intéresse surtout c'est la bonne pratique et comment font les autres plutot que les boutons.
Et si voulez voir le résultat : https://papillonembarrasse.ouvaton.org/index.php?article199/l-eglise-de
À bientot.
Ah et j'ai oublié de dire, je ne retravaille pas la photo par le php, mais sur mon poste, par gimp. L'image que je upload est donc prête. Je ne demande aucune transformation à pluxml, sauf celles nécessaires à son positionnement dans le blog.
Okay, cela dépendra du thème et si l'mage est insérer comme une image d'accroche à un article ou dans l'article lui même . Donc à priori ton soucis est l'affichage, la c'est à partir du thème
<?php $plxShow->artThumbnail(); ?>
qui s'en charge . Par défaut la config de cette fonction estartThumbnail($format = '<a href="#img_url"><img class="art_thumbnail" src="#img_thumb_url" alt="#img_alt" title="#img_title" /></a>', $echo = true, $article = false)
en créant un lien vers l'mage et en affichant la miniature. Tu peut modifier cela , voir: https://wiki.pluxml.org/docs/develop/plxshow.html#artthumbnail par exemple en faisant<?php $plxShow->artThumbnail('<figure class="mon-image><img src="#img_url" alt="#img_alt"><figcaption><p>#img_alt</p></figcaption></figure>'); ?>
et depuis la feuille de style tu peut styler cette boite comme du l'entends:<img src="source-de-l-image" alt="descriptif court" />
.Un éditeur wysiwyg propose généralement de générer ce code HTML avec parfois quelques autres options.A priori tu n'as effectivement pas besoin de plugin si tu prépare tes images à l'avance avec GIMP comme tu l'indique,
cdt
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Voici l'archive du plugin évoqué dans ce fil : https://github.com/gcyrillus/simpleImageResizer/archive/refs/heads/main.zip
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Archive mise à jour 10/04/2024 https://github.com/gcyrillus/simpleImageResizer/
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci