转载于博客园

https://www.cnblogs.com/zhangdiIT/p/7895903.html

写的很棒  推荐给大家

场景一:将用户本地上传的资源转化,即用户通过浏览器点击文件上传时,将图片资源转化成base64:

  1. <input type="file" id="image"><br/>
  1. var reader = new FileReader();
  2. var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败
  3. var file = $("#image")[0].files[0];
  4. var imgUrlBase64;
  5. if (file) {
  6. //将文件以Data URL形式读入页面
  7. imgUrlBase64 = reader.readAsDataURL(file);
  8. reader.onload = function (e) {
  9. //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64码部分(可选可不选,需要与后台沟通)
  10. if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
  11. alert( '上传失败,请上传不大于2M的图片!');
  12. return;
  13. }else{
  14. //执行上传操作
  15. alert(reader.result);
  16. }
  17. }
  18. }

场景二:将本项目中的图片资源转化成base64,(我还没有用到过此场景,感觉场景二也可以通过场景三来实现)

  1. function(){
  2. var url = "static/img/js1.jpg";//这是站内的一张图片资源,采用的相对路径
  3. convertImgToBase64(url, function(base64Img){
  4. //转化后的base64
  5. alert(base64Img);
  6. });
  7. }
  8.  
  9. //实现将项目的图片转化成base64
  10. function convertImgToBase64(url, callback, outputFormat){
  11. var canvas = document.createElement('CANVAS'),
  12.   ctx = canvas.getContext('2d'),
  13.   img = new Image;
  14.   img.crossOrigin = 'Anonymous';
  15.   img.onload = function(){
  16.   canvas.height = img.height;
  17.   canvas.width = img.width;
  18.   ctx.drawImage(img,0,0);
  19.   var dataURL = canvas.toDataURL(outputFormat || 'image/png');
  20.   callback.call(this, dataURL);
  21.   canvas = null;
  22. };
  23.   img.src = url;
  24. }

场景三:将网络图片资源转化为base64,(感觉场景二中的资源换成绝对路径即可使用在场景三中)

  1. function(){
  2.    //这是网上的一张图片链接
  3.    var url="http://p1.pstatp.com/large/435d000085555bd8de10";
  4. getBase64(url)
  5. .then(function(base64){
  6. console.log(base64);//处理成功打印在控制台
  7. },function(err){
  8. console.log(err);//打印异常信息
  9. });
  10. }
  11.  
  12. //传入图片路径,返回base64
  13. function getBase64(img){
  14. function getBase64Image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
  15. var canvas = document.createElement("canvas");
  16. canvas.width = width ? width : img.width;
  17. canvas.height = height ? height : img.height;
  18.  
  19. var ctx = canvas.getContext("2d");
  20. ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
  21. var dataURL = canvas.toDataURL();
  22. return dataURL;
  23. }
  24. var image = new Image();
  25. image.crossOrigin = '';
  26. image.src = img;
  27. var deferred=$.Deferred();
  28. if(img){
  29. image.onload =function (){
  30. deferred.resolve(getBase64Image(image));//将base64传给done上传处理
  31. }
  32. return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
  33. }
  34. }

至此,便将图片base64转码的三种场景介绍完毕了,下面是基于以上的一下拓展:

拓展一:后台需要以纯字符串的形式上传(即去掉data:image/png;base64,截取字符串即可)

  1. reader.result.substring(reader.result.indexOf(",") + 1)

拓展二:判断base64资源大小,超过2M不让上传

  1. var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )
  2. if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
  3. alert( '上传失败,请上传不大于2M的图片!');
  4. return;
  5. }

其中reader.result即是base64转码后的结果。以上便是对网络上的一些资源的整理,亲测可用。如有不对可以留言交流。

图片转base64的几种场景(网络图片,本地图片,用户上传图片)的更多相关文章

  1. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

  2. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...

  3. Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果

    大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...

  4. file标签 - 图片上传前预览 - FileReader & 网络图片转base64和文件流

    记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...

  5. 微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签

    微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签 一.问题 报错信息: VM696:2 pages/user/user.wxss 中的本地资源 ...

  6. json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式

     JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...

  7. JS图片转Base64

    网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...

  8. UIImage加载本地图片的两种方式

    UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片 ...

  9. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

随机推荐

  1. spring + spring-data-redist + Redis 单机、集群(cluster模式,哨兵模式)

    一.单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig" class="redis.clients.jedis.Je ...

  2. mesh重叠闪烁问题

    我用正交摄像机做了2d游戏,但是导出spine动画文件是个mesh ,在游戏里有时会出现2个Mesh来回切换显示顺序问题,导致闪烁 查了下并没有发现什么解决方案 后面突然发现只要将摄像机的Y轴偏移一点 ...

  3. python线程池--threadpool

    在爬虫时,有时候解析获得了很多图片或视频地址时,如果一个个下载完成再去下载另一个,这样执行效率太慢了,此时就可用到线程池threadpool,使用基本步骤如下: 1.定于任务函数 2.创建线程池,定义 ...

  4. switch-case的选择用法

    企业发放的奖金根据利润提成.利润I低于或等于100000元的,奖金可提0.1:利润高于100000元,低于200000(100000<I<=200000)时,低于100000元的部分按10 ...

  5. 【计算机视觉】阶编码本模型(Multi phase codebook model)

    转自:http://www.cnblogs.com/xrwang/archive/2012/04/24/MPCBBGM.html 多阶编码本模型(Multi phase codebook model) ...

  6. Visual Subst - 简单将任意文件夹挂载模拟成驱动器盘符硬盘分区的小工具

    随着电脑的使用,硬盘里的资料一天比一天多,也越来越杂乱.一些朋友为了方便文件管理,会考虑重新分区,让C.D.E等盘符分别担任不同的角色.不过,不分区的话也有一些小工具可以帮你实现. Visual Su ...

  7. mybati代码生成器 mybatis-generator

    Mybatis代码生成器,用于快速生成代码 代码 https://github.com/wangxinforme/mybatis-generator

  8. java实现顺序队列

    package queue; import java.util.Scanner; public class ArrayQueueLoop { public static void main(Strin ...

  9. PHP:API 接口规范完整版本

    整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...

  10. AtCoder Beginner Contest 077

    A - Rotation Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are g ...