当前位置: 首页 > news >正文

利用DataURL技术在网页上显示图片

DataURL是什么?

DataURL是一种对文件进行编码,并将编码后的内容嵌入及呈现在另一个文件中的规范/协议。
目前DataURL用得最多的领域是把图片文件转化成DataURL(此时,这个DataURL就是这个图片的所有内容)并在网页上利用<img>直接输出,而非给<img>指定文件路径让浏览器另行下载。

DataURL的格式是怎么样的?

data:[<mediatype>][;base64],<data>
示例1:data:,Hello%2C%20World! //简单的text/plain类型数据
示例2:data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D //base64编码过的text/plain类型数据
示例3:data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QLQRXhp…… //base64编码过的jpg图片,由于数据太长,用省略号代替

其中mediatype表示MIME,不填就默认是text/plain,紧跟着的是字符编码类型,默认是;US-ASCII,这两项都是可选的,但需要注意的是,逗号是一定要有的。

DataURL怎么生成?

下面从前、后端的方向分别谈谈怎么生成DataURL。

前端(浏览器)如何生成DataURL?

这得从DataURL的应用场景说起,前端多是利用DataURL来显示图片,这图片来源的途径无非有两点:一是服务器发来的(这点放到后面讲),二则是从用户本地“上传”来的。

过去的“上传图片”,是把图片从用户本地发送至服务器保存后再获取到图片地址,并将这地址放到<img>里显示,实际上就是让浏览器又从服务器上下载下来。而如今,有了HTML5的file api,可以直接从用户本地读取出图片:利用file:input或拖拽操作选定图片并包装成一个file对象,利用FileReader从file对象中读取数据并可转化为DataURL(具体请看我的另外一篇文章:《利用html5 file api读取本地文件(如图片、PDF等)》)。

后端(服务器)如何生成DataURL?

所谓DataURL,实际上就是base64编码+MIME,按照这个思路,我们只需要先把图片(文件)转化成base64编码,再查出图片的MIME,按照DataURL的格式来拼接即可。

举个例子,php的:

$img_file = file_get_contents("http://www.oschina.net/img/logo_s2.png");
echo 'data:image/png;base64,' . base64_encode($img_file);

相关文章:

  • iOS音频AAC视频H264编码 推流最佳方案
  • 【十大经典数据挖掘算法】C4.5
  • logstash推送mysql慢查询日志
  • 51cto博客第一篇
  • c语言:将三个数按从大到小输出。
  • 正则与JS中的正则
  • JAVA实现发送电子邮件
  • JS组件系列——表格组件神器:bootstrap table
  • JavaScript数组使用sort排序
  • junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
  • 我的Android进阶之旅------Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项...
  • BZOJ1075 : [SCOI2007]最优驾车drive
  • SharePoint自动化系列——Create a local user and add to SharePoint
  • iOS 轻量级的数据库leveldb
  • 混合的方式开启服务
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 0x05 Python数据分析,Anaconda八斩刀
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • java概述
  • Nacos系列:Nacos的Java SDK使用
  • vue.js框架原理浅析
  • 初识MongoDB分片
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于springcloud Gateway中的限流
  • 后端_MYSQL
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 你真的知道 == 和 equals 的区别吗?
  • 什么软件可以剪辑音乐?
  • 微服务入门【系列视频课程】
  • 一些关于Rust在2019年的思考
  • 终端用户监控:真实用户监控还是模拟监控?
  • 白色的风信子
  • 《码出高效》学习笔记与书中错误记录
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #宝哥教你#查看jquery绑定的事件函数
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $ git push -u origin master 推送到远程库出错
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (175)FPGA门控时钟技术
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .aanva
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 反编译_.net反编译的相关问题