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

JavaScript Discussion :

Importation d'une image depuis l'ordinateur sur une page hébergée


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut Importation d'une image depuis l'ordinateur sur une page hébergée
    Bonjour !

    Je suis en train de créer un éditeur de sprites, j'ai donc décider de le poster sur Github.
    Mais maintenant, je ne peux plus importer d'images depuis mon ordinateur (une question de sécurité sans doutes...)
    Si je rentre l'adresse d'une image sur le net, ça marche parfaitement ! Mais c'est pas vraiment le but...

    Je suis sûr qu'il y a une manière de contourner ce problème, mais comment ?

    page : https://louis700.github.io/sprite-splitter/

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour récupérer un fichier de l'ordinateur, vous devez passer par un champ "input type=file".

  3. #3
    Membre à l'essai Avatar de dbroqua
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Points : 19
    Points
    19
    Par défaut
    Salut,

    Si tu rajoutais un input de type file ?


    Une fois qu'un file est sélectionné tu le convertit en base64 pour pouvoir le manipuler dans ton canvas.

    EDIT : grillé !

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    J'ai déjà essayé, mais après ça je ne pouvais pas charger l'image dans le canvas puisque l'adresse est masquée !
    Il existe peut-être une manière de récupérer directement le fichier chargé et pas son adresse à partir de cet élément ?

    Ah, je vais chercher de ce côté alors, merci !

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour lire le contenu du fichier choisi dans un champ "input", vous pouvez utiliser ce code par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var lecteur = new FileReader();
     
    lecteur.addEventListener("loadend", function() {
     
    	// le contenu du fichier est dans lecteur.result
     
    });
     
     
    lecteur.readAsBinaryString(champInput.files[0].slice());

    édition à 21 h 52 : laissez tombez ce code, celui de Watilin ci dessous à l'air plus efficace.

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonjour,
    je propose cette solution :
    1. Convertir le file en blob avec URL.createObjectURL ;
    2. Passer l’URL du blob à un élément <img> ;
    3. Utiliser cette <img> avec la méthode drawImage du canevas.


    C’est une solution relativement simple qui ne nécessite pas l’emploi d’un FileReader. Je t’invite à lire également le guide du MDN Utiliser des fichiers à partir d’applications web.

    Code html : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="utf-8" />
      <title>Input file &amp; Canvas</title>
      <style>
     
      input { display: block; }
      canvas { outline: dotted thin silver; }
     
      </style>
    </head>
    <body>
     
    <!-- "multiple" n’est pas obligatoire -->
    <input type="file" multiple />
    <canvas width="400" height="300">
      Canvas ne marche pas…
      Se pourrait-il que votre navigateur soit obsolète&#x202f;?
    </canvas>
     
    <script> "use strict";
     
    let $canvas = document.querySelector("canvas");
    let $input  = document.querySelector("input");
     
    let cx = $canvas.getContext("2d");
     
    $input.addEventListener("change", () => {
      // la boucle for va avec l’attribut "multiple"
      // pour un seul fichier, on peut se contenter de "$input.files[0]",
      // mais il faut d’abord tester son existence
      for (let file of $input.files) {
        // comme dans le guide MDN, on s’assure que le fichier est bien une image
        if (/^image\//i.test(file.type)) {
          let blobUrl = URL.createObjectURL(file);
          let $img = document.createElement("img");
     
          $img.onerror = (errorEvent) => {
            URL.revokeObjectURL(blobUrl);
            console.log(errorEvent);
          };
     
          $img.onload = () => {
            URL.revokeObjectURL(blobUrl);
            cx.drawImage($img, 0, 0);
          };
     
          $img.src = blobUrl;
        }
      }
    });
     
    </script>
    </body>
    </html>
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    Merci à tous pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 08/03/2013, 15h25
  2. Réponses: 9
    Dernier message: 03/07/2006, 18h32
  3. [Image]insérer un copyright sur une image
    Par ehmppowa dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/04/2006, 15h32
  4. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51
  5. Une infobulle à partir des coordonnées sur une image
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 21h20

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