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

jQuery Discussion :

Upload et redimentionnement d'image


Sujet :

jQuery

  1. #1
    Invité
    Invité(e)
    Par défaut Upload et redimentionnement d'image
    Bonjour,
    Pour associer un avatar a un pseudo, j'ai besoin de pouvoir redimensionner une image et de l'uploader dans la foulé.

    Pour l'upload j'ai trouvé ce plugin : http://www.uploadify.com/demo/
    Mais cela ne fait qu'une partie du travail.

    Connaissez vous un plugins qui fait les deux ?

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Bonjour,

    recherchez "jQuery crop and upload", vous trouverez les plugins
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Invité
    Invité(e)
    Par défaut
    en effet j'avais déjà fait des recherches de ce type, mais se que j'ai trouver permet sur la base d'une grande image d'en sélectionner une partie pour en faire une miniature.
    je ne souhaite pas proposer cela mais seulement redimensionner a la voler suivant des paramètres comme hauteur fixe, largeur fixe, taux de compression, conservation des proportions

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ne rêve pas, il n'est pas possible en JavaScript de modifier les fichiers du client et jQuery ne fait pas de miracle à ce niveau.
    Il faut uploader l'image et la redimmensionner sur le serveur.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    ça devrait être faisable dans un avenir proche

    voici un test sur FireFox 3.6

    Je charge un fichier local dans un objet Image avec
    FileReader, ensuite je redimensionne dans un objet canvas
    avec drawImage. Enfin j'extrais les données binaires
    du canvas avec getImageData

    Cependant à ce stade on a un textarea prêt à être posté avec
    les données brutes (raw) de l'image et en format texte. Ce qui n'est
    donc pas encore utilisable car ça pourrait bien être plus lourd que
    l'image non redimensionnée au format jpg :-)

    Cependant on pourrait imaginer compresser l'image en jpg avec
    un code de compression écrit en javascript et stocker ça en base64
    ou hexa ou même binaire dans un champs caché, qu'en pensez-vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <body>
    <input type='file' id='file' />
    <form>
    <textarea id='imagedata'></textarea>
    </form>
    <canvas id="canvas"></canvas>
    <script type='text/javascript'>
    var can = document.getElementById('canvas');
    var ctx = can.getContext('2d');
    var file = document.getElementById('file');
     
    file.onchange = function(event) {
    	var file = this.files[0];
    	var reader = new FileReader();
    	var img = new Image();
    	reader.onload = (function(aImg) {
    		return function(e) {
    			aImg.onload = function() {
    				var w = 100;
    				var h = Math.round(aImg.height * w / aImg.width);
    				can.width = w;
    				can.height = h;
    				ctx.drawImage(aImg, 0, 0, w, h);
    				var imgDat = ctx.getImageData(0, 0, w, 1 /* h */);
    				var ta = document.getElementById('imagedata');
    				ta.value = imgDat.data.join(',');
    			}
    			aImg.src = e.target.result;
    		};
    	})(img);
        reader.readAsDataURL(file);
    };
    </script>
    </body>
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour.

    Exemple : jQuery image upload & crop

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Bonjour.

    Exemple : jQuery image upload & crop
    Rien à voir avec le sujet traité ici, le resize se fait coté serveur (mais sinon, c'est un très joli script)

    EDIT: Pardon, pas "rien à voir" sorry
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Comme disait quelqu'un...

    Citation Envoyé par Bovino Voir le message
    Ne rêve pas, il n'est pas possible en JavaScript de modifier les fichiers du client et jQuery ne fait pas de miracle à ce niveau.
    Il faut uploader l'image et la redimmensionner sur le serveur.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Si si faut rêver, c'est faisable (pas encore crossbrowser, mais bientôt)
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par marcha Voir le message
    Si si faut rêver, c'est faisable (pas encore crossbrowser, mais bientôt)
    Personnellement, c'est pour cela que je n'utilise pas ce genre de script qui restent encore selon moi plus des "proof of concept" que de réelles fonctionnalités, mais tu as raison de dire que ça viendra, c'est je pense l'évolution logique de JavaScript ces derniers temps
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    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 383
    Points : 10 411
    Points
    10 411
    Par défaut
    En même temps qui dit avatar et pseudo dit souvent php pas loin. Et il existe une foultitude de classes qui proposent ça en php...

  12. #12
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Citation Envoyé par marcha Voir le message
    ça devrait être faisable dans un avenir proche

    voici un test sur FireFox 3.6

    Je charge un fichier local dans un objet Image avec
    FileReader, ensuite je redimensionne dans un objet canvas
    avec drawImage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    if ($("#canvasID")[0].getContext){
        var ctx = $("#canvasID")[0].getContext("2d");
        var img = new Image();
     
        $(img).load(function(){
            /*
             * image originale : ajax.png 332 * 291 et j'affiche la zone
             * top 50, left 50, width 100, height 100
             *
             * slicing img : https://developer.mozilla.org/en/Canvas_tutorial/Using_images
             * drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
             */
            ctx.drawImage(img, 50, 50, 100, 100, 10, 10, 100, 100);
        });
     
        $("#fileID").change(function(){
            // Firefox 3.6
            img.src = this.files[0].getAsDataURL();
        });
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  13. #13
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Sauvegarde des images :


    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  14. #14
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    @danielhagnoul Merci pour ton lien. Il apporte le "chainon manquant"

    Voici donc une démonstration de faisabilité d'upload
    d'image redimensionnée par le client. (FireFox 3.6)

    Code PHP qui renvoie simplement ce qu'il reçoit pour vérification:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
            list($header, $data) = explode(',', $_REQUEST['imagedata']);
            list($mime, $enc) = explode(';', substr($header, strlen('data:')));
            header('Content-Type: '.$mime);
            echo base64_decode($data);
    ?>
    La page HTML et son Javascript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <input type='file' id='file' />
    <form action='upload.php' method='post'>
    <textarea id='imagedata' name='imagedata'></textarea>
    <input type='submit' value='Envoyer' />
    </form>
    <canvas id="canvas"></canvas>
    <script type='text/javascript'>
    var can = document.getElementById('canvas');
    var ctx = can.getContext('2d');
    var file = document.getElementById('file');
    file.onchange = function(event) {
    	var file = this.files[0];
    	var reader = new FileReader();
    	var img = new Image();
    	reader.onload = (function(aImg) {
    		return function(e) {
    			aImg.onload = function() {
    				var w = 100;
    				var h = Math.round(aImg.height * w / aImg.width);
    				can.width = w;
    				can.height = h;				
    				ctx.drawImage(aImg, 0, 0, w, h);
    				var jpg = can.toDataURL("image/jpeg");
    				var ta = document.getElementById('imagedata');
    				ta.value = jpg;
    			}
    			aImg.src = e.target.result;
    		};
    	})(img);
        reader.readAsDataURL(file);
    };
    </script>
    </body> 
    </html>
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Est-ce que vous savez si ça marche aussi si Chrome et IE ?

    D''autre part : comment faire pour détecter que l'on est sur Firefox 3.6 et adapter le traitement (compression ou sans) en fonction du navigateur ?

    Merci d'avance pour vos réponses.

Discussions similaires

  1. redimentionnement d'image puis upload
    Par malkie dans le forum Flash
    Réponses: 0
    Dernier message: 19/03/2008, 15h07
  2. [Upload] Résolution d'une image
    Par shelko dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2007, 09h31
  3. [ImageMagick] Redimentionner une image sans l'enregistrer
    Par gunth dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 26/11/2006, 13h46
  4. [Upload] droit lecture sur image uploadée
    Par Mitaka dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2006, 11h52
  5. redimentionner une image
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 22/09/2005, 08h42

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