位置: 编程技术 - 正文

利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解(canvas的使用步骤)

编辑:rootadmin

推荐整理分享利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解(canvas的使用步骤),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:canvas使用教程,canvas如何使用,canvas的使用步骤,canvas如何使用,canvas使用教程,canvas的todataurl,canvas如何使用,canvas如何使用,内容如对您有帮助,希望把文章链接给更多的朋友!

将图片转为base的好处

将图片转换为Base编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页、编辑器中。 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地方。

将图片转换成base编码的,在web网上一般用于小图片上,不仅可以减少图片的请求数量(集合到js、css代码中),还可以防止因为一些相对路径等问题导致图片错误。

引言

假设一个应用场景:由于某些特殊原因从服务端请求到图片路径,要求通过该路径获取对应图片的 base dataURL。在这个场景中,我们首先推断该图片路径是可访问的,同时还需要一种将图片转换到 dataURL 的方法。

我们如何实现它呢?

dataURL

先大致回顾下正统的 dataURL 的语法,这有助于我们检验转换后的内容是否正确。一个完整的 dataURI 应该是这样的:

其中mediatype声明了文件类型,遵循MIME规则,如“image/png”、“text/plain”;之后是编码类型,这里我们只涉及 base;紧接着就是文件编码后的内容了。我们常常在 HTML 里看到img标签的src会这样写:

利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解(canvas的使用步骤)

这个img引用的就是以 base 编码的 dataURL 了,只要浏览器支持,就可以被解码成 gif 图片并渲染出来。

.toDataURL()

FileReader对象也有类似的方法,比如.readAsDataURL() ,然而它只接受file或blob类型,而这两种类型一般只能通过<input[type=file]>元素的files属性获取,或者用Blob()构造函数手工创建一个新的对象。尴尬的是我们当前只有图片路径,受制于浏览器的安全策略, <input[type=file]>的files属性是只读的,而Blob()构造函数只接受文件内容,两种方式都无法通过图片路径直接获取。上文中假设的应用场景迫使我们必先考虑如何通过路径获取到图片内容。<img>是可以的,并且可以被绘制到<canvas>中,而<canvas>正巧拥有.toDataURL()方法。

万事具备,我们只需要把<img>获取到的图片放到<canvas>里再通过.toDataURL()方法转化下,就可以得到以 base 编码的 dataURL。来看这个方法的语法:

canvas是DOM元素<canvas>对象;参数type指定图片类型,如果指定的类型不被支持则以默认值image/png替代;encoderOptions可以为image/jpeg或image/webp类型的图片设置图片质量,取值0-1,超出则以默认值0.替代。

需要注意的是:在转换成 dataURL 前必须先确保图片成功加载到,于是.toDataURL()方法应该写在<img>的onload异步事件中。现在就来实现一个功能函数:

一个可供随时调用的转换函数完成了,它会在图片被加载后返回一整个 dataURL 字符串。

完善

onload事件确保了转换任务在加载后执行,却又带来了新问题——dataURL 只有在图片加载完成后才会返回,我们无法确定图片什么时候完成加载。如果后续要对 dataURL 做相关处理(比如传递到其他服务器)的话,添加一个回调是必要的,这能确保后续处理任务在成功得到 dataURL 之后执行,我们需要修改getBase() :

在执行时添加回调:

就是这样,如果不考虑兼容性的话,或许我们可以用 promise 和 generator 来实现,再添加一些错误处理就更完美了。

总结

标签: canvas的使用步骤

本文链接地址:https://www.jiuchutong.com/biancheng/369832.html 转载请保留说明!

上一篇:利用three.js画一个3D立体的正方体示例代码(three.js gui)

下一篇:解读ES6中class关键字(es6中的class常见使用场景)

  • 未达起征点的增值税怎么做账
  • 投标报名费开什么类别发票
  • 期初试算平衡表不平衡怎么查
  • 一般纳税人工会经费可以零申报吗
  • 个人所得税生产经营所得税率
  • 施工单位开具发票税务税率
  • 音乐茶座取什么名字好呢
  • 即征即退免所得税吗
  • 公益性捐赠税前扣除资格认定
  • 年度纳税申报时间规定
  • 贷款金融资产减值的会计分录怎么写?
  • 公司能否投资非盈利组织?如何做账
  • 公司支付给股东付银行利息要交税吗怎么交
  • 销项负数发票怎么冲减成本
  • 非独立核算分公司怎么报税
  • 企业自建房是什么意思
  • 认证后的发票可以留存多久
  • 房产税缴纳时间规定
  • 烟草生产者消费税计算方法
  • 报税申报不了
  • 税号里的0是字母还是数字
  • 帮对方公司垫付违法吗
  • etc在充值后未索取可以再次索取吗
  • 权益性投资损失包括哪些
  • 票据再质押
  • 企业汽油费会计分录
  • 进项发票认证抵扣时间有限制吗
  • 没有税务登记证
  • 打包贷款和出口信贷的区别和联系
  • 收到工程结算单,没有发票,能入成本吗
  • 新公司没收入之前费用都走开办费吗
  • 民间非盈利组织会计要素组成
  • 工人的意外险如何赔付
  • 股东以房产投资入股,增值税免吗
  • win10分辨率调整
  • 结转消费税的会计分录
  • 酒店没有营业执照可以举报吗?
  • 提坏账准备的会计分录 2022
  • php curl cookie
  • 其他债权投资按公允价值计量,为什么计提减值准备
  • 计算机视角技术
  • 资产负债表其他应收款计算公式
  • python数学建模资料
  • 金融机构贷款准备金
  • 在建工程发生的非正常损失计入哪
  • 公司转让后原账本怎么处理
  • 员工预支款项及报销流程
  • 汽车租赁属于有形动产融资租赁服务?
  • 无偿帮工造成财产损失谁赔偿 法院
  • 职工福利费开支超过准予扣除标准的金额为1.2
  • 小型微利企业季度所得税怎么计算
  • sql 列数
  • 法人一直把公户账户转账
  • 自产赠送视同销售的成本如何确定?
  • 应收账款管理应该收集哪些信息
  • 厂家给的返利应该怎么做会计分录
  • 连锁药店成本会计
  • 本期缴纳上期应纳税额怎么填
  • 专票三流合一指哪三流
  • 原材料暂估的账务处理
  • 管理会计主要内容包括
  • sql server怎么改数据
  • windows2003服务
  • Ubuntu系统怎么设置双屏
  • win7屏幕太亮了怎么调电脑
  • win10正式版激活码
  • mkcool是什么文件
  • WIN7系统如何恢复出厂系统
  • linux的批处理
  • linux可视化界面怎么输入代码
  • cocos2dx官方教程
  • Linux中删除文件夹的正确方式
  • JavaScript基础语法
  • android内存占用分析
  • 湖南国家税务局网上电子税务局官网
  • 企业所得税法中所称有关的支出是指
  • 税务师事务所牌匾
  • 国税开票二维码图片
  • 无偿赠送怎么做账
  • 三证合一怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设