`

通过javascript把图片转化为字符画

阅读更多

 

通过javascript把图片转化为字符画

 

 

1.获取上传图片对象数据

 

Javascript无法直接获取本地上传的图片的数据,html5可以解决这一问题 。html5里面的FileReader interface可以把图片对象的数据读到内存,然后通过接口的进度事件(Progress Events)访问这些数据。

浏览器支持:

    • Internet Explorer: 10+
    • Firefox: 10+
    • Chrome: 13+
    • Opera: 12+
    • Safari: partial

代码片段:

  1. var reader = new FileReader();                        //建立一个FileReader接口  
  2. reader.readAsDataURL(fileBtn.files[0]);        //fileBtn为文件上传控件对象  
  3. reader.onload = function () {                             //在onload事件中访问图像数据  
  4.     img.src = reader.result;  }

 

2.获取图像对象像素点

 

图像对象的getImageData 方法返回一个对象,每个像素点的 rgba 值都保存在其 data 属性下面,这是一个一位数组, 也就是说,rgba 分别对应一个值,然后接着就是一下像素点的 rgba,假设 getImageData.data 的值为 [1,2,3,4,5,6,7,8], 那么 getImageData 对象范围就包含了 2 个像素点,第一个像素点的 rgba 值分别是 1,2,3,4,第二个像素点的就是 4,5,6,7,8。 因此,我们在取每个像素点的 rgba 值的时候其index 应该在像素点的索引值上乘以 4,然后通过 getGray() 计算灰度。

  1. var imgData = c.getImageData(0, 0, img.width, img.height);  
  2. var imgDataArr = imgData.data;  
  3. var imgDataWidth = imgData.width;  
  4. var imgDataHeight = imgData.height;  
  5. for (h = 0; h < imgDataHeight; h += 12) {  
  6.     for (w = 0; w < imgDataWidth; w += 6) {  
  7.         var index = (w + imgDataWidth * h) * 4;  
  8.         var r = imgDataArr[index + 0];  
  9.         var g = imgDataArr[index + 1];  
  10.         var b = imgDataArr[index + 2];  
  11.     }  
  12. }  

 

3.根据rgb值计算灰度

 

不同的RGB空间,灰阶的计算公式有所不同,常见的几种RGB空间的计算灰阶的公式如下:

1、简化 sRGB IEC61966-2.1 [gamma=2.20]
Gray = (R^2.2 * 0.2126  + G^2.2  * 0.7152  + B^2.2  * 0.0722)^(1/2.2)
2、 Adobe RGB (1998) [gamma=2.20]
Gray = (R^2.2 * 0.2973  + G^2.2  * 0.6274  + B^2.2  * 0.0753)^(1/2.2)
3、Apple RGB [gamma=1.80]
Gray = (R^1.8 * 0.2446  + G^1.8  * 0.6720  + B^1.8  * 0.0833)^(1/1.8)
4、ColorMatch RGB [gamma=1.8]
Gray = (R^1.8 * 0.2750  + G^1.8  * 0.6581  + B^1.8  * 0.0670)^(1/1.8)
5、简化 KODAK DC Series Digital Camera [gamma=2.2]
Gray = (R^2.2 * 0.2229  + G^2.2  * 0.7175  + B^2.2  * 0.0595)^(1/2.2)
 
 
  1. // 根据rgb值计算灰度  
  2. function getGray(r, g, b) {  
  3.     return 0.299 * r + 0.578 * g + 0.114 * b;  
  4. }  

 

4.根据灰度生成相应字符

 

把不同的灰度替换成相应的字符,原则上灰度越深的像素应该用越复杂的字符,具体什么字符可以自由替换,这只是一个测试版本。
代码片段:

  1. // 根据灰度生成相应字符  
  2. function toText(g) {  
  3.     if (g <= 30) {  
  4.         return ’8′;  
  5.     } else if (g > 30 && g <= 60) {  
  6.         return ’&’;  
  7.     } else if (g > 60 && g <= 120) {  
  8.         return ’$';  
  9.     }  else if (g > 120 && g <= 150) {  
  10.         return ’*';  
  11.     } else if (g > 150 && g <= 180) {  
  12.         return ’o';  
  13.     } else if (g > 180 && g <= 210) {  
  14.         return ’!';  
  15.     } else if (g > 210 && g <= 240) {  
  16.         return ’;';  
  17.     }  else {  
  18.         return ‘.’;  
  19.     }  
  20. }  

到这次我们的工作就完成得差不多啦,上面只给出了一些代码的片段,把原理疏通了一下,具体怎么实现大家可以自由发挥,下面给出一个示例,把源码也贴出来跟大家分享。

查看示例

PS:已经把这个demo整合到我博客的小工具里了(通过模板实现)去看看?

下载地址

2
0
分享到:
评论

相关推荐

    gif变成字符动画网页

    本资源主要介绍如何将传统的GIF动图转换为字符动画,并在网页中展示。这个过程涉及到多个知识点,包括GIF图像处理、字符动画制作、网页开发等。 首先,我们需要理解GIF格式。GIF(Graphics Interchange Format)是...

    imagetotext一个纯前端的图片转字符画工具

    今天我们要探讨的是一款名为"image-to-text"的纯前端图片转字符画工具,它巧妙地利用JavaScript技术将图片转化为由字符组成的艺术作品,为我们的创意表达开辟了新的可能。 "image-to-text"这款工具的核心功能是将...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册九:字符串

    `parseInt()`, `parseFloat()`用于将字符串转换为整数或浮点数,而`toString()`则将数值转换为字符串。 总结,JavaScript中的字符串是处理文本数据的基本工具。理解和掌握字符串的特性及操作方法,对于Web前端...

    javascript字符型转换成整型

    在JavaScript编程语言中,字符型数据(通常指字符串类型)转换为整型数据是一项常见的操作需求,尤其是在处理用户输入、解析数据或进行数值计算时。本文将深入探讨如何利用JavaScript来实现这一转换,并在此过程中...

    javascript将16进制的字符串转换为10进制整数hex.docx

    根据给定文件的信息,本文将深入探讨如何在JavaScript中实现16进制字符串到10进制整数的转换,并附带介绍与之相关的其他进制间的转换方法以及字符与ASCII码之间的转换。 ### 一、JavaScript中16进制字符串到10进制...

    GIF和图片转字符动画源码.zip

    该压缩包中的源码可能是用一种编程语言(如Python、JavaScript或C++)编写的,它可以解析GIF文件或读取静态图片,然后将每一帧转化为字符表示。这个过程可能涉及到以下几个关键步骤: 1. **读取图像数据**:程序...

    视频转字符画视频工具,可以将普通视频转换成字符画视频

    总结来说,这个工具利用了音视频处理技术、字符画艺术形式以及Web前端技术,提供了一种便捷的方式来将普通视频转化为具有独特风格的字符画视频。用户只需通过浏览器访问,无需安装任何软件,即可享受这一创新的视频...

    CSDN新版论坛字符画

    1. **字符串处理**:字符画的核心是将图像转化为字符的过程,这需要对字符串进行操作,包括截取、拼接和格式化。在编程中,这通常涉及到字符串函数的使用,如Python的`join()`、JavaScript的`slice()`等。 2. **...

    JavaScript将base64图片转换成formData并通过AJAX提交的实现方法

    整个过程不需要修改服务器端代码,通过前端JavaScript将base64图片转换为标准的formData格式,并利用AJAX提交,就可以实现图片上传的功能。需要注意的是,虽然`$.ajax`在示例中使用了jQuery库进行演示,但实际操作中...

    javascript实现的字符串与十六进制表示字符串相互转换方法

    本文实例讲述了javascript实现的字符串与十六进制表示字符串相互转换方法。分享给大家供大家参考。具体如下: 之所以写这个,是因为发现SQL注入和XSS中经常利用十六进制表示的字符串,比如 SELECT CONCAT(0x68656c6...

    二维码图片转换成BASE64字符串

    例如,一个基于JavaScript的网页应用可以将这个BASE64字符串作为数据发送到服务器,服务器端再解码还原为二维码图片,这样就实现了图片的无损传输。 总结起来,"二维码图片转换成BASE64字符串"涉及的主要知识点包括...

    16进制字符串显示图片

    通过研究这些文件,你可以更好地理解如何将16进制字符串转换为可显示的图像。如果你没有积分获取这些资源,你可以尝试在网上找到相关的教程或代码片段,许多编程社区和论坛都有讨论这个问题的帖子。记得,如果你在...

    JavaScript中的字符串操作 .txt

    6. **大小写转换**:可以使用`toLowerCase()`和`toUpperCase()`方法来转换字符串的大小写。例如: ```javascript var city = "New York"; console.log(city.toUpperCase()); // 输出 "NEW YORK" console.log...

    javascript字符串操作

    ### JavaScript字符串操作详解 在JavaScript中,字符串是用于表示文本数据的一种基本数据类型。...通过本文介绍的JavaScript字符串操作方法,希望能够帮助开发者在日常工作中更加熟练地使用这些工具,提高编程效率。

    javascript字符串方法大全

    **功能说明**:`toUpperCase()` 方法用于把字符串转换为大写。 **语法格式**: ```javascript string.toUpperCase() ``` **示例**: ```javascript var str = "hello"; var upper = str.toUpperCase(); // 返回 ...

    JavaScript语言教程:JavaScript 字符串

    **功能**: 根据主机的语言环境把字符串转换为大写。 **语法**: `string.toLocaleUpperCase()` **返回值**: 返回转换后的字符串。 **示例**: ```javascript let str = "hello world"; console.log(str....

    Javascript中字符串相关常用的使用方法总结

    7. **转换字符串大小写** - `toUpperCase()` 和 `toLowerCase()` 方法用于将字符串转换为大写或小写形式。 ```javascript console.log(str.toUpperCase()); // 输出HELLO,WORLD ``` #### 三、ES6新增的字符串...

Global site tag (gtag.js) - Google Analytics