Im using clusterfck.js для анализа и возврата цветов. Я не собираюсь фотографировать изображения из результатов поиска, но, похоже, проблема связана с тем, как clusterfck выполняет чтение данных. Вот код из clusterfck:Как получить данные изображения из внешнего url - и вернуть цвета
$(".kmeans-button").click(function() {
if (!colors) {
colors = getImageColors();
}
var k = $(this).attr("data-k"); // $.data() returned undefined
$("#clusters").empty().append("<div>calculating distances...</div>");
kmeans.clusterColors(colors, k); // Threaded analyzing (worker)
})
function getImageColors() {
var img = $("#test-image");
var width = img.width();
var height = img.height();
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
context.drawImage(img.get(0), 0, 0);
var data = context.getImageData(0, 0, width, height).data;
var colors = [];
for(var x = 0; x < width-12; x += 3) {
for(var y = 0; y < height-12; y += 3) { // sample image, every 3rd row and column
var offs = x*4 + y*4*width;
var color = [data[offs + 0], data[offs + 1], data[offs + 2]];
colors.push(color);
}
}
return colors;
}
Я попытался положить в img.crossOrigin = "Anonymous"; без везения. Я предполагаю, что он должен быть загружен в функцию af и как-то обратный цвет. Это лучшее, что я мог придумать, но он не работает.
$(".kmeans-button").click(function() {
if (!colors) {
getImageColors2(function(colors2) {
colors=colors2.slice(0);
var k = $(this).attr("data-k-e"); // $.data() returned undefined
$("#clusters").empty().append("<div>calculating colors...</div>");
kmeans.clusterColors(colors, k);
})
}
})
function getImageColors2(callback) {
var img2= document.getElementById("test-image");
var img = new Image();
img.onload = function() {
var width = img.width();
var height = img.height();
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
context.drawImage(img.get(0), 0, 0);
var data = context.getImageData(0, 0, width, height).data;
var colors = [];
for(var x = 0; x < width-12; x += 3) {
for(var y = 0; y < height-12; y += 3) { // sample image, every 3rd row and column
var offs = x*4 + y*4*width;
var color = [data[offs + 0], data[offs + 1], data[offs + 2]];
colors.push(color);
}
}
callback(colors);
}
img.src=img2.src;
}
Я предполагаю, что он не может получить доступ к данным, не загружая их в изображение на внешнем сервере. Что я скучаю по ней? Может, я все понял?
какие ошибки вы получаете в м econsole –
Возможная Дубликат [Canvas запятнан данных кросс происхождения] (http://stackoverflow.com/questions/ 13674835/canvas-tainted-by-cross-origin-data) – Siguza
Сервер должен разрешить вам считывать данные изображения, поэтому, если сервер не отправляет «Access-Control-Allow-Origin», который позволит вам получить доступ данные изображения затем вы не можете прочитать. –