JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var canvas = document.getElementById("canvas"),

ctx = canvas.getContext("2d"),

img = new Image(),

effectEl = document.getElementById("effect"),

settings = {

radius: 4,

intensity: 25,

ApplyFilter: function() {

doOilPaintEffect();

}

}

img.addEventListener('load', function() {

// reduced the size by half for pen and performance.

canvas.width = (this.width / 2);

canvas.height = (this.height / 2);

ctx.drawImage(this, 0, 0, canvas.width, canvas.height);

doOilPaintEffect();

});

img.crossOrigin = "Anonymous";

img.src = "/uploads/161001/normal2.jpg";

var gui = new dat.GUI();

gui.add(settings, 'intensity');

gui.add(settings, 'radius');

gui.add(settings, 'ApplyFilter');

function doOilPaintEffect() {

oilPaintEffect(canvas, settings.radius, settings.intensity);

}

function oilPaintEffect(canvas, radius, intensity) {

var width = canvas.width,

height = canvas.height,

imgData = ctx.getImageData(0, 0, width, height),

pixData = imgData.data,

// change to createElement getting added element just for the demo

destCanvas = document.getElementById("dest-canvas"),

dCtx = destCanvas.getContext("2d"),

pixelIntensityCount = [];

destCanvas.width = width;

destCanvas.height = height;

var destImageData = dCtx.createImageData(width, height),

destPixData = destImageData.data,

intensityLUT = [],

rgbLUT = [];

for (var y = 0; y < height; y++) {

intensityLUT[y] = [];

rgbLUT[y] = [];

for (var x = 0; x < width; x++) {

var idx = (y * width + x) * 4,

r = pixData[idx],

g = pixData[idx + 1],

b = pixData[idx + 2],

avg = (r + g + b) / 3;

intensityLUT[y][x] = Math.round((avg * intensity) / 255);

rgbLUT[y][x] = {

r: r,

g: g,

b: b

};

}

}

for (y = 0; y < height; y++) {

for (x = 0; x < width; x++) {

pixelIntensityCount = [];

// Find intensities of nearest pixels within radius.

for (var yy = -radius; yy <= radius; yy++) {

for (var xx = -radius; xx <= radius; xx++) {

if (y + yy > 0 && y + yy < height && x + xx > 0 && x + xx < width) {

var intensityVal = intensityLUT[y + yy][x + xx];

if (!pixelIntensityCount[intensityVal]) {

pixelIntensityCount[intensityVal] = {

val: 1,

r: rgbLUT[y + yy][x + xx].r,

g: rgbLUT[y + yy][x + xx].g,

b: rgbLUT[y + yy][x + xx].b

}

} else {

pixelIntensityCount[intensityVal].val++;

pixelIntensityCount[intensityVal].r += rgbLUT[y + yy][x + xx].r;

pixelIntensityCount[intensityVal].g += rgbLUT[y + yy][x + xx].g;

pixelIntensityCount[intensityVal].b += rgbLUT[y + yy][x + xx].b;

}

}

}

}

pixelIntensityCount.sort(function(a, b) {

return b.val - a.val;

});

var curMax = pixelIntensityCount[0].val,

dIdx = (y * width + x) * 4;

destPixData[dIdx] = ~~(pixelIntensityCount[0].r / curMax);

destPixData[dIdx + 1] = ~~(pixelIntensityCount[0].g / curMax);

destPixData[dIdx + 2] = ~~(pixelIntensityCount[0].b / curMax);

destPixData[dIdx + 3] = 255;

}

}

// change this to ctx to instead put the data on the original canvas

dCtx.putImageData(destImageData, 0, 0);

}

html弄出油画效果,使用HTML5 Canvas实现仿PS图像油画滤镜特效相关推荐

  1. html5 云朵飘动效果,使用HTML5/Canvas制作云朵(烟雾)动画特效

    JavaScript 语言: JaveScriptBabelCoffeeScript 确定 (function(main) { main(this, document, jQuery, undefin ...

  2. HTML5 Canvas 高仿逼真 3D 布料图案效果

    HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.下面给大家分享一个 HTML5 C ...

  3. html 星空效果,html5 canvas炫酷旋转银河系星空背景特效

    这是一款html5 canvas炫酷旋转银河系星空背景特效.该特效通过canvas来绘制银河系星盘,并制作星系旋转的效果,非常炫酷. 使用方法 HTML结构 该旋转银河系星空背景特效的HTML结果只需 ...

  4. html5 canvas+js实现ps钢笔抠图(速抠图 www.sukoutu.com)

    html5 canvas+js实现ps钢笔抠图(速抠图 www.sukoutu.com)   根据html5 canvas+js实现ps钢笔抠图的实现,aiaito 开发者开发了一套在线抠图工具,速抠 ...

  5. html5.js百度网盘,HTML5 Canvas+js仿百度网盘扫描文件过程加载动画

    HTML5 Canvas+js仿百度网盘扫描文件过程加载动画 这是一款简单的HTML5 Canvas+js仿百度网盘扫描文件过程加载动画效果,网盘文件扫描百分比加载动画特效. var w=docume ...

  6. html5 canvas+js实现ps钢笔抠图

    html5 canvas+js实现ps钢笔抠图 原文:https://www.cnblogs.com/guozefeng/p/3719915.html 1. 项目要求需要用js实现photoshop中 ...

  7. HTML5+Canvas漂亮的3D烟花动画生日特效,节日特效,烟花

    fireworks HTML5+Canvas漂亮的3D烟花动画生日特效,节日特效,烟花 https://github.com/louislivi/fireworks

  8. html5 canvas酷炫3D背景打开动画特效

    html5 canvas酷炫3D背景打开动画特效 点击跳转到演示地址 点击进入资源下载地址

  9. HTML粒子碰撞烟花,html5 canvas漂亮的粒子烟花背景动画特效

    特效描述:html5 canvas 漂亮的粒子烟花 背景动画特效.html5 canvas漂亮的粒子烟花背景动画特效 代码结构 1. HTML代码 class Vector2 { constructo ...

最新文章

  1. keyshot怎么批量渲染_提高Keyshot逼真渲染的小技巧
  2. 在 StringGrid 上画线时, 使用 GDI+ 以消除锯齿 - 回复 gsjn_8888_6666 的问题
  3. 深入Lock锁底层原理实现,手写一个可重入锁
  4. [CF587F]Duff is Mad[AC自动机+根号分治+分块]
  5. hdu2089 不要62 数位dp
  6. python 面向对象之:反射,双下方法
  7. Linux-sudo详解
  8. .net的轻量级ORM -- PetaPoco/NPOCO框架使用说明
  9. 210板wince键盘驱动分析和移植
  10. js 计时器无法清除是为什么
  11. [eclipse]Syntax error on token ;,{ expected after this token
  12. 电商商城小程序项目完整源码(微信小程序)
  13. web前端大作业:游戏动漫网页设计(HTML+CSS+JavaScript)
  14. 腾讯首款区块链AR游戏上线《一起来捉妖》,风物志里的奇珍异兽
  15. 关于PBOC3.0发卡行认证的问题
  16. 技能get:找到连接WIFI设备的IP地址
  17. 站长VS微商 你选择哪个?
  18. ubuntu16.04(虚拟机) 上MPD(Music Player Daemon)+MPC运行环境搭建
  19. mfc函数---CFileDialog的用法
  20. 51 币圈里外的强者愈强----超级君扯淡录【2020-07-13 2100】

热门文章

  1. 黑白和彩色CCD摄像机成像原理简介
  2. VG验证码识别框架2.2 免费识别验证码
  3. 【渝粤题库】陕西师范大学200111中学语文教学法 作业(专升本)
  4. mysql lsl_GitHub - LSL-Git/MyBatis_Dynamic_SQL: mybatis 动态SQL使用
  5. 视频点播开发者实战:视频水印时间线,防模糊处理
  6. pythonstdin_Python读取stdin方法实例
  7. 验证手机号邮箱,多个以英文逗号分隔
  8. 为什么说信息是负熵?
  9. 浏览器控制台操作——随身笔记
  10. php怎么使用sendcloud,PHP开发之SendCloud发送邮件知几何