getimagedata sur photo

Pour toutes les discussions javascript, jQuery et autres frameworks
valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

getimagedata sur photo

Message par valentin » 09 avr. 2024, 16:21

bonjour
et merci de me permettre de rejoindre ce forum
je commence a programmer en javascript avec Visual studio code
mon problème viens de getimagedata
sur un Canvas je dessine des formes géométriques et avec getimagedata j'arrive a récupérer une portion
mais si c'est une photo ma capture est blanche
je joint mon code JS

Code : Tout sélectionner

var canvas = document.getElementById('myCanvas');
 

  let ctx = canvas.getContext('2d'),
  cW = canvas.width,
  cH = canvas.height,
  imgW = 120,
  imgH = 120;

  var img_chat = document.createElement("img");
 
  img_chat.onload = function() {
  ctx.drawImage(img_chat, 4,4,100,100);
  ctx.drawImage(canvas,160,4);

     };
  img_chat.src="bitma.bmp" ;

var data = new Uint8Array(imgW * imgH * 4);
crypto.getRandomValues(data);
var img = new ImageData(new Uint8ClampedArray(data.buffer), imgW, imgH);
ctx.putImageData(img, 0, 0);
ctx.fillStyle = "yellow";
ctx.fillRect(2,2,20,20);

function drawpixel(ctx) {

ctx.fillStyle = "blue";

ctx.fillRect(2,2,50,50);

var imgd = ctx.getImageData(4,4,70,70);
var pix = imgd.data;
  
  
  for (var i = 0, n = pix.length; i < n; i += 4) {
      pix[i  ] =  pix[i  ]; // red
      pix[i+1] =  pix[i+1]; // green
      pix[i+2] =  pix[i+2]; // blue
      // i+3 is alpha (the fourth element)
  }
ctx.putImageData(imgd, 150, 300);
}

 drawpixel(ctx);
voici mon code HTLM

Code : Tout sélectionner

<canvas id="myCanvas" width="550" height="510"></canvas>;

<script>

</script>

<input type="button" value="Cliquer ici pour lancer" onclick="drawpixel();"/>

<script src="script.js" defer></script>
<link href="style.css" rel="stylesheet">

je joint pas de photo remplacer "bitma.bmp"

merci d'avance de votre aide

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: getimagedata sur photo

Message par webmaster » 10 avr. 2024, 10:16

Bonjour

La console javascript montre une erreur dans ctx.fillStyle = "blue"; de la fonction drawPixel()

C'est logique, ctx n'est pas envoyé dans le onclick alors qu'il est attendu en paramètre
Il faut l'enlever et définir le ctx avec une var en début de script

Code : Tout sélectionner

 var ctx = canvas.getContext('2d')
Cela devrait maintenant fonctionner
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 12:18

bonjour
et merci de ton aide
j'ai enlevé le " fillstyle" et mis le " ctx "en var
mais toujours pas une portion de la photo par contre ou j'ai
tracé sur le Canvas des rectangles je les vois dans ma capture
donc comment avoir les pixels de ma photo
merci encore de ton aide

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: getimagedata sur photo

Message par webmaster » 10 avr. 2024, 13:19

Je ne comprends pas bien ce que le script est sensé faire

Voici ce que j'ai en rendu avec un drapeau en image
Capture d’écran 2024-04-10 à 13.18.20.png
Capture d’écran 2024-04-10 à 13.18.20.png (49.84 Kio) Vu 381 fois
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 13:34

bonjour
d'après ton lancement je vois que toi sa marche sur la capture en bas a gauche on voit une partie du drapeau donc de image bmp
moi j'ai rien je dois avoir un conflit avec getimagedata

moi je veux récupère les pixels d'une image (bmp png jpg) et ensuite
faire un algo dessus pour les transformer en Halftone(point journal)

tu as rien changer au programme que j'ai fait ?
tu peux m'envoyer le tien que tu viens de modifier
merci

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 13:43

bonjour
par contre mon" button" marche pas de index.html

Code : Tout sélectionner

<script src="script.js" defer></script>
<link href="style.css" rel="stylesheet">
<input type="button" value="Cliquer ici pour lancer" onclick="drawpixel(ctx);"/>
j'ai cette erreur dessous

Uncaught DOMException DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
at drawpixel (d:\dessin\plume2\script.js:36:16)
at onclick (d:\dessin\plume2\index.html:13:81)

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 18:19

bonjour
j'avance un peu je n'ais plus erreur de getimagedata
car je viens ajouter
img_chat.crossOrigin = "anonymous";

Code : Tout sélectionner

let ctx = canvas.getContext('2d'),
  cW = canvas.width,
  cH = canvas.height,
  imgW = 80,
  imgH = 80;
  ctx.fillStyle = "green";
  ctx.fillRect(2,2,150,150);

  var img_chat = document.createElement("img");
  img_chat.crossOrigin = "anonymous";
  img_chat.onload = function() {
  ctx.drawImage(img_chat, 14,14,80,80);
  ctx.drawImage(canvas,160,4);
 };
  img_chat.src="bitma2.bmp" ;
mais maintenant mon image n'apparait plus
des qu'un probleme disparait un autre apparait;
merci d'avance pour un peu aide

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: getimagedata sur photo

Message par webmaster » 10 avr. 2024, 19:44

J'ai mis le code avec le drapeau ici
https://www.toutjavascript.com/user/getimagedata.html

Je me demande si le format BMP est bien accepté
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 20:56

bonsoir et merci pour la correction
donc tu as tout mis dans le Html
donc pas fichier *.js
pas de fichier *css
quand j'appui sur ton lien sa marche
donc j'ai fait F12 du navigateur pour inspecter ton code
que j'ai copier dans un répertoire "nouveau"
j'ai aussi mis ton fichier dedans "drapeau.png"
et la quand j'appui sur le Html
je vois bien les formes du haut avec le drapeau mais pas
en bas même en cliquant sur le bouton
sa me dépasse
as tu une explication
merci

valentin
Messages : 20
Enregistré le : 09 avr. 2024, 16:08

Re: getimagedata sur photo

Message par valentin » 10 avr. 2024, 21:47

ps: les 2 liens sont lancer avec google chrome je ne sais pas si sa
fait une différence vu que ton lien marche et pas mon Html
qui sont identique
bon j'arrête pour aujourd'hui je vais aller prendre
un Doliprane

Répondre