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 :

Connaître poids canvas


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut Connaître poids canvas
    Bonjour à tous !

    Je cherche à créer un interface simple d'utilisation pour qu'un visiteur quelconque puisse héberger des images. J'ai créé un petit script en JS pour que l'image soit redimensionnée en 640*360 (avec un fond noir) grâce à l'outil canvas. Je cherche maintenant à hébergé cette image modifiée sur mon serveur en PHP. Pour cela, j'ai converti l'image canvas en data URL (avec canvas.toDataURL), que j'ai mis dans un input hidden et que j'envoie en POST. Le problème, c'est que la taille du POST est limité à 2Mo sur mon serveur, et je ne sais pas comment connaître le poids du canvas pour avertir l'utilisateur que l'image ne peut pas être hébergée.

    Mon code :
    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
    			<form action="traiter_image.php" method="post" id="fileupload" name="fileupload" enctype="multipart/form-data" >
    				<input type="file" id="selectedfile" placeholder="Choisissez un fichier..."  class="fichier_envoye" />
    				<input type="text" id="url" name="url" value="URL" style="min-width:800px;"/>
    				<input type="submit" value="Submit" />
    			</form>
    			<script>
    			function imageHandler(e2) 
    			{ 
    				var c = document.getElementById("canvas");
    				var ctx = c.getContext("2d");
    				var img = new Image();   // Crée un nouvel objet Image
    				img.src = e2.target.result; // Définit le chemin vers sa source
    				img.onload = function()
    				{
    				  ctx.clearRect(0, 0, c.width, c.height);
    				  ctx.fillStyle = "black";
    				  ctx.fillRect(0, 0, c.width, c.height); 
    				  var largeurImage = img.width * (360/img.height);
    				  var longueurImage = img.height * (360/img.height);
    				  ctx.drawImage(img, 640/2 - largeurImage/2, 360/2 - longueurImage/2, largeurImage, longueurImage);
    				  var dataURL = c.toDataURL("image/png");
     
    				  document.getElementById('url').value=dataURL;
    				}
    			}
     
    			function loadimage(e1)
    			{
    			  var filename = e1.target.files[0]; 
    			  var fr = new FileReader();
    			  fr.onload = imageHandler;  
    			  fr.readAsDataURL(filename); 
    			}
     
    			window.onload=function()
    			{
    			  var y = document.getElementById("hiddenfile");
    			  y.addEventListener('change', loadimage, false);
    			}
    			</script>

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Tu veux dire comme ça :
    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
    			<form action="traiter_image.php" method="post" id="fileupload" name="fileupload" enctype="multipart/form-data" >
    				<input type="file" id="selectedfile" placeholder="Choisissez un fichier..."  class="fichier_envoye" />
    			********<input type="text" id="url" name="MAX_FILE_SIZE" value="2097152" style="min-width:800px;"/>
    				<input type="submit" value="Submit" />
    			</form>
    			<script>
    			function imageHandler(e2) 
    			{ 
    				var c = document.getElementById("canvas");
    				var ctx = c.getContext("2d");
    				var img = new Image();   // Crée un nouvel objet Image
    				img.src = e2.target.result; // Définit le chemin vers sa source
    				img.onload = function()
    				{
    				  ctx.clearRect(0, 0, c.width, c.height);
    				  ctx.fillStyle = "black";
    				  ctx.fillRect(0, 0, c.width, c.height); 
    				  var largeurImage = img.width * (360/img.height);
    				  var longueurImage = img.height * (360/img.height);
    				  ctx.drawImage(img, 640/2 - largeurImage/2, 360/2 - longueurImage/2, largeurImage, longueurImage);
    				  var dataURL = c.toDataURL("image/png");
     
    				  document.getElementById('url').value=dataURL;
    				}
    			}
     
    			function loadimage(e1)
    			{
    			  var filename = e1.target.files[0]; 
    			  var fr = new FileReader();
    			  fr.onload = imageHandler;  
    			  fr.readAsDataURL(filename); 
    			}
     
    			window.onload=function()
    			{
    			  var y = document.getElementById("hiddenfile");
    			  y.addEventListener('change', loadimage, false);
    			}
    			</script>

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    non un input hidden
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    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
    On peut obtenir une bonne approximation de la taille de l'image dans le JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var 
        dataUrl = canvas.toDataURL( "image/png" ),
        dataUrlLength = dataUrl.length,
        pngHead = "data:image/png;base64,",
        imgFileSize = Math.round( ( dataUrlLength - pngHead.length ) * 3/4 );

    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.)

  6. #6
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Merci danielhagnoul, c'est ce que je cherchais à faire !
    Cependant, même en mettant une limite, certaine image ne passent pas l'envoie en PHP... :/ Je vais me tourner vers la section PHP pour pallier à ce problème.
    Merci !
    [EDIT] Apparement, il faut mieux utiliser AJAX, en fait !

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. Réponses: 5
    Dernier message: 06/03/2003, 13h27
  3. [Antialiasing][Wu][poids]
    Par JHelp dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 22/12/2002, 00h17
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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