canvas d'html5: Conversion de fichier de l'Image DataURL jette Uncaught TypeError
Je vais essayer d'obtenir le Base64/Données de l'URL d'un fichier d'image en Javascript. L'utilisateur fondamentalement sélectionne une image via le Fichier de contrôle d'Entrée et les Données de l'URL est générée. Cependant, j'ai cette erreur:
Uncaught TypeError: Échec de l'exécution de 'drawImage' sur
'CanvasRenderingContext2D': La valeur fournie n'est pas de type
'(HTMLImageElement ou HTMLVideoElement ou HTMLCanvasElement ou
ImageBitmap)'
HTML:
<body>
<form id="form1">
<div>
<input type="file" id="imageinput" onchange="testit(event)" />
<canvas width="300" height="300" id="mycanvas" style="display: none;"></canvas>
</div>
</form>
</body>
Javascript:
function testit(event) {
var myImage = URL.createObjectURL(event.target.files[0]);
var myCanvas = document.getElementById('mycanvas');
var ctx = myCanvas.getContext('2d');
ctx.drawImage(myImage, 0, 0);
var mydataURL = myCanvas.toDataURL('image/jpg');
alert(mydataURL);
}
Pourquoi n'est-ce pas le code de travail, les gars?
- vous avez besoin de mettre l'url sur une balise img src puis passer l'img à la toile pour attirer, une fois chargé.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas dessiner une image à partir de l'url directement sur la toile. Vous devez créer un élément de l'image ou de l'objet pour le faire.
Ici, nous avons créé un
image
objet et de définir lasrc
à l'utilisateur sélectionné url de l'image. Après l'image est chargée, nous sommes en l'ajoutant à la toile.EDIT:
Ici, nous avons un problème de plus. Quelle que soit la taille de l'image, vous obtiendrez toujours 300x300 recadrée dataurl de l'image à cause de la statique de la toile de largeur et de hauteur. Nous pouvons donc définir la largeur et la hauteur de la toile de manière dynamique une fois l'image chargée. Nous pouvons utiliser
console.log()
au lieu dealert()
de sorte que vous pouvez ouvrir et de voir l'image à partir de votre console dans votre navigateur lui-même.Voici le code final:
Ici est le violon (j'ai fait de la toile visible de sorte que vous pouvez voir l'ensemble de l'image et de la largeur et de la hauteur de changement dans la toile):
Mise à JOUR:
Comme @Kaiido mentionné, Il va produire des images PNG depuis le 'image/jpg' est pas le type mime. 'image/jpeg' est le type mime pour les fichiers JPG et JPEG images.
Mis À Jour Le Violon:
http://jsfiddle.net/k7moorthi/r8soo95p/4/
toDataURL()
est"image/jpeg"
. Une OP et votre code n'est pas valide et sera de retour au format png.Vous essayez de dessiner un objet URL de la toile. vous devez créer une image dans la mémoire de la première
http://jsfiddle.net/zmtu6t6c/4/