【问题标题】:Image file to Khan Academy code可汗学院代码的图像文件
【发布时间】:2016-03-10 18:15:13
【问题描述】:

所以这是我的代码,应该将图像转换为可汗学院的像素艺术:

<button onclick="Restart()">Reset</button><br />
<p></p>
<form id="myFile">
<input accept="image/*" onchange="openFile(event)" type="file" /><br />
<br /></form>
<input id="Input" max="200" min="1" name="points" oninput="Update()" type="range" /><br />
<div id="Value">
Image size: 100</div>
<canvas height="100" id="myCanvas" style="border: 1px solid #000000;" width="100">Sorry but your browser does not support the HTML canvas tag.  You might need to update your browser.</canvas><br />
Your Code<br />
&nbsp; &nbsp; &nbsp; ||<br />
&nbsp; &nbsp; &nbsp; \/<br />
<textarea cols="100" id="myTA" placeholder="Follow the instructions to get your code." readonly="" rows="10"></textarea>
<script>
pix = 100;
function Update(){
    var Input = document.getElementById('Input').value;
    document.getElementById('Value').innerHTML = 'Image size: '+Input;
    pix = Input;
    var c = document.getElementById("myCanvas");
    c.width = pix;
    c.height = pix;
};
var openFile = function(event) {
    var input = event.target;
    var reader = new FileReader();
    var Input = document.getElementById('Input');
    Input.disabled = true;
    reader.onload = function(){
        var dataURL = reader.result;
        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");
        var img = document.createElement("img");
        img.id = 'myImg';
        img.src = dataURL;
        ctx.drawImage(img, 0, 0, pix, pix);
        var tex = ctx.getImageData(0, 0, pix, pix).data;

        document.getElementById('myTA').innerHTML = '//Generator (by me) http://kennys-programs.blogspot.com/p/hi.html\n\
var imgData = ['+tex+'];\n\
var d = 0;\n\
scale(width/'+pix+', height/'+pix+');\n\
background(255, 255, 255, 0);\n\
for(var i = 0; i < imgData.length; i+=4){\n\
    stroke(imgData[i], imgData[i+1], imgData[i+2], imgData[i+3]);\n\
    point(i/4, 0);\n\
    d += 1;\n\
    if(d === '+pix+'){\n\
        translate(-'+pix+', 1);\n\
        d-='+pix+';\n\
    }\n\
}';
    };
    reader.readAsDataURL(input.files[0]);
};
function Restart(){
    window.location.reload();
};
</script>

它在 Chrome 和 Firefox 中运行良好,但在 Safari 中输出:

//Generator (by me) http://kennys-programs.blogspot.com/p/hi.html
var imgData = [[object Uint8ClampedArray]];
var d = 0;
scale(width/100, height/100);
background(255, 255, 255, 0);
for(var i = 0; i < imgData.length; i+=4){
    stroke(imgData[i], imgData[i+1], imgData[i+2], imgData[i+3]);
    point(i/4, 0);
    d += 1;
    if(d === 100){
        translate(-100, 1);
        d-=100;
    }
}

那么有人可以帮我解决这个问题吗?在 Safari 中,它应该输出一个带有 RGBA 值的数组,而不是输出文本 object Uint8ClampedArray

【问题讨论】:

  • Uint8ClampedArray 是合适的。有什么问题?
  • 问题是在 safari 中它输出的是“Unir8ClampedArray”而不是 rgba 数组。因此,在阅读实际问题之前,请不要对这个问题投反对票。 :(
  • "RGB Array" 不是 ECMAScript 中的类型,但 Uint8ClampedArray 是。该数组包含 RGB 数据(每个像素 3 个字节,每个通道一个)。

标签: javascript html generator khan-academy


【解决方案1】:

试试

var tex = JSON.stringify(ctx.getImageData(0, 0, pix, pix).data);

如果不行,试试

var tex = Array.prototype.slice.call(ctx.getImageData(0, 0, pix, pix).data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 2014-03-30
    • 2015-12-06
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2016-11-24
    相关资源
    最近更新 更多