



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基本图像效果修改像素的颜色值并不意味着必须从零开始创建整个图像,已经存在的图像也是可以修改的。有一个例子就是基本照片处理通过修改图像中的像素来修改它的显示效果。这种效果在画布中实现是很简单的,特别是现在你已经掌握了像素的操作方法。反转颜色这个效果将反转图像的颜色值,这会使它看起来有些奇怪(找不到更适合的词来形容)。基本方法就是用255减去像素现在的颜色值(150),所得的就是反转后的颜色(255-150=105)。让我们尝试一些不同的操作,然后看看最后的代码,这里并没有新知识。var image = new Image(); image.src = "example.jpg"
2、; $(image).load(function() context.drawImage(image, 0, 0, 1024, 683, 0, 0, 500, 500); var imageData = context.getImageData(0, 0, canvas.width(), canvas.height(); var pixels = imageData.data; var numPixels = pixels.length; context.clearRect(0, 0, canvas.width(), canvas.height(); for (var i = 0; i <
3、; numPixels; i+) pixelsi*4 = 255-pixelsi*4; / Red pixelsi*4+1 = 255-pixelsi*4+1; / Green pixelsi*4+2 = 255-pixelsi*4+2; / Blue ; context.putImageData(imageData, 0, 0); );前面几行代码创建了一个新的Image对象,然后加载上一节使用的示例图像。等到图像加载完成之后,将图像绘制到画布上,并将包含所有像素的ImageData对象保存到一个变量中。在保存了像素之后,清除画布,开始循环处理原始图像中所有的像素。在循环中,我们使用与上一节
4、中第一个例子(红色正方形)相同的方法来防问像素,并用255减去当前值。不需要对阿尔法值进行任何处理,因为我们要保留原始图像中的这个值。最后是将像素绘制回画布,这样就得到一个反转颜色的图像(参见图1)。图1 反转图像的颜色灰度另一个有趣的效果是灰度,这也许是更有用的一种效果。将彩色图像变为灰色(有时候也称为黑白色,但是这种说法并不准确),除了访问和修改颜色值,实现代码与反转颜色例子中的代码完全相同。for (var i = 0; i < numPixels; i+) var average = (pixelsi*4+pixelsi*4+1+pixelsi*4+2)/3; pixelsi*4
5、 = average; / Red pixelsi*4+1 = average; / Green pixelsi*4+2 = average; / Blue ; 将彩色转换为灰度要求计算出现有颜色值的平均值,即将它们加在一起然后除以颜色个数。这个平均颜色将作为三种颜色(红、绿和蓝)的值。其结果是将每一种颇色转换为灰度(参见图2)。图2 将图像转换为灰度像素化你是否曾经看到过新闻或文件中人物脸孔被像素化的情况?这是一种强大的特效,它可以将图像变得不可识别,但并不真正删除整个部分。实际上重新在画布上创建会相对简单一些,只需要将图像按栅格分割,或者对每个片段的颜色取平均值,或者选取每个片段的颜色。我
6、们将使用的代码与上一节马赛克的例子很相似。var image = new Image(); image.src = "example.jpg" $(image).load(function() context.drawImage(image, 0, 0, 1024, 683, 0, 0, 500, 500); var imageData = context.getImageData(0, 0, canvas.width(), canvas.height(); var pixels = imageData.data; context.clearRect(0, 0, canva
7、s.width(), canvas.height(); var numTileRows = 20; var numTileCols = 20; var tileWidth = imageData.width/numTileCols; var tileHeight = imageData.height/numTileRows; for (var r = 0; r < numTileRows; r+) for (var c = 0; c < numTileCols; c+) ; ; );循环之前的代码都是一样的。访问图像,等待图像加载,将它绘制到画布中,保存ImageData对象,从画
8、布清除该图像,然后给分割的图像赋值确定块(片段)的数量和尺寸。这两个循环的工作方式与马赛克的例子是一样的:第一个循环处理每一行块,第二个循环则处理当前行中的每一个块。而新的代码位于循环中,访问颜色值和创建像素化效果。这里将使用第二种方法来获取像素化效果的颜色值,为每一个块选择一种颜色。最简单的方法是使用块的中心位置像素,将以下代码添加到第二个循环中,就可以得到这个信息:var x = (c*tileWidth)+(tileWidth/2); var y = (r*tileHeight)+(tileHeight/2); var pos = (Math.floor(y)*(imageData.wi
9、dth*4)+(Math.floor(x)*4); 前两行将得到当前块中心像素从0开始表示的(x,y)坐标。这个计算方法与马赛克例子非常相似,先找到块边缘的(x,y)坐标位置,然后加上一半宽度或高度,从而确定中心。然后将(x,y)坐标传入标准公式,这样就得到CanvasPixelArray中该像素的索引值但你可能注意到了,(x,y)坐标值在Math对象的floor方法中进行了取整处理。其原因是,除(x,y)是整数,否则这个返回的索引将是错误的,所以我们使用floor方法将值取整为下一个最小整数(侧如,3.567取整后变成3)。最后,我们得到了访问颜色值和绘制像素化效果所需要的全部信息。将下面的
10、代码插入到变量pos的声明语句之后。var red = pixelspos; var green = pixelspos+1; var blue = pixelspos+2; context.fillStyle = "rgb("+red+", "+green+", "+blue+")" context.fillRect(x-(tileWidth/2), y-(tileHeight/2), tileWidth, tileHeight); 这里没有新代码,它只是访问红色、绿色和蓝色值,然后使用这些值来设置fillStyle。最后一步是在块的位置上绘制一个正方形,它是使用所访问的颜色填充的。结果是将示例图像变成一个独特的像素化效果(参见图3)。图3 使用画布实现图像像素化我们可以进一步将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江药科职业大学《中医药学概论(1)》2023-2024学年第一学期期末试卷
- 辽宁省阜新市二中2024-2025学年高三教学情况调研(一)化学试题含解析
- 湖南省师大附中2025年高三下学期三校五测历史试题试卷含解析
- 四川省遂宁市蓬溪县重点中学2024-2025学年第二学期统一检测试题题初三化学试题试卷含解析
- 浙江理工大学科技与艺术学院《发酵工程及实验》2023-2024学年第二学期期末试卷
- 山西管理职业学院《历史学课程与教学论》2023-2024学年第二学期期末试卷
- 江西省抚州市临川达标名校2025届初三下学期期末调研测试生物试题文试卷含解析
- 湖南石油化工职业技术学院《高级英语写作》2023-2024学年第二学期期末试卷
- 浙江省温州市育才高中市级名校2025年初三年级第三次月考英语试题含答案
- 神木职业技术学院《网络商务策划与创新实践》2023-2024学年第二学期期末试卷
- 行政事业单位财务知识培训
- 眼科中医诊疗方案圆翳内障
- 路基路面压实度评定自动计算表-标准-
- 信息技术(基础模块)课件 模块三 电子表格处理
- 《实施方法论》课件
- 流行性感冒诊疗方案(2025版)解读课件
- 教科版六年级科学下册全册教学设计教案
- 2025年度打印机销售与升级改造合同模板4篇
- 医学会议准备流程
- 临床生化检验项目及意义
- 药剂学练习试卷24(题后含答案及解析)
评论
0/150
提交评论