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


相关推荐

  • Windows小知识—恶意软件删除工具(mrt)

    Windows小知识—恶意软件删除工具(mrt)使用方法:打开运行窗口:win+r; 输入”mrt”,回车;3、在弹框之后一直下一步或者自定义都行;

    2022年6月24日
  • camera接口—MIPI CSI-2接口、DVP接口和FPD-Link III LVDS、GMSL等接口对比

    camera接口—MIPI CSI-2接口、DVP接口和FPD-Link III LVDS、GMSL等接口对比 接口类型 信号线 极限速率 最大速率 抗干扰能力 适用摄像头像素   PCBlaypuit MIPICSI-2 串口 CLKP/N、DATAP/N 最大支持4-lane 一般2-lane可以搞定   Gbps 低压差分信号,产生的干扰小,抗干扰能力也强 支持800W以上 …

    2022年4月29日
  • 酒店管理系统程序设计[通俗易懂]

    酒店管理系统程序设计[通俗易懂]酒店管理系统程序设计随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。市场经济的发展,消费者消费意识的提高,酒店行业的竞争越来越激烈。为了提高办事效率,增加、保证酒店的销售额,树立酒店的良好形象,运用科学的管理方法非常必要。客房管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。无疑,使用网络信息化管理使客房管理更先进、更高效、更科学,信息交流更迅速。我力求开发一个界面友好,功能强大,使

    2022年9月2日
  • Win10安装wget_linux wget安装

    Win10安装wget_linux wget安装安装下载点击下载依次如下:1.2、将下载好的wget.exe放到C:/windows/system32文件夹下3.3、在cmd中输入wget–version如下则成功:测试下载图片wgethttp://q1.xiongmaoya.com/2021/08/09/26045/1.jpg

    2022年10月17日
  • 把旧光驱改CD播放机的方法

    把旧光驱改CD播放机的方法  随着我们自己PC机各项配件的不断升级,或多或少都会淘汰下来一些旧配件。它们是否真的就只能躺在角落里睡大觉呢?能够最大限度利用上这些曾经为我们驰骋沙场,立下赫赫战功的战将吗?那么就要看我们自己是否足够勤劳了。下面我们就以PC机中比较容易更新换代的光驱为例,来看看怎么让它恢复第二春吧。  先天条件  通常来说,光驱“惨遭”淘汰的时候读盘能力已经很弱了,但机械上一般都没有损坏,特别是CD是完…

    2022年4月29日
  • java 线程interupt stop(dep)[通俗易懂]

    java 线程interupt stop(dep)[通俗易懂] java线程interuptstop(dep) https://blog.csdn.net/zbw18297786698/article/details/53432879/1、Java中API自带的stop()方法,来终止线程       查阅JDK,不难发现Thread提供了一个stop()方法,但是stop()方法是一个被废弃的方法。为什么sto…

    2022年10月24日

发表回复

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

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