图像处理 浮雕原理

编程入门 行业动态 更新时间:2024-10-27 14:31:23

图像处理 <a href=https://www.elefans.com/category/jswz/34/1720656.html style=浮雕原理"/>

图像处理 浮雕原理

图像处理 浮雕原理

HTML5 Image Effects – Emboss Today we continue our HTML5 canvas image filter examples, today I would like to share with you a method of applying a Emboss effect to images. This is pretty difficult method, but I sure that you can repeat it. In our demo we can play with different images by adding a emboss effect to them, as well as we can ‘export’ our result on the image element (<img>).

HTML5图像效果–浮雕今天,我们继续我们HTML5画布图像滤镜示例,今天,我想与大家分享一种对图像应用浮雕效果的方法。 这是非常困难的方法,但我相信您可以重复执行。 在我们的演示中,我们可以通过向它们添加浮雕效果来处理不同的图像,也可以将结果“导出”到图像元素(<img>)上。

Here are our demo and downloadable package:

这是我们的演示和可下载的软件包:

现场演示
打包下载

Ok, download the example files and lets start coding !

好的,下载示例文件并开始编码!

步骤1. HTML标记 (Step 1. HTML Markup)

This is markup of our demo page. Here it is:

这是我们的演示页面的标记。 这里是:

index.html (index.html)

<!DOCTYPE html>
<html lang="en" ><head><meta charset="utf-8" /><title>HTML5 Image Effects - Emboss | Script Tutorials</title><link href="css/main.css" rel="stylesheet" type="text/css" /><script src=""></script><script>google.load("jquery", "1.7.1");</script><script src="js/script.js"></script></head><body><header><h2>HTML5 Image Effects - Emboss</h2><a href="/" class="stuts">Back to original tutorial on <span>Script Tutorials</span></a></header><div id="container" class="container"><table cellspacing=0><tr><td><p>Canvas Object &lt;CANVAS&gt;</p></td><td><p>Image Object &lt;IMG&gt;</p></td></tr><tr><td><canvas id="source" width="500" height="500"></canvas><div id="next" class="button">Next image</div></td><td><img id="img" src="images/button.png" /></td></tr><tr><td><div id="emboss" class="button">Apply Emboss Effect</div></td><td><div id="toImage" class="button">To Image</div></td></tr></table></div></body>
</html>

<!DOCTYPE html>
<html lang="en" ><head><meta charset="utf-8" /><title>HTML5 Image Effects - Emboss | Script Tutorials</title><link href="css/main.css" rel="stylesheet" type="text/css" /><script src=""></script><script>google.load("jquery", "1.7.1");</script><script src="js/script.js"></script></head><body><header><h2>HTML5 Image Effects - Emboss</h2><a href="/" class="stuts">Back to original tutorial on <span>Script Tutorials</span></a></header><div id="container" class="container"><table cellspacing=0><tr><td><p>Canvas Object &lt;CANVAS&gt;</p></td><td><p>Image Object &lt;IMG&gt;</p></td></tr><tr><td><canvas id="source" width="500" height="500"></canvas><div id="next" class="button">Next image</div></td><td><img id="img" src="images/button.png" /></td></tr><tr><td><div id="emboss" class="button">Apply Emboss Effect</div></td><td><div id="toImage" class="button">To Image</div></td></tr></table></div></body>
</html>

Basically – it contain just one canvas object, one image, and three ‘buttons’ (div elements).

基本上-它仅包含一个画布对象,一个图像和三个“按钮”(div元素)。

步骤2. CSS (Step 2. CSS)

Here are our stylesheets (not so important, but anyway):

这是我们的样式表(不是很重要,但是无论如何):

css / main.css (css/main.css)

*{margin:0;padding:0;
}
body {background-image:url(../images/bg.png);color:#fff;font:14px/1.3 Arial,sans-serif;
}
header {background-color:#212121;box-shadow: 0 -1px 2px #111111;display:block;height:70px;position:relative;width:100%;z-index:100;
}
header h2{font-size:22px;font-weight:normal;left:50%;margin-left:-400px;padding:22px 0;position:absolute;width:540px;
}
header a.stuts,a.stuts:visited {border:none;text-decoration:none;color:#fcfcfc;font-size:14px;left:50%;line-height:31px;margin:23px 0 0 110px;position:absolute;top:0;
}
header .stuts span {font-size:22px;font-weight:bold;margin-left:5px;
}
.container {color: #000000;margin: 20px auto;overflow: hidden;position: relative;width: 1005px;
}
table {background-color: rgba(255, 255, 255, 0.7);
}
table td {border: 1px inset #888888;position: relative;text-align: center;
}
table td p {display: block;padding: 10px 0;
}
.button {cursor: pointer;height: 20px;padding: 15px 0;position: relative;text-align: center;width: 500px;-moz-user-select: none;-khtml-user-select: none;user-select: none;
}

*{margin:0;padding:0;
}
body {background-image:url(../images/bg.png);color:#fff;font:14px/1.3 Arial,sans-serif;
}
header {background-color:#212121;box-shadow: 0 -1px 2px #111111;display:block;height:70px;position:relative;width:100%;z-index:100;
}
header h2{font-size:22px;font-weight:normal;left:50%;margin-left:-400px;padding:22px 0;position:absolute;width:540px;
}
header a.stuts,a.stuts:visited {border:none;text-decoration:none;color:#fcfcfc;font-size:14px;left:50%;line-height:31px;margin:23px 0 0 110px;position:absolute;top:0;
}
header .stuts span {font-size:22px;font-weight:bold;margin-left:5px;
}
.container {color: #000000;margin: 20px auto;overflow: hidden;position: relative;width: 1005px;
}
table {background-color: rgba(255, 255, 255, 0.7);
}
table td {border: 1px inset #888888;position: relative;text-align: center;
}
table td p {display: block;padding: 10px 0;
}
.button {cursor: pointer;height: 20px;padding: 15px 0;position: relative;text-align: center;width: 500px;-moz-user-select: none;-khtml-user-select: none;user-select: none;
}

步骤3. JS (Step 3. JS)

Finally – our javascript code of Emboss effect:

最后-我们的Emboss效果的javascript代码:

js / script.js (js/script.js)

// variables
var canvas, ctx;
var imgObj;
// filter strength
var strength = 0.5;
// shifting matrix
var matrix = [-2, -1, 0, -1, 1, 1, 0, 1, 2];
// normalize matrix
function normalizeMatrix(m) {var j = 0;for (var i = 0; i < m.length; i++) {j += m[i];}for (var i = 0; i < m.length; i++) {m[i] /= j;}return m;
}
// convert x-y coordinates into pixel position
function convertCoordinates(x, y, w) {return x + (y * w);
}
// find a specified distance between two colours
function findColorDiff(dif, dest, src) {return dif * dest + (1 - dif) * src;
}
// transform matrix
function transformMatrix(img, pixels) {// create a second canvas and context to keep temp resultsvar canvas2 = document.createElement('canvas');var ctx2 = canvas2.getContext('2d');ctx2.width = canvas2.width = img.width;ctx2.height = canvas2.height = img.height;// draw imagectx2.drawImage(img, 0, 0, img.width , img.height);var buffImageData = ctx2.getImageData(0, 0, canvas.width, canvas.height);var data = pixels.data;var bufferedData = buffImageData.data;// normalize matrixmatrix = normalizeMatrix(matrix);var mSize = Math.sqrt(matrix.length);for (var i = 1; i < img.width - 1; i++) {for (var j = 1; j < img.height - 1; j++) {var sumR = sumG = sumB = 0;// loop through the matrixfor (var h = 0; h < mSize; h++) {for (var w = 0; w < mSize; w++) {var r = convertCoordinates(i + h - 1, j + w - 1, img.width) << 2;// RGB for current pixelvar currentPixel = {r: bufferedData[r],g: bufferedData[r + 1],b: bufferedData[r + 2]};sumR += currentPixel.r * matrix[w + h * mSize];sumG += currentPixel.g * matrix[w + h * mSize];sumB += currentPixel.b * matrix[w + h * mSize];}}var rf = convertCoordinates(i, j, img.width) << 2;data[rf] = findColorDiff(strength, sumR, data[rf]);data[rf + 1] = findColorDiff(strength, sumG, data[rf + 1]);data[rf + 2] = findColorDiff(strength, sumB, data[rf + 2]);}}return pixels;
}
// process emboss function
function processEmboss() {// clear contextctx.clearRect(0, 0, canvas.width, canvas.height);// draw imagectx.drawImage(imgObj, 0, 0, imgObj.width , imgObj.height);// get image datavar imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);// transform image dataimageData = transformMatrix(imgObj, imageData);// draw data backctx.putImageData(imageData, 0, 0);
};
$(function () {// create canvas and context objectscanvas = document.getElementById('source');ctx = canvas.getContext('2d');// load source imageimgObj = new Image();imgObj.onload = function () {// draw imagectx.drawImage(this, 0, 0, this.width, this.height, 0, 0, canvas.width, canvas.height);}imgObj.src = 'images/pic1.jpg';// different onclick handlersvar iCur = 1;$('#next').click(function () {iCur++;if (iCur > 6) iCur = 1;imgObj.src = 'images/pic' + iCur + '.jpg';});$('#emboss').click(function () {processEmboss();});$('#toImage').click(function () {$('#img').attr('src', canvas.toDataURL('image/jpeg'));});
});

// variables
var canvas, ctx;
var imgObj;
// filter strength
var strength = 0.5;
// shifting matrix
var matrix = [-2, -1, 0, -1, 1, 1, 0, 1, 2];
// normalize matrix
function normalizeMatrix(m) {var j = 0;for (var i = 0; i < m.length; i++) {j += m[i];}for (var i = 0; i < m.length; i++) {m[i] /= j;}return m;
}
// convert x-y coordinates into pixel position
function convertCoordinates(x, y, w) {return x + (y * w);
}
// find a specified distance between two colours
function findColorDiff(dif, dest, src) {return dif * dest + (1 - dif) * src;
}
// transform matrix
function transformMatrix(img, pixels) {// create a second canvas and context to keep temp resultsvar canvas2 = document.createElement('canvas');var ctx2 = canvas2.getContext('2d');ctx2.width = canvas2.width = img.width;ctx2.height = canvas2.height = img.height;// draw imagectx2.drawImage(img, 0, 0, img.width , img.height);var buffImageData = ctx2.getImageData(0, 0, canvas.width, canvas.height);var data = pixels.data;var bufferedData = buffImageData.data;// normalize matrixmatrix = normalizeMatrix(matrix);var mSize = Math.sqrt(matrix.length);for (var i = 1; i < img.width - 1; i++) {for (var j = 1; j < img.height - 1; j++) {var sumR = sumG = sumB = 0;// loop through the matrixfor (var h = 0; h < mSize; h++) {for (var w = 0; w < mSize; w++) {var r = convertCoordinates(i + h - 1, j + w - 1, img.width) << 2;// RGB for current pixelvar currentPixel = {r: bufferedData[r],g: bufferedData[r + 1],b: bufferedData[r + 2]};sumR += currentPixel.r * matrix[w + h * mSize];sumG += currentPixel.g * matrix[w + h * mSize];sumB += currentPixel.b * matrix[w + h * mSize];}}var rf = convertCoordinates(i, j, img.width) << 2;data[rf] = findColorDiff(strength, sumR, data[rf]);data[rf + 1] = findColorDiff(strength, sumG, data[rf + 1]);data[rf + 2] = findColorDiff(strength, sumB, data[rf + 2]);}}return pixels;
}
// process emboss function
function processEmboss() {// clear contextctx.clearRect(0, 0, canvas.width, canvas.height);// draw imagectx.drawImage(imgObj, 0, 0, imgObj.width , imgObj.height);// get image datavar imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);// transform image dataimageData = transformMatrix(imgObj, imageData);// draw data backctx.putImageData(imageData, 0, 0);
};
$(function () {// create canvas and context objectscanvas = document.getElementById('source');ctx = canvas.getContext('2d');// load source imageimgObj = new Image();imgObj.onload = function () {// draw imagectx.drawImage(this, 0, 0, this.width, this.height, 0, 0, canvas.width, canvas.height);}imgObj.src = 'images/pic1.jpg';// different onclick handlersvar iCur = 1;$('#next').click(function () {iCur++;if (iCur > 6) iCur = 1;imgObj.src = 'images/pic' + iCur + '.jpg';});$('#emboss').click(function () {processEmboss();});$('#toImage').click(function () {$('#img').attr('src', canvas.toDataURL('image/jpeg'));});
});

This effect is required some pretty difficult matrix transformations, so, you can try to understand it, or use it as is. Of course, our script will pass through all pixels of original image, and after – will apply some transformation.

需要一些非常困难的矩阵转换才能达到这种效果,因此,您可以尝试理解它,也可以照原样使用它。 当然,我们的脚本将遍历原始图像的所有像素,然后–将进行一些转换。

现场演示
打包下载

结论 (Conclusion)

I hope that our demo looks fine. Today we have added new interesting effect to our html5 application – Emboss. I will be glad to see your thanks and comments. Good luck!

我希望我们的演示看起来不错。 今天,我们在html5应用程序中添加了新的有趣效果– Emboss。 看到您的感谢和评论,我将非常高兴。 祝好运!

翻译自: /

图像处理 浮雕原理

更多推荐

图像处理 浮雕原理

本文发布于:2024-03-08 10:47:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720655.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浮雕   图像处理   原理

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!