【发布时间】:2018-05-15 21:19:10
【问题描述】:
是否可以使用十六进制代码从数组生成图像,如果可以,如何?
这个数组:["#ffffff", "#ff0000", "#ffff00"]
将输出一个图像,其中第一个像素的颜色为:“#ffffff”,第二个:“#ff0000”,第三个:“#ffff00”,依此类推...
我的方法是创建大量具有不同背景颜色的 div 元素,但如果你有一个巨大的数组,那真的很慢......
我的方法看起来像这样:
var index;
for (index = 0; index < array.length; index++) {
var indexx;
$("container").append("<div style='background-color: " + array[length] + "; position: absolute; top: 0; left: " + index + ";'></div>");
}
我需要的是这样的:http://jsfiddle.net/Evilzebra/9xnn8tw5/ 但还有颜色......
编辑:
//create some random data for example
var data = [];
for(var i = 0, l = 1000000; i < l; i++){
data.push(Math.round(Math.random()*255));
}
var image = document.getElementById('i');
//display image only after it's loaded
image.onload = function(){this.style.display='block'}.bind(image);
//and finally set the .src
image.src = dataToBase64(data, 1000, 1000);
function dataToBase64(colors, width, height){
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d'),
color;
//setup canvas
canvas.width = width,
canvas.height = height;
//grab data
var data = ctx.getImageData(0, 0, width, height),
_data = data.data; //simple speed optimization
//place data
for(var i = 0, l = _data.length; i < l; i+3){
_data[i] = colors[i],
_data[i+1] = color[i+1],
_data[i+2] = color[i+2],
_data[i+3] = 255;
}
ctx.putImageData(data, 0, 0);
//return base64 string
return canvas.toDataURL();
}
应该给像素随机颜色...但它不起作用...
查看上面的小提琴并将代码粘贴到那里...
【问题讨论】:
-
这就是
canvas的用途。您可以单独定位每个像素。 PS 数组的大小可能不会导致减速;您可能试图在页面上放置的元素数量是。我使用画布从大量像素颜色中创建图像,而且速度非常快。 -
我需要的是这样的:jsfiddle.net/Evilzebra/9xnn8tw5 但是还有颜色...你能告诉我怎么做吗?我对画布一无所知...
-
您为什么不阅读 Alex 在他的评论中包含的文档,尝试一些代码,如果有任何问题再回来?
-
哦,我没注意到这是一个链接... :D
标签: javascript arrays image hex