JS获取本地图片和网络图片的宽高尺寸和存储大小

2023-11-04

最新更新时间:2020年07月08日09:13:28
《猛戳-查看我的博客地图-总有你意想不到的惊喜》

本文内容:图片作为一种记录信息的载体,比文本更加生动,比视频更加精简,在日常生活中的用处很大。作为前端开发人员,操作图片的场景非常多,本文记录读取本地图片的宽高尺寸和存储大小,以及获取网络图片的宽高尺寸和存储大小。

读取本地图片
  • html
<input
	type="file"
	onChange={(e)=>{this.onChange(e)}}
	className={styles.getImg}
	title={this.state.title}
	id="fileinput"
	ref='onChange'
	accept="image/*"
	// capture="camera"
/>
  • JS
//input 标签的原生 change 事件
onChange(e){
	let file = e.currentTarget.files[0];//File
	//用户取消操作
	if(file == undefined){
		return
	}
	console.log(file.constructor);//ƒ File() { [native code] }
	console.log(file.name);
	console.log(file.size/1024);// kb 图片容量
	File2Base64(file);
}
function File2Base64(file){
	let fr = new FileReader();
	//如果下面的语句执行失败,需要放入 setTimeout 异步处理
	fr.readAsDataURL(file);
	fr.onload=function(e) {
		console.log(this.result);// base64
		console.log(e.target.result);// base64
		let base64 = e.target.result;// data:image/jpeg;base64,/9j/4AAQSkZJ
		console.log(base64.constructor);//ƒ String() { [native code] }
		getWH(base64);
	}
}
function getWH(base64){
	var img = new Image();
    img.src = base64;
    img.onload = function() {
    	//图片尺寸
		console.log(img.width,img.height);
	}
}
读取网络图片
  • 注意:如果不设置img.setAttribute('crossorigin', 'anonymous')允许跨域加载,调用canvas.toDataURL('image/jpeg', 1) 会报错Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
  • DOM
<canvas id="canvas"></canvas>
  • JS
let url = 'https://www.wanshaobo.com/static/1.png';
const canvas = document.getElementById('canvas');
let ctx = null;
var img = new Image();
img.src = url;
img.setAttribute('crossorigin', 'anonymous'); // 设置图片跨域应该在图片加载之前
img.onload = function(e) {
	//e.target = e.path[0] <img src="https://www.wanshaobo.com/static/1.png" crossorigin="anonymous">
	//图片原始宽高
	console.log(img.constructor)//ƒ HTMLImageElement() { [native code] }
	let w = img.width;
	let h = img.height;
	//将图片的绝对宽高绘制在canvas上
	canvas.width = w;
	canvas.height = h;
	ctx = canvas.getContext('2d');
	ctx.drawImage(img,0,0);
	canvas.toBlob(function(res){
		console.log(res.size);//图片真实存储大小
		console.log(res.type);
	},'image/jpeg',1)
	let base64 = canvas.toDataURL('image/jpeg', 1);//data:image/jpeg;base64,/9j/4AAQSkZJ
	console.log(base64.length);//不代表图片的存储大小
	Base642Blob(base64);
}
function Base642Blob(base64){
	var arr = base64.split(',');//['data:image/jpeg;base64',',/9j/4AAQSkZJ']
	var mime = arr[0].match(/:(.*?);/)[1];//image/jpeg
	var decodeBase64 = atob(arr[1]);//解码使用 base-64 编码的字符串 atob(',/9j/4AAQSkZJ')
	var len = decodeBase64.length;
	var u8arr = new Uint8Array(len);
	while (len--) {
		u8arr[len] = decodeBase64.charCodeAt(len);
	}
	let blob = new Blob([u8arr], {type: mime});
	console.log(blob.constructor)//ƒ Blob() { [native code] }
	console.log(blob.type);//image/jpeg
	//图片真实存储大小
	console.log(blob.size/1024);//kb
	Blob2Base64(blob);
}
function Blob2Base64(blob){
	var fr = new FileReader();
	fr.readAsDataURL(blob);
	fr.onload = function (e) {
		//e ProgressEvent loaded: 65861 total: 65861 type: "load"
		//this = e.target FileReader {}
		console.log(e.target.constructor);//ƒ FileReader() { [native code] }
		let base64 = e.target.result;
		console.log(this.result);// base64
		console.log(e.target.result);// base64
		let base64 = e.target.result;// data:image/jpeg;base64,/9j/4AAQSkZJ
		console.log(base64.constructor);//ƒ String() { [native code] }
		console.log(base64.length);//不代表图片的存储大小
	};
}
参考资料

感谢阅读,欢迎评论^-^

打赏我吧^-^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS获取本地图片和网络图片的宽高尺寸和存储大小 的相关文章

  • 文件操作

    文件操作 1 文件分类 xff1a 文本文件 xff08 例 xff1a 记事本 xff09 二进制文件 xff08 例 xff1a 视频文件 xff09 xff0c 优点 xff1a 所占内存较小 操作文件地址的两种方式 xff1a 相对
  • 常用的Java文件操作

    span class hljs comment 1 创建文件夹 span span class hljs comment import java io span File myFolderPath 61 span class hljs bu
  • Linux 文件系统调用 文件操作

    Linux 文件系统调用 文件操作 Linux 文件系统调用 文件操作 xff1a 12将a txt 内容拷贝到 b txt xff1a xff08 cp命令实现 mycp命令 xff09 找文件int fd 61 open 43 fork
  • Golang 文件操作

    1 读文件 os Open name string file File err error os OpenFile name string flag int perm FileMode File error ioutil ReadFile
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • C语言详解 FILE文件操作

    1 需要了解的概念 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语言文件的存取时 xff0c 都会先进行 打开文件 操作 xff0c 这个
  • linux下的CSV文件操作

    先介绍一下什么是csv文件 xff0c 这是一种简单的文本文件 xff0c 也被称为逗号分隔值文件 主要是用于存储简单的数据 xff0c 下面在weindows下用UE简单生成一下文件 然后用excel打开 这就是一个简单的csv文件 xf
  • Groovy学习-IO/文件操作

    读取文件 读取文本文件并打印每一行文本 new File 39 39 39 a txt 39 eachLine line gt println line eachLine方法是Groovy为File类自动添加的方法 xff0c 同时提供多个
  • qt中设置文件保存的几种方式

    归纳总结4种qt常用的文件保存的方式 1 需要用到的头文件 include
  • qt操作文件进行读写操作

    一 加上头文件 include
  • 使用jxl解析Excel出现的问题

    jxl read biff BiffException Unable to recognize OLE stream at jxl read biff CompoundFile CompoundFile java 116 at jxl re
  • 自己动手写一个key value store

    一涉及到persistent 哪怕只是最基本的需求 很多人都会依赖数据库 或是其他现成的库或工具 确实 对于文件 大部分人很少直接打交道 或者只是诸如整体反序列化 序列化 按行读取 append new line等有限的操作 一个persi
  • java导入csv格式文件之身份证格式处理

    一 出现的问题 csv中的身份证号如下图 导到数据库中的结果 因此怎样导入才能使身份证能够正常导入呢 2 解决方案 第一步 选中身份证那一列 第二步 右键选择 设置单元格格式 第三步 数字列中 选择 特殊 gt 邮政编码 点击确定
  • win7及以上系统C++实现Hook explorer文件级监控复制、剪切和删除操作

    最近项目组需要实现一个对windows用户文件操作进行监控的功能 也就是使用explorer资源管理器的操作 于是乎我就想到了使用Hook的方法进行拦截 查找一番资料后发现XP调用的是最简单的CopyFileEx MoveFileWithP
  • Java调用.exe文件

    package cn sos psasps public class TestExe public static void main String args Runtime runtime Runtime getRuntime test01
  • C# 文件操作之创建文件夹

    本文章主要是讲述C 中文件操作的基础知识 如何创建文件夹 创建文件 介绍Directory类 DirectoryInfo类和使用FolderBrowserDialog组件 文件夹对话框 文章属于基础知识 参考了书籍刘丽霞 C 范例开发大全
  • excel文件拷贝

    package cn sos until import java io File import java io FileInputStream import java io FileOutputStream import java io I
  • C语言文件操作收尾【随机读写 + 结束判定 + 文件缓冲区】

    全文目录 前言 fseek 重定位位置指示器函数 ftell 获取当前文件指示器的位置 rewind 重置位置指示器 文本文件和二进制文件 文件读取结束的判定 feof 和 ferror 文件缓冲区 总结 前言 有了文件的顺序读写基础 那么
  • C语言一行一行读取文件

    C语言中 使用fgets函数可以一行行读du取文件 1 fgets函数 原型 char fgets char buf int bufsize FILE stream 功能 从文件结构体指针stream中读取数据 每次读取一行 说明 读取的数
  • Nginx的X-Accel-Redirect实现大文件下载

    一 文件下载的几种方式 1 直接给出下载地址 使用静态文件服务器nginx下载 任何人都可以下载 无法控制用户的权限 2 后端流式读取文件内容 设置header后疯狂输出 django文档中提到 可以向HttpResponse传递一个迭代器

随机推荐

  • Vercel国内无法访问解决方案

    域名解析使用 cname vercel dns com 或 将 A 记录从 76 76 21 21 改成 76 223 126 88 官方建议将 cname 从 cname vercel dns com 修改为 cname china ve
  • python web页面增删改查_python web 增删改查教你快速入门

    1 导入需要的扩展和包from sqlalchemy import create engine Column Integer String from sqlalchemy ext declarative import declarative
  • 数据源 JNDI 作用

    数据源在JDBC中的应用简介众所周知 JDBC Java数据库连接 是Java 2企业版的重要组成部分 它是基于SQL层的API 通过把SQL语句嵌入JDBC接口的方法中 用户可以通过Java程序执行几乎所有的数据库操作 JDBC只提供了接
  • uni-app的Vue.js实现微信小程序的紧急事件登记页面功能

    主要功能实现 完成发生时间选择功能 用户可以通过日期选择器选择事件发生的时间 实现事件类型选择功能 用户可以通过下拉选择框选择事件的类型 添加子养殖场编号输入框 用户可以输入与事件相关的子养殖场编号 完成事件描述输入功能 用户可以通过文本输
  • 1、网易校招2016年《下厨房》

    题目描述 牛牛想尝试一些新的料理 每个料理需要一些不同的材料 问完成所有的料理需要准备多少种不同的材料 输入描述 每个输入包含 1 个测试用例 每个测试用例的第 i 行 表示完成第 i 件料理需要哪些材料 各个材料用空格隔开 输入只包含大写
  • 数据分析实战项目:SQL分析淘宝用户行为

    文章目录 一 项目背景及目的 1 1 项目背景 1 2 项目目的 1 3 数据集来源与介绍 二 数据导入 2 1 图形界面工具导入 2 2 以系统命令行导入 三 数据清洗 3 1 删除重复值 3 2 查看缺失值 3 3 时间格式转换 3 4
  • 赛宁网安有力保障淮安市网络安全技能竞赛决赛

    9月6日 由中共淮安市委网信办 淮安市总工会 淮安市人社局 淮安市教育局 淮安市公安局 共青团淮安市委共同主办 淮阴工学院协办 淮安市网络信息和数据安全协会 淮安市信息安全等级保护工作协调小组办公室承办 中国电信股份有限公司淮安分公司 中国
  • stm32 无刷电机控制板

    stm32f103c8t6 做主控 自制无刷电机 bldc 控制板 支持有感和无感两种模式 可通过硬件切换 内部包含原理图和源代码及照片 文件 url80 ctfile com f 25127180 745426979 e8e3fc p 5
  • Acesrc and Hunting【模拟 贪心】

    HDU 6660 题目链接 这道题主要就是讲我们从任意点出发 每次走的都是没走过并且 曼哈顿距离大于1小于3的点 然后问能不能覆盖完整幅图 这里就想到一个很经典的问题 4399小游戏除草游戏 以前玩过的一个小游戏倒是让我对这道题的解法有了方
  • 动手学数据分析 Task4

    动手学数据分析 Task4 一 可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图 二 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况 三 可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况 一 可视化展
  • Maven的基础知识

    Maven介绍 Maven 是一个项目管理和 综合工具 Maven 提供了开发人员构建一个完整的生命周期框架 开发团队可以自动完成项目的基础工具建设 Maven 使用标准的目录结构 和 默认构建生命周期 Maven是什么 它是一个 Apac
  • 各种绕过(MD5

    文章目录 MD5 0e开头的数组 MD5弱比较 MD5数组绕过 MD5 SQL注入 SHA1 SHA1弱比较 和 MD5弱类型比较同理 SHA1碰撞 MD5 0e开头的数组 MD5弱比较 QNKCDZO 240610708 byGcY so
  • 表设计为什么主键尽量无意义_奉上数据库表设计的十三条建议

    前言 本文总结了数据库表设计的十三条建议 这十三条建议只作为大家的参考 具体需要根据自己的项目来设计 来自 梦尘啊 链接 https juejin cn post 6902236691348586510 1 原始单据与实体之间的关系 表的设
  • Go:go mod vendor 使用

    Go go mod vendor 使用 1 背景 我们基于 go mod 机制来管理我们项目的依赖库版本 其中 go mod 记录了依赖库版本信息 一般第三方依赖库 包括公司内网gitlab上的依赖库 其源码都不被包含在我们的项目内部 而是
  • 5.自动装配:autowire=“byName“ or “byType“ + 使用注解【@Autowired 、@Qualifier、 @Resource】

    文章目录 自动装配说明 本博客环境搭建 自动装配 autowire byName 按名称自动装配 autowire byType 按类型自动装配 使用注解 1 Autowired 按类型自动转配的 不支持id匹配 2 Qualifier 不
  • hypertable管理当前rangserver和历史rangserver

    purge old log files void OperationRecoveryBlocker execute HT INFOF Entering RecoveryBlocker lld threadid d Lld header id
  • Docker安装

    镜像 Docker 镜像 Image 就是一个只读的模板 镜像可以用来创建 Docker 容器 一个镜像可以创建很多容器 它也相当于是一个root文件系统 比如官方镜像 centos 7 就包含了完整的一套 centos 7 最小系统的 r
  • ns2编程小技巧(转)

    1 tcl脚本传入一个int变量给c 代码在command解析里 int nodenum atoi argv 2 printf d nodenum 2 在nam中输出结果 Tcl instance evalf ns trace annota
  • Ubuntu下配置VScode及LeetCode,开始撸代码

    Ubuntu20 04下配置VScode及LeetCode 开始撸代码 一 配置VScode环境 1 软件下载 2 软件安装及启动 3 C 基础插件的安装 4 配置软件内部Debug 5 配置内部Debug工具时的异常 正常请跳过此步 6
  • JS获取本地图片和网络图片的宽高尺寸和存储大小

    最新更新时间 2020年07月08日09 13 28 猛戳 查看我的博客地图 总有你意想不到的惊喜 本文内容 图片作为一种记录信息的载体 比文本更加生动 比视频更加精简 在日常生活中的用处很大 作为前端开发人员 操作图片的场景非常多 本文记