crop sur images

Extensions jpg, jpeg, png, gif
La prévisualisation des images est limitée à 20 Mo par image et 100 Mo au total. Vous pouvez changer ou supprimer ces limitations avec les options de configuration "Up.config.imgPreviewMaxSizeTotal" et "Up.config.imgPreviewMaxSize" (cf code source de ce fichier).

Le crop est réalisé avec le module Jquery "imAareaSelect". Un mode d'emploi est fourni dans le dossier "javascript". Dans ce mode d'emploi, j'ai remplacé l'option "fadeSpeed" par "fadeDuration" car le code de la dernière version 1.0.0-rc.1 utilise "fadeDuration" mais la doc sur le web n'a pas été mise à jour.

Concernant le code javascript, on utilise les fonctions événementielles de la classe d'upload ajax pour initialiser le script du Crop. Il faut utiliser console.log() et parcourir les objets javascript retournés en paramètre par ces fonctions pour comprendre les propriétés utilisées. Voir le mode d'emploi, paragraphe : Contenu des tableaux de fichiers passés en paramètre dans les fonctions événementielles.

Côté serveur, le script "UploadAjaxABCI_Php_Load_Crop_multiple.php" permet en option de faire un redimensionnement proportionnel pour limiter la taille de l'image avec ou sans crop préalablement effectué.

Lorsque la mémoire est insuffisante pour effectuer le crop côté serveur, un message approprié sera affiché en retour par la fonction "cathErrorServeur()" (dans le fichier "UploadAjaxABCI_Php_Load_Crop_multiple.php"). La configuration actuelle de cette fonction préserve la sauvegarde des fichiers*. A défaut de pouvoir retoucher l'image cela permet néanmoins de la télécharger sans avoir à attendre une nouvelle fois pour son chargement lors d'une prochaine sélection.
A noter que dans des cas limites une image pourra être cropée si l'on sélectionne une petite zone mais pas une grande (l'image peut être ouverte "de justesse" mais le serveur ne dispose plus suffisamment de mémoire disponible pour terminer le processus).

Notes :
- * La méthode "saveAll()" utilisée côté php permet par ailleurs d'effectuer une sauvegarde pour tous les fichiers tant qu'ils n'ont pas été traités.
- Pour supprimer l'upload multiple il suffit de supprimer la propirété multiple="multiple" dans le champ input de type file.
- Le code javascript est difficile pour les débutants. Néanmoins il est conçu de manière générique de sorte qu'il n'a pas besoin d'être modifié tant que vous supprimez des éléments HTML qui vous sont inutiles : champ "légende", boutons radios, tableau d'informations de crop, liens "arrêt", etc. Dans l'absolu seul le champ de prévisualisation des vignettes est nécessaire pour faire le crop et permettre un traitement correct côté php, néanmoins je vous conseille de garder au minimum l'information de status du fichier (ainsi que les blocs retournant les erreurs de dépassement du poids des images pour prévisualisation si vous conservez ces limitations).
Cependant si vous modifier le nom des classes ou des champs dans le html il faudra en faire de même dans la configuration des variables définies au début du code javascript. Suppression du html possible "sans précaution", mais modification avec précautions.

- Pour info, le fichier "UploadAjaxABCI_Crop_multiple_multiple.php" est un exemple plus avancé qui supporte plusieurs champs de type file dans le formulaire et permet à l'utilisateur de modifier/compléter sa sélection de fichiers tout en préservant les valeurs des crops et des champs déjà renseignés dans le cas où on re sélectionne les mêmes fichiers + d'autres avant l'envoi du formulaire. De plus, des sélecteurs permettent de choisir les dimensions des images de prévisualisation, un compteur de fichiers sélectionnés et téléchargés et un lien "arrêter-tout" sont également implémentés.
Si toutes ou certaines de ces fonctionnalités vous intéressent pour un seul champ dans le formulaire, il vous suffira de supprimer - dans le html - la seconde ligne d'input file superflue ainsi que la seconde ligne du bouton de sélection personnalisé correspondant, et au besoin de supprimer le htm (et uniquement le html) des fonctionnalités que vous n'utiliserez pas (ce sera beaucoup plus simple que d'essayer d'intégrer une de ces fonctionnalités dans le code source du fichier "UploadAjaxABCI_Crop_multiple.php").

Index