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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql截取字符串去重,mysql 截取字符串 去重 拼接

    mysql截取字符串去重,mysql 截取字符串 去重 拼接1:字符串截取LEFT(guid_,LENGTH(guid_)-5)//1001-1002-1003截取为1001-10022:判断是否存在某字符串中IN(‘1001′,’1002′,’1003’)//whereidin(xxxx)可以用查询的某个字段直接whereidin(selectidfromxxxx)3:根据某个字段去重复在查询结果中加入COUNT(DIS…

    2022年6月10日
    184
  • python 截取图片的某个区域_python读取文件夹下所有文件

    python 截取图片的某个区域_python读取文件夹下所有文件使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用。下面使用两种方法进行处理:convert函数fromPILimportImageimportnumpyasnpimportmatplotlib.pyplotaspltdefImageToMatrix(filename):im=Image.open(filename)…

    2025年10月27日
    2
  • DNS递归和迭代过程详解

    DNS递归和迭代过程详解目录DNS原理解析DNS进化史DNS结构DNS查询流程DNS服务搭建DNS相关软件的安装服务器搭建规划手把手教你搭建基本DNS服务器搭建主DNS服务器搭建从DNS服务器参考文献DNS原理解析DNS进化史etc/hosts–&gt;NIS–&gt;DNS起初域名和ip地址之间的解析都是完全存放在一个名为hosts的文件当中…

    2022年6月6日
    50
  • 一个低级的ORA-01017错误

    一个低级的ORA-01017错误事件缘由:使用sys账户创建了一个数据清理的存储过程,再创建一个Oraclejob定时运行这个存储过程,用于做表数据的清理。第二天看表数据未删除,说明job执行有错,打算使用sys账号登录查看job运行情况,反复输入sys账户信息,总提示ORA-01017,1.尝试改sys用户密码,重试报错依旧。2.使用sys登录GC,报错相同。使用普通用户登录正常。3.数据库服务器上使用sq

    2022年6月1日
    33
  • 固态硬盘不能恢复吗_固态硬盘资料能恢复吗

    固态硬盘不能恢复吗_固态硬盘资料能恢复吗固态硬盘(SSD)凭借超高速的读写速度在高端玩家中颇受欢迎,但是SSD硬盘也暴露出一些不成熟的表现,之前已有过固件门、性能下降等例子。Techgage网站最新的测试显示SSD硬盘在数据恢复方面遇到了新的挑战,这一问题在支持TRIM指令的固态硬盘上尤为严重。有鉴于此,编辑将这篇文章编译过来希望能引起玩家的重视。目前这一问题还没有别的评测加以佐证,笔者手头也没有固态硬盘可重复验证,希望正在使用固态硬盘

    2022年9月19日
    2
  • pythoncharm注释快捷键_JAVA注释快捷键

    pythoncharm注释快捷键_JAVA注释快捷键Pycharm中常用快捷键使用及注释方式1.快捷键设置(Ctrl+Alt+s)或File—>Settings—>Keymap—>搜索栏搜索’format’—>Code快速创建文件(Alt+Insert)快速注释代码(Ctrl+/)快速取消注释代码(Ctrl+/)复制一行代码(Ctrl+D)撤销对代码的修改(Ctrl+…

    2022年8月27日
    4

发表回复

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

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