html 图像处理 灰度图和浮雕图类PS

html 图像处理 灰度图和浮雕图类PS浮雕图,灰度图,用html5canvas处理,类PS风格

大家好,又见面了,我是你们的朋友全栈君。

    html5 的canvas还有一些很酷炫的效果,接下来讲的是canvas对像素的处理,虽然略有些复杂,但实现出的效果,还是很赞的~~。

   为了不让大家失望,先强调一句:下列效果需调用getImageData(),而这个方法会被某些浏览器阻止,如chrome。原因是:

   受js同源策略影响,js跨域限制是不能获取非同一域名下的数据的,以下代码是在本地上测试的, 而本地的位置是没有域名的,所以浏览器都认为你是跨域,导致报错。

解决方法:可以用其他的浏览器。或者可以将图片写入PHP,具体可参照 解决getImageData跨域

    第一个效果:灰度图

    插入html如下:

 <img id=”img1″ src=”baijuyi.jpg”  />
 <input id=”btnGO” type=”button” value=”转成灰度图”/><br />
 <canvas id=”c1″ height=”200″ width=”320″></canvas><br />

<script>
 function $(id)
{

return document.getElementById(id);
}
function init()
{

$(“btnGO”).οnclick=function()
{

c1.width=img1.width;
c1.height=img1.height;
var ctx=c1.getContext(“2d”);
ctx.drawImage(img1,0,0,c1.width,c1.height);//将image绘制到canvas上
var imgData=ctx.getImageData(0,0,c1.width,c1.height);//获取image的所有像素点存储在imgData数组里,每四个为一个像素的rgba值;从上到下,从左到右。
//比如imgData.data[0]~imgData.data[3]表示第一个像素点。

for(var i=0;i<imgData.data.length;i+=4)
{

var r=imgData.data[i],
   g=imgData.data[i+1],
b=imgData.data[i+2];
var gray =(r*30+g*59+b*11+50)*0.01;//灰度值公式
imgData.data[i]=gray;
imgData.data[i+1]=gray;
imgData.data[i+2]=gray;
}
ctx.putImageData(imgData,0,0);//将image重绘到canvas中
}
}

</script>

第二种效果:浮雕图效果

<h2>像素操作</h2>
<img id=”img1″ src=”baijuyi.jpg”  />
<input id=”btnGO” type=”button” value=”转成浮雕图”/><br />
<canvas id=”c1″ height=”200″ width=”320″></canvas><br />

<script>

function $(id)
{

return document.getElementById(id);
}
function init()
{

$(“btnGO”).οnclick=function()
         {

c1.width=img1.width;
        c1.height=img1.height;
var ctx=c1.getContext(“2d”);
ctx.drawImage(img1,0,0,c1.width,c1.height);
var imgData=ctx.getImageData(0,0,c1.width,c1.height);
console.log(imgData);
var iData=imgData.data;

               //浮雕效果的实现可以有多种方式,这里介绍较简单的。新的像素色彩值是和右边像素的色彩值相减,然后再加128
for(var i=0;i<img1.height-1;i++)
{

   for(var j=0;j<img1.width;j++)
{

var start=(i*img1.width+j)<<2;
var r=iData[start]-iData[start+4]+128,
   g=iData[start+1]-iData[start+5]+128,
   b=iData[start+2]-iData[start+6]+128;
   //越界处理
   r=(r<0)?0:(r>255)?255:r;
   g=(g<0)?0:(g>255)?255:g;
   b=(b<0)?0:(b>255)?255:b;
   //再转灰度图
   var g=(r*30+g*59+b*11+50)*0.01;
   iData[start]=g;
   iData[start+1]=g;
   iData[start+2]=g;
   }

  }
  ctx.putImageData(imgData,0,0);//将新数据绘入canvas中
}
}
init();//调用函数
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151352.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • atitit.404错误调查过程汇总

    atitit.404错误调查过程汇总

    2022年1月13日
    40
  • RSA加密算法(C语言实现)

    RSA加密算法(C语言实现)RSA算法流程说明—-适合密码学初学者看

    2022年6月10日
    96
  • MySQL窗口函数简介「建议收藏」

    MySQL窗口函数简介「建议收藏」原文地址:https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_last-value译文:12.21.1WindowFunctionDescriptions本节描述非聚合窗口函数,对于查询中的每一行,这些函数使用与该行相关的行执行计算。大多数聚合函数也可以用作窗口函数,…

    2022年10月5日
    0
  • Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式

    Java实现国密算法SM2,SM3,SM4,并且实现ECB和CBC模式代码中实现了电码本ECB模式和密文分组连接CBC模式,SM3.java和SM4.java为算法实现类,utils的都是根据实现类写的工具,可以根据需要调用杂凑算法SM3的杂凑功能获得杂凑值。SM4.java中sm4_crypt_ecb(SM4_Contextctx,byte[]input)ECB模式加解密方法,根据密钥判断加解密功能sm4_crypt_cbc(…

    2022年9月23日
    0
  • c++ string类头文件_printf用什么头文件

    c++ string类头文件_printf用什么头文件1.string与cstring有什么区别是C++标准库头文件,包含了拟容器classstd::string的声明(不过classstring事实上只是basic_string的typedef),用于字符串操作。是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即’\0’结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后

    2022年9月12日
    0
  • 实例讨论数据可视化的配色思路怎么写_配色分析案例

    实例讨论数据可视化的配色思路怎么写_配色分析案例引子有一数据集如下:数据解读:研究对象的目标层A分为B1,B2,B3三个准则层;B1层下有C1,C2,C3,C44个指标;B2层下只有C5一个指标;B3层有C6,C7,C83个指标。指标权重是该指标在所属准则层的权重;组合权重是该指标在目标层的权重。现在,要绘制上述数据的“组合权重”的饼图。如何给这个饼图配色呢?数据可视化配色的误区下图是群友绘制的图:他自己对结果不满意,他认为是颜色搭配太丑。我们来看看,他的配色问题出在哪:颜色太

    2022年10月2日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号