【发布时间】:2016-02-09 21:03:37
【问题描述】:
我需要以下 PNG 图像的 2D 二进制表示:
谁能提供将上面的 PNG 图像转换为 1 = 陆地和 0 = 水的二维数组的方法或来源?
通过阅读,我找到了一种在使用在线 Base64ImageEncoder 将图像转换为 base64 后循环遍历图像中所有像素的方法。
使用下面的fiddle 我可以判断像素是 water 还是 land 然后改变像素颜色,所以输出是:
我觉得我非常接近获得我所需要的东西。我需要做些什么来更改主 for-loop 以将数据保存在 Matrix 中?
JavaScript:
$(document).ready(function() {
$("#btnSubmit").click(function(){
GetBinary();
});
});
function GetBinary() {
var canvas = document.createElement("canvas");
canvas.width = imgElement.offsetWidth;
canvas.height = imgElement.offsetHeight;
var ctx = canvas.getContext("2d");
ctx.drawImage(imgElement,0,0);
var map = ctx.getImageData(0,0,canvas.width,canvas.height);
var imdata = map.data;
var r,g,b;
for(var p = 0, len = imdata.length; p < len; p+=4) {
r = imdata[p]
g = imdata[p+1];
b = imdata[p+2];
if ((r >= 164 && r <= 255) && (g >= 191 && g <= 229) && (b >= 220 && b <= 255)) {
// black = water
imdata[p] = 0;
imdata[p+1] = 0;
imdata[p+2] = 0;
} else {
// white = land
imdata[p] = 255;
imdata[p+1] = 255;
imdata[p+2] = 255;
}
}
ctx.putImageData(map,0,0);
imgElement.src = canvas.toDataURL();
}
请注意,我使用的是 base64 图像,因此我们不允许在此处粘贴,因为它太长了。请改用my fiddle。
HTML:
<img id='myImage' src='base64 image data' />
<br />
<input id = "btnSubmit" type="button" value="Get Binary Image"/>
【问题讨论】:
-
要理解问题,您不确定新行(内部数组)从哪里开始?应该是
pixelWidth /4? -
@JuanMendes:嗯,为什么是 4?
-
因为看起来你有四个数字定义一个像素?
标签: javascript google-maps binary-data