从二进制1和0创建位图/画布图像以在JavaScript中直观地查看数据的算法?

时间:2013-07-10 21:58:44

标签: javascript jquery canvas svg bitmap

假设我在标准JavaScript字符串中有20,164个二进制数字,例如:

var data = '101010101010101010101010100110001011010101101' ...

我想要做的是通过将这些数字转换为位图或HTML5画布图像来查看这些数字的直观表示。因此,如果我遍历所有位并且它遇到1则会绘制一个黑色像素,而0则该像素将为白色。

所以我猜我需要一个142 x 142像素的网格,看起来像这样:

binary data bitmap

在JavaScript中执行此操作的算法或方法是什么?我需要做的就是在网页上显示它,所以创建一个基本的位图或画布或SVG图像就可以了。

非常感谢

3 个答案:

答案 0 :(得分:7)

你对HTML5画布的想法完全正确。如果您不想执行base64数据,可以尝试以下内容。

Javascript(没有错误检查):

var string = "1010101...";
var ctx = document.getElementById("canvas").getContext('2d');
ctx.fillStyle = "#FFF";  // Fill with white first
ctx.fillRect(0, 0, 142, 142);
ctx.fillStyle = "#000";
for (var i = 0; i < 142; i++) {  // Loop through each character
    for (var j = 0; j < 142; j++) {
        if (string[i*142+j] == '1')     // If the character is one,
            ctx.fillRect(i, j, 1, 1 );  // fill the pixel with black
    }
}

HTML:

<body>
    <canvas width=142 height=142 id="canvas"></canvas>
</body>

如果你使用它,你应该确保检查字符串的长度是你期望的长度。

答案 1 :(得分:5)

你可以做点什么

var canvas = document.getElementById("c");
var ctx = canvas.getContext("2d");

var image = new Image();
image.src ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oMCRUiMrIBQVkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12NgoC4AAABQAAEiE+h1AAAAAElFTkSuQmCC";
image.onload = function() {
    ctx.drawImage(image, 0, 0);
};

答案 2 :(得分:2)

您也可以直接在HTML中包含图像而不使用JS:

示例:

<img alt='' src='data:image/gif;base64,R0lGODlhBgASALMAAOfn5+rq6uvr6+zs7O7u7vHx8fPz8/b29vj4+P39/f///wAAAAAAAAAAAAAAAAAAACwAAAAABgASAAAIMAAVCBxIsKDBgwgTDkzAsKGAhxARSJx4oKJFAxgzFtjIkYDHjwNCigxAsiSAkygDAgA7'/>

但是图像必须采用正确的格式:jpg,tiff,png等,而不仅仅是位图。 您可以轻松地将位图转换为BMP等格式。