基于 canvas 将图片转化成字符画

基于 Canvas 技术把视频或图片转换成字符显示 在网上看到一个把图像转换成文字显示的视频,于是研究了一下,并记录下思路。 先贴上效果显示图: 1、先创建一个内存画布,把图片画上去,然后获取图片像素数据 2、通过数据将图片转换成灰度图像,也就是黑白照那种,没有颜色。在图像学中有一个转换公式就是 gray = ~~(R * 0.299 + G * 0.587 + B * 0.114); RGB 为像素的值 3、设置字符的宽高,计算每个字符对应的图... 阅读详情

img2txt

字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢? HTML5 让这个可能变成了现实,通过 canvas,可以很轻松实现这个功能。

其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符 #*+“ 和空格来填充。

下面是源码:

HTML:一个 canvas 元素 #cv,一个字符画容器 #txt。

<canvas id="cv">fuck ie</canvas>
<div id="txt"></div>

css:由于每一行用  p  来填充,所以  p  的  height  和  font-size  大小应该一致都是  12px ,这样可以避免每行出现空隙。

* {margin: 0;padding: 0;}
body {font-size: 12px; margin: 10px; font-family: simsun; background: #fff;}
p { height: 12px;}
p.ts { margin: 10px 0 0 0; width: 500px; float: left;}
span {width: 12px;}
#cv, #txt {float: left;}
#cv { margin-right: 5px;}

javascript:请看注释和下面的解释。

var cv = document.getElementById('cv');
var c = cv.getContext('2d');
var txtDiv = document.getElementById('txt');
var fileBtn = document.getElementById("up-button");
var img = new Image();
img.src = 'a.jpg';
img.onload = init; // 图片加载完开始转换
fileBtn.onchange = getImg;
 
// 根据灰度生成相应字符
function toText(g) {
    if (g <= 30) {
        return '#';
    } else if (g > 30 && g <= 60) {
        return '&';
    } else if (g > 60 && g <= 120) {
        return '$';
    }  else if (g > 120 && g <= 150) {
        return '*';
    } else if (g > 150 && g <= 180) {
        return 'o';
    } else if (g > 180 && g <= 210) {
        return '!';
    } else if (g > 210 && g <= 240) {
        return ';';
    }  else {
        return ' ';
    }
}
 
 
// 根据rgb值计算灰度
function getGray(r, g, b) {
    return 0.299 * r + 0.578 * g + 0.114 * b;
}
 
// 转换
function init() {
    txtDiv.style.width = img.width + 'px';
    cv.width = img.width;
    cv.height = img.height;
    c.drawImage(img, 0, 0);
    var imgData = c.getImageData(0, 0, img.width, img.height);
    var imgDataArr = imgData.data;
    var imgDataWidth = imgData.width;
    var imgDataHeight = imgData.height;
    var html = '';
    for (h = 0; h < imgDataHeight; h += 12) {
        var p = '<p>';
        for (w = 0; w < imgDataWidth; w += 6) {
            var index = (w + imgDataWidth * h) * 4;
            var r = imgDataArr[index + 0];
            var g = imgDataArr[index + 1];
            var b = imgDataArr[index + 2];
            var gray = getGray(r, g, b);
            p += toText(gray);
        }
        p += '</p>';
        html += p;
    }
    txtDiv.innerHTML = html;
}
 
// 获取图片
function getImg(file) {
    var reader = new FileReader();
    reader.readAsDataURL(fileBtn.files[0]);
    reader.onload = function () {
        img.src = reader.result;
    }
}

如何取到相应像素点的灰度?

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() 计算灰度。

如何对应到字符?

再考虑一下每个字符串的宽度是 6px,高度是 12px,所以我们不可能每个像素点都要对应一个字符,那样生成的图案将非常之大。 我们只能根据图片宽高,来定义一个间隔,横向间隔 6px,纵向间隔 12px 取一次像素,这样可以保证生成的字符画大小和原图保持一致。

最后请看 demo: http://justjavac.com/img2txt/


字符/图片转换成字符画 图片/文字转换成字符拼成的图,很酷 图片/文字转换成字符拼成的图,很酷 立即下载

相关推荐

生信人填坑记 orthofinder的安装和基础使用

其中常用的有两个结果,第一个是Orthogroups文件夹下的Orthogroups.GeneCount.tsv,这个文件里保存着每个家族在每个物种里的成员数量。(写到这儿饭点到了,吃饭要紧…在国内使用conda的同学我相信很多人都会遇到-|- -|- -|- -|- -|- -|- -|- -|- 一直转圈。软件的是由很简单,将你要跑的物种的蛋白质文件放在work/data目录下,文件名都用物种缩写,后缀统一就行。当然,很多软件都会自带一个这样的文件,conda装不了的时候可以去软件官网溜达溜达。

qq_43337286的博客 5382

js将图片转字符图

如何获取图片每一个像素点的rgb颜色值/将图片转换成字符图/获取图片颜色数据/js将图片转字符图

weixin_45435140的博客 1834

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3921

图片和Canvas的相互转换

兼容性:IE9及以上,FF,Chrome, Opera, Safari 支持 drawImage() 方法。 一、图片转 Canvas       提示:图片资源必须加载完成后才能绘制在画布上! var img = new Image(); img.src = 'xx.jpg'; img.onload = function(){ ctx.drawImage(img,

huangpb的博客 7499

lammps模拟石墨烯吸附水分子(gcmc)

本文分享lammps gcmc吸附的一个案例代码,上下壁面的通道材料为石墨烯,吸附的分子为tip4p水分子。大家好,我是小马老师。

lammps_jiayou的博客 2592

关于UMI设备采集数据的模型训练方法

模仿学习如专家模型、VLA模型,ACT、DP、openpi等算法模型训练时,都是使用的机器人的绝对位姿或关节角;而UMI记录的轨迹是相对于UMI起始点的,可以理解为是相对于起点的绝对增量,对应到机器人中就是相对于末端TCP的增量。在用模型进行训练时,当然可以,但这样进行模型训练的话达不到跨本体的能力,因为模型本身还是学习的基于机器人base坐标系的绝对位姿关系,倘若用这种方式进行处理,则UMI可以理解为是一个遥操的方法,本质还是记录的机器人的state。在看了和。

boss-dog 421

js图片的几种转换

适用于上传图片,然后将图片的base64发送给后端的情况。2.使用FileReader。

虎的博客 872

光学传播仿真软件:SPEOS_(14).建筑物内光环境仿真

在建筑物内光环境仿真中,材料属性的定义直接影响光的传播和反射效果。SPEOS提供了丰富的材料库,但也可以自定义材料属性以满足特定需求。创建新材料选择Materials->。输入材料名称和类型。配置材料属性选择材料对象,打开属性编辑器。设置反射率、透射率、表面粗糙度和颜色。# 导入SPEOS模块# 创建新材料# 配置材料属性custom_material.set_reflectivity(0.8) # 设置反射率为0.8。

kkchenjj的博客 1249

基于canvas将图片转化成字符画

字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能。其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符#*+“和空格来填充。下面是源码: HTML:一个canvas元素#cv,一个字符画容器#txt 。 fuck ie css:由于每一行用p来填充,所以p的

1736

YOLO11改进|注意力机制篇|引入先验卷积注意力机制CPCA

YOLO11中添加先验卷积注意力机制CAPA

A1983Z的博客 2375

在MATLAB和Simulink中设计并仿真一个电动汽车BMS热管理系统

电动汽车电池管理系统(Battery Management System, BMS)中的热管理是确保电池安全运行、延长寿命和提高性能的关键环节。通过Simulink进行BMS热管理仿真是验证控制策略的有效性、优化散热设计并降低开发成本的重要手段。以下是如何在MATLAB和Simulink中设计并仿真一个电动汽车BMS热管理系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的电动汽车BMS热管理系统仿真。

xiaoheshang_123的博客 703

字符画图片生成版

看图: 有木有很可爱呀? <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>Char Picture</title> <style> #show{ font-family: Courier New; font-size: 10px;

有问题可关注公众号:前端研究院 后台输入问题回复 658

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 92

canvas 图片 文字 合成

canvas可以合成文字  图片   这样可以本地预览图片了 直接加载本地的图片:先用 引用,然后获取src 赋值到Image对象src的属性值 var starSelectImg = $('#starSelect').val(); $('#starImg').attr('src',starSelectImg); var starImg = new Image(); starImg

huaye2007的专栏 4354

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

图片转换成字符输出

图片转换成字符输出

行业报告智库 1684

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c语言将一幅画转换为字符画,C#将图片转换成字符画

先看一下效果图在Main方法中调用(首先要添加程序集System.Drawing,然后引入命名空间System.Drawing)ConvertToChar(new Bitmap(@"D:\img\dlrb.png"), @"D:\1.txt", 2, 3);Console.WriteLine("Success");方法,这说一下,因为大图片像素的宽和高都是1000以上的,所以每一个转换为字符的话,...

weixin_39895481的博客 1392

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

js字符画(图片转字符)简单版详细注释

js字符画(图片转字符)简单版详细注释

imoo的笔记 2550

Html5视频转字符画

废话不多说,先看效果 http://www.bilibili.com/video/av3502072/ 这是视频链接,文章后面再给demo 链接 原理及实现方式 1.图片转字符画 还是那句话,先看效果图: Demo 地址: http://followyourheart.sinaapp.com/Demos/char_pic.html

Roger的专栏 5458

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

平时我们都是使用软件把图片转化为字符画,今天我就用JAVASCRIPT把图片转化成字符画,在娱乐中学习一些JS、HTML5、canvas的使用方法。   通过javascript把图片转化为字符画   1.获取上传图片对象数据   Javascript无法直接获取本地上传的图片的数据,html5可以解决这一问题 。html5里面的FileReader interface可以把图片

unity3d,unity3d教程下载 693

开源项目推荐:图片转字符画工具

开源项目推荐:图片转字符画工具 1. 项目基础介绍 本项目是一款开源的图片转字符画工具,采用纯前端技术实现。主要使用JavaScript编程语言,结合HTML和CSS进行开发,利用了现代Web技术如canvas和gif.js库。项目的目的是将图片文件转换为字符画形式,用户可以自定义字符样式和图片尺寸,实现个性化的字符画创作。 2. 项目的核心功能 图片格式支持:支持jpg、png和gif三种常见...

gitblog_00220的博客 487

HTML5将图片转化成字符画

HTML5将图片转化成字符画   字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能。其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符#*+“和空格来填充。下面是源码:HTML:一个canvas元素#cv,一个字符画容器#txt 。 1 <canvas id=...

weixin_33832340的博客 378
上一篇: 详解一下 javascript 中的比较
下一篇: 10 个你需要了解的最佳 javascript 开发实践
迷渡
迷渡 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄19年 2405粉丝 124原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值