function previewFile() {
var preview = document.querySelector('img');
var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();
reader.onloadend = function () {
preview.src = reader.result;
}
if (file) {
reader.readAsDataURL(file);
} else {
preview.src = "";
}
}
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ ......... 8A/fyiiigD/9k="
Объект ImageData представляет базовые пиксельные данные области объекта холста. Он содержит следующие атрибуты только для чтения:
width - Ширина изображения в пикселях.
height - Высота изображения в пикселях.
data - представляет собой одномерный массив, содержащий данные в порядке RGBA, с целыми значениями от 0 до 255 (в комплекте).
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
#color {
background: red;
}
</style>
<title>
</title>
</head>
<body>
<canvas id="canvas"></canvas>
<div id="color">цвет</div>
<div id="object" style="display: flex;">[<div id="results"></div>]</div>
<script type="text/javascript">
var mass_color = [];
var img = new Image();
img.src = '2.png';
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = 1000;
canvas.height = 1000
img.onload = function() {
ctx.drawImage(img, 0, 0, 1000, 1000);
img.style.display = 'none';
};
var color = document.getElementById('color');
function pick(event) {
var x = event.layerX;
var y = event.layerY;
var pixel = ctx.getImageData(x, y, 1, 1, 1000, 1000);
var data = pixel.data;
var rgba = 'rgba(' + data[0] + ', ' + data[1] +
', ' + data[2] + ', ' + (data[3] / 255) + ')';
color.style.background = rgba;
color.textContent = rgba;
results.innerHTML += `"${data[0]}${data[1]}${data[2]}${data[3] / 255}",`
}
canvas.addEventListener('mousemove', pick);
</script>
</body>
</html>
// Берём любое изображение:
var img = document.querySelector('img');
// Создаём <canvas> того же размера:
var canvas = document.createElement('canvas');
canvas.width = img.clientWidth;
canvas.height = img.clientHeight;
var context = canvas.getContext('2d');
// Копируем изображение в canvas:
context.drawImage(img, 0, 0);
// Вытаскиваем цвет нужного пикселя:
var data = context.getImageData(x, y, 1, 1).data;
var rgba = 'rgba(' + data[0] + ', ' + data[1] +', ' + data[2] + ', ' + (data[3] / 255) + ')';
console.dir(rgba);
javascript canvas context getimagedata The operation is insecure
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<title>Пример</title>
<style>
body {
margin: 0;
font-family: 'Verdana';
font-size: 18px;
line-height: 1.5;
text-align: center;
color: #000000;
}
.table {
display: table;
width: 100%;
height: 100vh;
}
.cell {
display: table-cell;
vertical-align: middle;
padding: 50px;
}
input[type="file"] {
display: block;
background: #cdf;
padding: 15px;
border-radius: 3px;
border: 1px solid rgba(0,0,0,0.1);
width: 480px;
margin: auto;
}
.result {
display: block;
background: #cfd;
padding: 15px;
border-radius: 3px;
border: 1px solid rgba(0,0,0,0.1);
width: 480px;
margin: 25px auto 0 auto;
}
.result:empty {
display: none;
}
</style>
<script>
function imageHandler(input) {
if (input.files) {
var img = document.createElement('img');
img.src = URL.createObjectURL(input.files[0]);
img.style.position = 'fixed';
img.style.top = '-999999px';
img.style.right = '-999999px';
document.querySelector('.cell').append(img);
setTimeout(function() {
var canvas = document.createElement('canvas');
canvas.width = img.clientWidth;
canvas.height = img.clientHeight;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var data = context.getImageData(1, 1, 1, 1).data;
var rgba = 'rgba(' + data[0] + ', ' + data[1] +', ' + data[2] + ', ' + (data[3] / 255) + ');';
document.querySelector('.result').innerHTML = 'Цвет первого пикселя: ' + rgba;
}, 1000);
}
}
</script>
</head>
<body>
<div class="table">
<div class="cell">
<input onchange="imageHandler(this);" type="file">
<div class="result"></div>
</div>
</div>
</body>
</html>
Единственное НО, после вставки изображения на страницу нужно время пока оно отрисуется, поэтому нужна небольшая задержка прежде чем пихать фото в холст, иначе пиксели не прочитаются потом.