文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Canvas图像识取技术以及智能化设计的思考

2024-12-03 04:04

关注

笔者最近一直在研究 前端可视化 和 搭建化 的技术, 最近也遇到一个非常有意思的课题, 就是基于设计稿自动提取图片信息, 来智能化出码. 当然本文并不会介绍很多晦涩难懂的技术概念, 我会从几个实际应用场景出发, 介绍如何通过canvas图像识取技术来实现一些有意思的功能. 最后会总结一些对智能化的思考以及对低代码方向的规划, 希望能对各位有所启发.

canvas图像识取技术

熟悉前端的朋友们也许对canvas并不陌生, 接下来我会带大家去实现如下几个应用场景, 来深入理解canvas图像识取技术.

基于图片动态生成网站主色和渐变色

也许有朋友会问, 基于图片动态生成网站主色和渐变色, 它能解决什么问题呢? 又有怎样的应用场景呢? 这里笔者举几个实际应用的例子.

网易云音乐大家也许不陌生, 细心的朋友也许可以观察到, 网站banner部分的背景, 是不是很好的和banner形成很好的统一?

我们会发现, 每个轮播图的背景都基于当前图片颜色进行的渐变或模糊, 来实现和轮播图实现完美的统一. 目还有还很多类似的例子, 比如图片网站的背景, 图片卡片的背景, 都应用了类似的技术.

实现原理

我们知道canvas对象有3个方法:

为了分析图片数据, 我们需要用到上述的第二个方法getImageData. ImageData 对象不是图像,它规定了画布上一个部分(矩形),并保存了该矩形内每个像素的信息。对于 ImageData 对象中的每个像素,都存在着四元信息,即 RGBA 值:

color/alpha 信息以数组形式存在,并存储于 ImageData 对象的 data 属性中。

有了以上的技术基础, 我们就完全有可能提取到图片的颜色信息, 并分析出图片的主色了. 所以我们的实现流程如下:

实现的参考代码如下:

  1. img.onload = function () { 
  2.     ctx.drawImage(img, 0, 0) 
  3.     img.style.display = 'none' 
  4.     // 获取像素数据 
  5.     let data = context.getImageData(0, 0, img.width, img.height).data 
  6.     // ImageData.data 类型为Uint8ClampedArray的一维数组,每四个数组元素代表了一个像素点的RGBA信息,每个元素数值介于0~255 
  7.     let r = 0, 
  8.         g = 0, 
  9.         b = 0 
  10.          
  11.     // 取所有像素平均值 
  12.     for (let row = 0; row < img.height; row++) { 
  13.         for (let col = 0; col < img.width; col++) { 
  14.             r += data[(img.width * row + col) * 4] 
  15.             g += data[(img.width * row + col) * 4 + 1] 
  16.             b += data[(img.width * row + col) * 4 + 2] 
  17.         } 
  18.     } 
  19.      
  20.     // 计算平均值 
  21.     r /= img.width * img.height 
  22.     g /= img.width * img.height 
  23.     b /= img.width * img.height 
  24.  
  25.     // 将结果取整 
  26.     r = Math.round(r) 
  27.     g = Math.round(g) 
  28.     b = Math.round(b) 
  29.      
  30.     // 给背景设置渐变 
  31.     bgBox.style.backgroundImage = `linear-gradient(rgb(${r}), rgb(${g}), rgb(${b})`; 
  32.   } 

值得说明的是, 根据不同的区值场景, 我们还可以用到其他算法诸如:

基于图片/设计稿一键生成网站配色方案

以上介绍了使用canvas的取色方案, 接下来我们更进一步, 来探索一下如何基于图片/设计稿一键生成网站配色方案.

其实基于以上的例子我们完全可以自己实现一套网站配色生成工具, 这里为了节约时间, 笔者推荐一款比较强大的插件, 来帮我们实现类似的功能.

没错, 就是colorthief, 它支持浏览器和node环境, 所以作为前端, 我们可以很轻松的使用它并获取图像/设计稿的配色方案.

github传送门: 在线生成图片色系方案库

简单的使用例子如下:

  1. import ColorThief from './node_modules/colorthief/dist/color-thief.mjs' 
  2.  
  3. const colorThief = new ColorThief(); 
  4. const img = document.querySelector('img'); 
  5.  
  6. if (img.complete) { 
  7.   colorThief.getColor(img); 
  8. else { 
  9.   image.addEventListener('load'function() { 
  10.     colorThief.getColor(img); 
  11.   }); 

该库还有很多细化的api,比如控制生成质量, 粒度等, 我们可以以用它做一些更加智能的工具.

图像识别技术方案

图像识别技术可以帮助技术人员利用计算机对图像进行处理和分析,更好地识别各种不同模式的目标。图像识别的过程和内容是比较多的,主要包括图像预处理和图像分割等内容,它在图像处理中的有效应用,还能够根据图像的特点对其进行判断匹配,让用户能够更加快速的地在图片中搜索自己想要获取的信息。

了解神经网络的朋友可能知道, 图像识别技术真正的解决方案是 卷积神经网络(CNNs或ConvNets).

从图像识别技术的术语来说就是,卷积神经网络按照关联程度筛选不必要的连接,进而使图像识别过程在计算上更具有可操作性。卷积神经网络有意地限制了图像识别时候的连接,让一个神经元只接受来自之前图层的小分段的输入(假设是3×3或5×5像素),避免了过重的计算负担。因此,每一个神经元只需要负责处理图像的一小部分。

当然作为前端工程师, 我们可能还涉及不到这么深的内容, 不过也不用担心, 目前已有很多工具帮我们解决了底层的分析难题. 比如国内比较有名的imgcook, 通过识别技术来生成可被浏览器消费的html代码.

其工作机制如下:

其底层识别技术也是基于对图片信息元的分析, 提取和转化, 来实现智能化编排的目的. 当然也有一些开源的库可以帮我们做到一定程度的识别能力. 我们可以基于这些方案, 制作一些对开发更智能化的工具.

这里笔者提一个图片识别的库GOCR.js, 供大家参考学习.

GOCR.js 是 GOCR(开源的 OCR 光学识别程序)项目的纯 JavaScript 版本,使用 Emscripten 进行自动转换。这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本。

该库的使用也非常简单, 我们只需要引入该库, 输入如下代码即可:

  1. var string = GOCR(image); 
  2. alert(string); 

演示如下:

最近H5-Dooring可视化编辑器也在持续推迭代, 数据源已基本搭建完成, 后续还会按照更智能化的方向, 可视化大屏V6.Dooring也已上线第一个版本.

国内lowcode平台仍然有很长的路要走, 期待大家一起努力??!

本文转载自微信公众号「趣谈前端」,可以通过以下二维码关注。转载本文请联系趣谈前端公众号。

 

来源:趣谈前端内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯