Redimensionner l'image avant le téléchargement - convertir en toile pour un objet de Fichier
Voici le fragment de code que j'utilise maintenant pour télécharger plusieurs images à l'aide de HTML5 Fichier API:
/**
* @param {FileList} files
*/
upload: function(files){
nfiles = files.length;
for (var i = 0; i < nfiles; i++) {
/** @var file File **/
var file = files[i];
var xhr = new XMLHttpRequest();
xhr.open("POST", settings.post_upload, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.upload.filenumb = i;
xhr.filenumb = i;
xhr.upload.filename = file.name;
var nef = new FormData();
nef.append("folder", settings.folder);
nef.append("file_element", settings.file_elem);
nef.append("udata", settings.user_data);
nef.append(settings.file_elem, file);
xhr.send(nef);
}
}
Je voudrais redimensionner les images avant charger à l'aide de toile objet, mais ne pas avoir de l'expérience avec cela, je ne sais pas comment mettre à jour le code à l'aide de techniques, par exemple celle décrite ici: HTML5 Pré-redimensionner les images avant de les télécharger
canvas.toDataURL("image/png");
renvoie une chaîne codée. Mais j'ai besoin de mettre la File
objet.
Modifier
Comment écririez-vous (raisonnablement) la fonction de navigateur pour la plupart des navigateurs modernes pour redimensionner le Fichier avant de le télécharger, de manutention jpg,png et gif avec transparence:
/**
* @param {File} file
* @param int max_width
* @param int max_height
* @param float compression_ratio
* @returns File
*/
function resize(file, max_width, max_height, compression_ratio){}
- quel est le problème avec le serveur côté redimensionnement?
- +1 sur les raisons de la redimensionner besoins/doit être sur le côté client.
- Je me figure qu'il veut utiliser le pouvoir des clients au lieu de perdre du CPU sur le serveur par le redimensionnement d'images...
- Quand je suis à la masse téléchargement de 200 grandes images, je peux économiser beaucoup de temps de transfert et de ressources du serveur.
- Côté Client, le redimensionnement est le mieux pour la planète. Pourquoi passer des encombrants de transfert des images par le biais de l'internet, manger ressources d'internet? Il est comme tout le monde pense que l'internet fonctionne sur magique poussière de lutin, il n'est pas, il s'exécute sur l'énergie et les émissions de CO2. googleblog.blogspot.com/2009/05/energy-and-internet.html. Envisager la planète prochaine fois que vous écrivez un programme pour redimensionner vos images.
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela:
Veuillez noter:
De travail avec fileloaders et le chargement des images, il y a des retards et de la fonction est donc asynchrone donc essayer de simplement retourner les données blob ne fonctionnent pas. Vous avez besoin d'attendre pour le chargement avant de se produire, vous pouvez utiliser les données chargées, et de déclencher un appel de votre fonction de téléchargement pour CHAQUE fichier.
Aussi fileloader peut avoir certains navigateur compatibilité questions, mais je ne pense pas que c'est possible de toute autre manière, côté client.
Côté Client image redimensionner
L'Option 1. Utiliser le Pica bibliothèque (https://github.com/nodeca/pica)
L'Option 2. Utiliser les éléments suivants script personnalisé (http://jsfiddle.net/cL3hapL4/2/)
Vous pouvez appeler
toBlob
sur le<canvas>
élément. Cela renvoie unBlob
, qui est le parent de l'interface deFile
. Vous pouvez ensuite envoyer cet objet à votre serveur via XHR2.