使用 Canvas 绘制图像
Drawing image by using Canvas
我有一个关于 Canvas 的问题,这是我的绘图代码:
.....
<script>
function drawImage(imageObj) {
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var x = 0;
var y = 0;
context.drawImage(imageObj, 0, 0);
var imageData = context.getImageData(x, y, imageObj.width, imageObj.height);
var data = imageData.data;
for(var i = 0; i < data.length; i += 4) {
var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2] + 0.18 * data[i + 3];
data[i] = brightness;
data[i + 1] = brightness;
data[i + 2] = brightness;
data[i + 3] = brightness;
}
context.putImageData(imageData, 0, 0);
}
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
imageObj.src = 'lena.jpg';
</script>
.....
这是我的代码的一部分,在 JavaScript 中 Canvas,它指示图像为灰度,在浏览器中显示图像效果很好,请注意最后一个命令是从它的源加载图像(imageObj.src = 'lena.jpg';),但是,当我把这个命令放在脚本的第一行时,浏览器没有显示任何东西,我不知道为什么必须在脚本的最后,请指教,谢谢
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
imageObj.src = 'lena.jpg';
第一行在哪里?
脚本基本上有 5 行,从这里开始。
1. var imageObj = new Image();
2. imageObj.onload = function() {
3. drawImage(this);
4. };
5. imageObj.src = 'lena.jpg';
放在第一行看起来像这样:
imageObj.src = 'lena.jpg';
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
但当时还没有创建图像。
这也应该有效:
var imageObj = new Image();
imageObj.src = 'lena.jpg';
imageObj.onload = function() {
drawImage(this);
};
onload 函数必须在源代码之前定义。否则可能会发生,图像将被加载并且甚至没有定义 onload 函数。因此 imageObj.src = 'lena.jpg';
必须至少在 imageObj.onload
.
之后
但是您可以在 drawimage
函数之前移动整个块。应该可以正常工作
我有一个关于 Canvas 的问题,这是我的绘图代码:
.....
<script>
function drawImage(imageObj) {
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var x = 0;
var y = 0;
context.drawImage(imageObj, 0, 0);
var imageData = context.getImageData(x, y, imageObj.width, imageObj.height);
var data = imageData.data;
for(var i = 0; i < data.length; i += 4) {
var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2] + 0.18 * data[i + 3];
data[i] = brightness;
data[i + 1] = brightness;
data[i + 2] = brightness;
data[i + 3] = brightness;
}
context.putImageData(imageData, 0, 0);
}
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
imageObj.src = 'lena.jpg';
</script>
.....
这是我的代码的一部分,在 JavaScript 中 Canvas,它指示图像为灰度,在浏览器中显示图像效果很好,请注意最后一个命令是从它的源加载图像(imageObj.src = 'lena.jpg';),但是,当我把这个命令放在脚本的第一行时,浏览器没有显示任何东西,我不知道为什么必须在脚本的最后,请指教,谢谢
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
imageObj.src = 'lena.jpg';
第一行在哪里?
脚本基本上有 5 行,从这里开始。
1. var imageObj = new Image();
2. imageObj.onload = function() {
3. drawImage(this);
4. };
5. imageObj.src = 'lena.jpg';
放在第一行看起来像这样:
imageObj.src = 'lena.jpg';
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
但当时还没有创建图像。
这也应该有效:
var imageObj = new Image();
imageObj.src = 'lena.jpg';
imageObj.onload = function() {
drawImage(this);
};
onload 函数必须在源代码之前定义。否则可能会发生,图像将被加载并且甚至没有定义 onload 函数。因此 imageObj.src = 'lena.jpg';
必须至少在 imageObj.onload
.
但是您可以在 drawimage
函数之前移动整个块。应该可以正常工作