TL, DR;
Existe-t-il un moyen de compresser une image (principalement jpeg, png et gif) directement côté navigateur, avant de la télécharger? Je suis presque sûr que JavaScript peut le faire, mais je ne trouve pas de moyen d'y parvenir.
Voici le scénario complet que je voudrais mettre en œuvre:
- l'utilisateur accède à mon site web, et choisit une image via un
input type="file"
élément, - cette image est récupérée via JavaScript, nous effectuons des vérifications telles que le format de fichier correct, la taille maximale du fichier, etc.
- si tout va bien, un aperçu de l'image s'affiche sur la page,
- l'utilisateur peut effectuer certaines opérations de base comme faire pivoter l'image de 90 ° / -90 °, la recadrer suivant un rapport prédéfini, etc., ou l'utilisateur peut télécharger une autre image et revenir à l'étape 1
- lorsque l'utilisateur est satisfait, l'image éditée est alors compressée et "enregistrée" localement (non enregistrée dans un fichier, mais dans la mémoire / page du navigateur), -
- l'utilisateur remplit un formulaire avec des données telles que son nom, son âge, etc.
- l'utilisateur clique sur le bouton "Terminer", puis le formulaire contenant les données + image compressée est envoyé au serveur (sans AJAX),
Le processus complet jusqu'à la dernière étape doit être effectué côté client et doit être compatible avec les derniers Chrome et Firefox, Safari 5+ et IE 8+ . Si possible, seul JavaScript doit être utilisé (mais je suis presque sûr que ce n'est pas possible).
Je n'ai rien codé pour le moment, mais j'y ai déjà pensé. La lecture de fichiers localement est possible via File API , la prévisualisation et l'édition d'image peuvent être effectuées à l'aide de l' élément Canvas , mais je ne trouve pas de moyen de faire la partie compression d'image .
Selon html5please.com et caniuse.com , la prise en charge de ces navigateurs est assez difficile (grâce à IE), mais pourrait être réalisée à l'aide de polyfill tels que FlashCanvas et FileReader .
En fait, l'objectif est de réduire la taille du fichier, donc je vois la compression d'image comme une solution. Mais, je sais que les images téléchargées vont être affichées sur mon site Web, à chaque fois au même endroit, et je connais la dimension de cette zone d'affichage (par exemple. 200x400). Ainsi, je pourrais redimensionner l'image pour l'adapter à ces dimensions, réduisant ainsi la taille du fichier. Je n'ai aucune idée du taux de compression de cette technique.
Qu'est-ce que tu penses ? Avez-vous des conseils à me dire? Connaissez-vous un moyen de compresser une image côté navigateur en JavaScript? Merci pour vos réponses.