J'ai un PNG codé en base64. J'ai besoin d'avoir la couleur d'un pixel en utilisant javascript. Je suppose que je vais devoir le convertir à un PNG normal. Quelqu'un peut-il me diriger dans la bonne direction?Obtenir la couleur des pixels de Base64 PNG en utilisant javascript?
Répondre
Créez un objet Image
avec l'image base64 comme source. Ensuite, vous pouvez dessiner l'image sur un canevas et utiliser la fonction getImageData
pour obtenir les données de pixels.
est ici l'idée de base (je ne l'ai pas testé):
var image = new Image();
image.onload = function() {
var canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext('2d');
context.drawImage(image, 0, 0);
var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
// Now you can access pixel data from imageData.data.
// It's a one-dimensional array of RGBA values.
// Here's an example of how to get a pixel's color at (x,y)
var index = (y*imageData.width + x) * 4;
var red = imageData.data[index];
var green = imageData.data[index + 1];
var blue = imageData.data[index + 2];
var alpha = imageData.data[index + 3];
};
image.src = base64EncodedImage;
Merci beaucoup! J'ai ensuite pris cela et converti en codes hexadécimaux. Est-il possible de tirer des données hexadécimales à partir de getImageData, ou dois-je le convertir. De toute façon, merci! – switz
@Switz: Pas directement. Vous avez juste à convertir chaque canal individuellement avec 'toString (16)' ou quelque chose de similaire. –
C'est ce que j'ai fait. Merci! – switz
Oui, vous aurez à la fois base64-decode, puis décoder le flux PNG en Javascript. C'est un problème difficile (mais pas impossible). Vous êtes peut-être contraint à cette exigence, mais si vous donnez un peu plus de contexte, vous obtiendrez peut-être des réponses étendues fournissant d'autres solutions de contournement dans la situation. Par exemple. D'où viennent les données PNG? Où est-ce que ça va? Avez-vous besoin d'un seul pixel fixe de chaque image? Avez-vous un support serveur? Etc. –
Pour le rendre un peu plus détaillé: j'essaie d'écrire une extension Safari. Il imitera les capacités de Colorzilla pour Firefox. La seule façon que j'ai vu que c'est possible est de prendre une "capture d'écran". La sortie est en Base64 PNG. Je devrais éventuellement suivre la souris, puis la synchroniser avec l'image pour extraire les données du pixel cliqué de l'image. – switz
@BenZotto Pourquoi serait-ce difficile? – Melab