html弄出油画效果,使用HTML5 Canvas实现仿PS图像油画滤镜特效
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图像油画滤镜特效相关推荐
- html5 云朵飘动效果,使用HTML5/Canvas制作云朵(烟雾)动画特效
JavaScript 语言: JaveScriptBabelCoffeeScript 确定 (function(main) { main(this, document, jQuery, undefin ...
- HTML5 Canvas 高仿逼真 3D 布料图案效果
HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.下面给大家分享一个 HTML5 C ...
- html 星空效果,html5 canvas炫酷旋转银河系星空背景特效
这是一款html5 canvas炫酷旋转银河系星空背景特效.该特效通过canvas来绘制银河系星盘,并制作星系旋转的效果,非常炫酷. 使用方法 HTML结构 该旋转银河系星空背景特效的HTML结果只需 ...
- html5 canvas+js实现ps钢笔抠图(速抠图 www.sukoutu.com)
html5 canvas+js实现ps钢笔抠图(速抠图 www.sukoutu.com) 根据html5 canvas+js实现ps钢笔抠图的实现,aiaito 开发者开发了一套在线抠图工具,速抠 ...
- html5.js百度网盘,HTML5 Canvas+js仿百度网盘扫描文件过程加载动画
HTML5 Canvas+js仿百度网盘扫描文件过程加载动画 这是一款简单的HTML5 Canvas+js仿百度网盘扫描文件过程加载动画效果,网盘文件扫描百分比加载动画特效. var w=docume ...
- html5 canvas+js实现ps钢笔抠图
html5 canvas+js实现ps钢笔抠图 原文:https://www.cnblogs.com/guozefeng/p/3719915.html 1. 项目要求需要用js实现photoshop中 ...
- HTML5+Canvas漂亮的3D烟花动画生日特效,节日特效,烟花
fireworks HTML5+Canvas漂亮的3D烟花动画生日特效,节日特效,烟花 https://github.com/louislivi/fireworks
- html5 canvas酷炫3D背景打开动画特效
html5 canvas酷炫3D背景打开动画特效 点击跳转到演示地址 点击进入资源下载地址
- HTML粒子碰撞烟花,html5 canvas漂亮的粒子烟花背景动画特效
特效描述:html5 canvas 漂亮的粒子烟花 背景动画特效.html5 canvas漂亮的粒子烟花背景动画特效 代码结构 1. HTML代码 class Vector2 { constructo ...
最新文章
- keyshot怎么批量渲染_提高Keyshot逼真渲染的小技巧
- 在 StringGrid 上画线时, 使用 GDI+ 以消除锯齿 - 回复 gsjn_8888_6666 的问题
- 深入Lock锁底层原理实现,手写一个可重入锁
- [CF587F]Duff is Mad[AC自动机+根号分治+分块]
- hdu2089 不要62 数位dp
- python 面向对象之:反射,双下方法
- Linux-sudo详解
- .net的轻量级ORM -- PetaPoco/NPOCO框架使用说明
- 210板wince键盘驱动分析和移植
- js 计时器无法清除是为什么
- [eclipse]Syntax error on token ;,{ expected after this token
- 电商商城小程序项目完整源码(微信小程序)
- web前端大作业:游戏动漫网页设计(HTML+CSS+JavaScript)
- 腾讯首款区块链AR游戏上线《一起来捉妖》,风物志里的奇珍异兽
- 关于PBOC3.0发卡行认证的问题
- 技能get:找到连接WIFI设备的IP地址
- 站长VS微商 你选择哪个?
- ubuntu16.04(虚拟机) 上MPD(Music Player Daemon)+MPC运行环境搭建
- mfc函数---CFileDialog的用法
- 51 币圈里外的强者愈强----超级君扯淡录【2020-07-13 2100】
热门文章
- 黑白和彩色CCD摄像机成像原理简介
- VG验证码识别框架2.2 免费识别验证码
- 【渝粤题库】陕西师范大学200111中学语文教学法 作业(专升本)
- mysql lsl_GitHub - LSL-Git/MyBatis_Dynamic_SQL: mybatis 动态SQL使用
- 视频点播开发者实战:视频水印时间线,防模糊处理
- pythonstdin_Python读取stdin方法实例
- 验证手机号邮箱,多个以英文逗号分隔
- 为什么说信息是负熵?
- 浏览器控制台操作——随身笔记
- php怎么使用sendcloud,PHP开发之SendCloud发送邮件知几何