图片转base64的几种场景(网络图片,本地图片,用户上传图片)
转载于博客园
https://www.cnblogs.com/zhangdiIT/p/7895903.html
写的很棒 推荐给大家
场景一:将用户本地上传的资源转化,即用户通过浏览器点击文件上传时,将图片资源转化成base64:
- <input type="file" id="image"><br/>

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

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

- function(){
- var url = "static/img/js1.jpg";//这是站内的一张图片资源,采用的相对路径
- convertImgToBase64(url, function(base64Img){
- //转化后的base64
- alert(base64Img);
- });
- }
- //实现将项目的图片转化成base64
- function convertImgToBase64(url, callback, outputFormat){
- var canvas = document.createElement('CANVAS'),
- ctx = canvas.getContext('2d'),
- img = new Image;
- img.crossOrigin = 'Anonymous';
- img.onload = function(){
- canvas.height = img.height;
- canvas.width = img.width;
- ctx.drawImage(img,0,0);
- var dataURL = canvas.toDataURL(outputFormat || 'image/png');
- callback.call(this, dataURL);
- canvas = null;
- };
- img.src = url;
- }

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

- function(){
- //这是网上的一张图片链接
- var url="http://p1.pstatp.com/large/435d000085555bd8de10";
- getBase64(url)
- .then(function(base64){
- console.log(base64);//处理成功打印在控制台
- },function(err){
- console.log(err);//打印异常信息
- });
- }
- //传入图片路径,返回base64
- function getBase64(img){
- function getBase64Image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
- var canvas = document.createElement("canvas");
- canvas.width = width ? width : img.width;
- canvas.height = height ? height : img.height;
- var ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
- var dataURL = canvas.toDataURL();
- return dataURL;
- }
- var image = new Image();
- image.crossOrigin = '';
- image.src = img;
- var deferred=$.Deferred();
- if(img){
- image.onload =function (){
- deferred.resolve(getBase64Image(image));//将base64传给done上传处理
- }
- return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
- }
- }

至此,便将图片base64转码的三种场景介绍完毕了,下面是基于以上的一下拓展:
拓展一:后台需要以纯字符串的形式上传(即去掉data:image/png;base64,截取字符串即可)
- reader.result.substring(reader.result.indexOf(",") + 1)
拓展二:判断base64资源大小,超过2M不让上传
- var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )
- if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
- alert( '上传失败,请上传不大于2M的图片!');
- return;
- }
其中reader.result即是base64转码后的结果。以上便是对网络上的一些资源的整理,亲测可用。如有不对可以留言交流。
图片转base64的几种场景(网络图片,本地图片,用户上传图片)的更多相关文章
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...
- file标签 - 图片上传前预览 - FileReader & 网络图片转base64和文件流
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签
微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签 一.问题 报错信息: VM696:2 pages/user/user.wxss 中的本地资源 ...
- json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式
JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...
- JS图片转Base64
网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...
- UIImage加载本地图片的两种方式
UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片 ...
- 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间
现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...
随机推荐
- spring + spring-data-redist + Redis 单机、集群(cluster模式,哨兵模式)
一.单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig" class="redis.clients.jedis.Je ...
- mesh重叠闪烁问题
我用正交摄像机做了2d游戏,但是导出spine动画文件是个mesh ,在游戏里有时会出现2个Mesh来回切换显示顺序问题,导致闪烁 查了下并没有发现什么解决方案 后面突然发现只要将摄像机的Y轴偏移一点 ...
- python线程池--threadpool
在爬虫时,有时候解析获得了很多图片或视频地址时,如果一个个下载完成再去下载另一个,这样执行效率太慢了,此时就可用到线程池threadpool,使用基本步骤如下: 1.定于任务函数 2.创建线程池,定义 ...
- switch-case的选择用法
企业发放的奖金根据利润提成.利润I低于或等于100000元的,奖金可提0.1:利润高于100000元,低于200000(100000<I<=200000)时,低于100000元的部分按10 ...
- 【计算机视觉】阶编码本模型(Multi phase codebook model)
转自:http://www.cnblogs.com/xrwang/archive/2012/04/24/MPCBBGM.html 多阶编码本模型(Multi phase codebook model) ...
- Visual Subst - 简单将任意文件夹挂载模拟成驱动器盘符硬盘分区的小工具
随着电脑的使用,硬盘里的资料一天比一天多,也越来越杂乱.一些朋友为了方便文件管理,会考虑重新分区,让C.D.E等盘符分别担任不同的角色.不过,不分区的话也有一些小工具可以帮你实现. Visual Su ...
- mybati代码生成器 mybatis-generator
Mybatis代码生成器,用于快速生成代码 代码 https://github.com/wangxinforme/mybatis-generator
- java实现顺序队列
package queue; import java.util.Scanner; public class ArrayQueueLoop { public static void main(Strin ...
- PHP:API 接口规范完整版本
整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...
- AtCoder Beginner Contest 077
A - Rotation Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are g ...