在学习canvas中实现图片的浮雕效果时遇到的一点问题
问题我用问号标注出来了,先谢谢大家了
html部分
javascript部分
html部分
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#canvas {
border: thin black solid;
}
</style>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
<input type="button" name="show" id="show" value="浮雕效果" onclick="show()" />
</body>javascript部分
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var image = new Image();
image.src = "testImage.jpg";
context.drawImage(image, 0, 0);
function show() {
var imagedata, data, length, width;
imagedata = context.getImageData(0, 0, canvas.width, canvas.height);
data = imagedata.data;
width = imagedata.width;
length = data.length;
for(var i = 0; i < length; i++) {
//判断是否处在最后一行
if(i <= length - width * 4) {
//跳过Alpha属性
if((i+1) % 4 !== 0) {
//判断是否在每行的最后一个像素,不清楚为什么要添加这个判断
if((i+4) % (width*4) == 0) {
data[i] = data[i-4];
data[i+1] = data[i-3];
data[i+2] = data[i-2];
data[i+3] = data[i-1];
i += 4; //?这里也不清楚,加没加好像也一样
} else {
//?请问这里为什么要这样写
data[i] = 255/2 + 2*data[i] - data[i+4] - data[i+width*4];
//在网上还有一种说法叫做
//基于当前像素的前一个像素RGB值与它的后一个像素的RGB值之差再加上128
//与本例中的又有什么区别呢?
}
}
} else {
//最后一行的情况
//跳过Alpha属性
if((i+1) % 4 !== 0) {
//当前像素等于他的上一行像素?为什么要这样写
data[i] = data[i-width*4];
}
}
}
context.putImageData(imagedata, 0, 0);
};
...全文
相关推荐
Canvas滤镜 灰度 浮雕 效果
在这个项目中,我们关注的是如何通过JavaScript实现Canvas的滤镜效果,特别是灰度和浮雕效果。这些特效可以增强用户体验,为网站或应用程序添加更丰富的视觉表现。首先,让我们了解灰度滤镜。
基于浮雕图像的3D浮雕效果实现
针对如何使图像中的浮雕更具有立体感与观赏性这一问题,提出了一种利用单幅浮雕图像来实现3D浮雕效果的方法。该方法主要是通过给图像目标区域增加高度值来实现。首先将图像看作是由像素点组成的矩阵,进行相关矩阵
canvas滤镜效果实现代码
在代码中,我们加载了一张图片并将其绘制到`oldCanvas`上。这个过程在`window.onload`事件触发时执行,确保图片已经完全加载完毕。
用vb实现图像处理(柔化、锐化、油画、浮雕效果),附加打开图片、保存处理后的图片功能
用vb实现图像处理(柔化、锐化、油画、浮雕效果),附加打开图片、保存处理后的图片功能
图片处理(压缩、截屏、滤镜、浮雕、锐化、柔化、雾化效果)
这个脚本是关于图片处理的一些技术和效果,有图片压缩、截屏、滤镜、浮雕、锐化、柔化、雾化等效果


