【发布时间】:2016-10-21 22:55:03
【问题描述】:
我一直试图理解为什么我的代码中的同一个 JavaScript 函数在函数内部调用而不是通过 HTML 按钮单击调用时会产生不同的结果。
基本上,我正在尝试使用杜克大学的Simple Image 库上传图像并将其转换为灰度。然后这些图像显示在两个 <canvas> 元素上。
这是我的代码(很抱歉没有制作小提琴,因为我正在使用的库不能包含在其中。这是我的codepen 的链接)-
HTML -
<script src="http://www.dukelearntoprogram.com/course1/common/js/image/SimpleImage.js"></script>
<h1>Upload and Display an Image</h1>
<canvas id="canvas"></canvas>
<canvas id="canvas2"></canvas>
<p>Filename:
<input type="file" multiple="false" accept="image/*" id="fileInput" onchange="upload()">
</p>
<p><input type="button" value="Make Grayscale" onclick="makeGray()"></p>
CSS -
html {
margin: 10px;
}
h1 {
font-family: helvetica;
}
canvas {
width: 500px;
height: 250px;
border-style: solid;
}
#textInput {
font-size: 20px;
}
JavaScript -
var img;
function upload() {
img = new SimpleImage(fileInput);
var canvas = document.getElementById("canvas");
img.drawTo(canvas);
}
function makeGray() {
for(var pixel of img.values()) {
var avg = (pixel.getRed() + pixel.getGreen() + pixel.getBlue())/3;
pixel.setRed(avg);
pixel.setGreen(avg);
pixel.setBlue(avg);
}
var canvas = document.getElementById("canvas2");
img.drawTo(canvas);
}
这很有效,因为我可以单击Make Grayscale 按钮并在将灰度图像上传到第一个画布后将其显示在第二个画布上。但是,当我去掉 Make Grayscale 按钮并在 upload() 函数内调用 makeGray() 函数时,它不会发布灰度图像,而是将普通图像发布到第二个画布上。
我不确定为什么会这样,因为控制台上没有错误。任何有关这方面的信息都会很棒。谢谢!
【问题讨论】:
标签: javascript html canvas