前端如何获取原始图片大小

前言

  平常我们不太会关注图片流,都是拿来主义。

  浏览器加载,图片显示在一个容器里面,展示给用户。

  在网上冲浪了一会儿,发现完整的文章甚少,还是浪花太大蒙住了我的眼睛

需求

  我想要知道图片原始尺寸,(而不是通过css设置 图片百分比显示 这是另外一种情况)

  我需要把图片的原始尺寸保存起来。需要在上传本地图片的时候我们会接触到图片的原始尺寸大小

正文

  首先了解 new Image() 创建一个图片示例
  Image是一个浏览器的原生构造函数,返回一个HTMLImageElement对象的实例,即<img>标签的实例。

var myImage = new Image(100, 100);
myImage.src = ‘demo.jpg‘;
document.body.appendChild(myImage);

 这段代码相当于,在body中新增了(比较常用)

<img width="100" height="100" src="demo.jpg">

是时候展示他真正的技术了

Image 属性(我实在是太懒了,直接从MDN 截图下来)

   属性是有一大堆的,不可能一个一个的使用演示。

   回归正题,获取原始图片大小,主要用以下属性

  1. width
  2. height
  3. complete
  4. onerror
  5. onload
  6. src
  7. crossorign

实例

  用代码效果来说话,学以致用

  

//获取原始图片大小,用图片流
    handleChangeUIImg(val){
      var that = this
      var imgReady = (function () {
      var list = [], intervalId = null,
      // 用来执行队列
      tick = function () {
        for (var i = 0; i < list.length; i++) {
        list[i].end ? list.splice(i--, 1) : list[i]();
        };
        !list.length && stop();
      },
      // 停止所有定时器队列
      stop = function () {
        clearInterval(intervalId);
        intervalId = null;
      };
      return function (url, ready, load, error) {
        var onready, width, height, newWidth, newHeight,
        img = new Image();
        img.crossOrigin = ‘‘    //!允许图片跨域,很关键
        img.src = url;
        // 如果图片被缓存,则直接返回缓存数据
        if (img.complete) {
          ready.call(img);
          load && load.call(img);
          return;
        };
        width = img.width;
        height = img.height;
        // 加载错误后的事件
        img.onerror = function () {
          error && error.call(img);
          onready.end = true;
          img = img.onload = img.onerror = null;
        };
        // 图片尺寸就绪
        onready = function () {
          newWidth = img.width;
          newHeight = img.height;
          if (newWidth !== width || newHeight !== height ||newWidth * newHeight > 1024) {
          // 如果图片已经在其他地方加载可使用面积检测
            ready.call(img);
            onready.end = true;
          };
          if(newWidth !== 0 && newHeight !== 0){
            that.getImageColor(img)
          }
        };
        onready();
        // 完全加载完毕的事件
        img.onload = function () {
          // onload在定时器时间差范围内可能比onready快
          // 这里进行检查并保证onready优先执行
          !onready.end && onready();
          load && load.call(img);
          // IE gif动画会循环执行onload,置空onload即可
          img = img.onload = img.onerror = null;
        };
        // 加入队列中定期执行
        if (!onready.end) {
          list.push(onready);
          // 无论何时只允许出现一个定时器,减少浏览器性能损耗
          if (intervalId === null) intervalId = setInterval(tick, 40);
        };
      };
    })();

Fannie式总结

  亲测实例是可以获取到图片的原始大小的

  可能格式不太对,因为是有删除其他的数据。

  有时间再整理一下

 

原文地址:https://www.cnblogs.com/ifannie/p/11848031.html

时间: 2024-12-14 03:24:10

前端如何获取原始图片大小的相关文章

关于前端使用JavaScript获取base64图片大小的方法

base64原理 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'=' 如何获取base64图片大小 通过base64编码原理我们知道,base64的图片字符流中的每8个字符就有两个是用0补充,而且字符流的末尾还可能存在'='号,我们可以通过这个原理计算图片的文件流大小. getImgByteSize(da

点击图片放大至原始图片大小

有些时候为了排版的整洁,页面展示的图片不得不都是限定宽高的,如果想要点击图片放大至原始大小进行预览,再次点击回到原来样子,就要用到下面的代码了: var _w = parseInt($(window).width());//获取浏览器的宽度 $("#abc img").each(function(i){     var img = this;     var realWidth;//真实的宽度     var realHeight;//真实的高度     $("<img

MFC获取鼠标图片大小

获取当前鼠标图片的过程: 1. 首先获取当前HRCURSOR GetCursor() 2. 然后查询HCURSOR信息,获取对应的HBITMAP信息 GetIconInfo() 3. 查询HBITMAP的BITMAP信息 GetBitmap() HCURSOR hCursor = GetCursor(); if (hCursor) { ICONINFO cursorInfo; GetIconInfo(hCursor, &cursorInfo); CBitmap* pBmp = CBitmap::

获取imageview 图片大小

如题,ImageView在显示图片的时候,受限于屏幕大小,和图片宽高.通常图片是被缩放过,且不是宽和高都充满ImageView的. 此时,我们如何获得Image被实际绘制的宽高呢?如下: [java] view plaincopy final ImageView iv = (ImageView) findViewById(R.id.iv_test); iv.setImageResource(R.drawable.abc); //等待ImageVivew加载完成 iv.post(new Runna

java 获取图片大小(尺寸)

1,获取本地图片大小(尺寸) File picture=new File(strSrc);BufferedImage sourceImg=ImageIO.read(new FileInputStream(picture)); sourceImg.getWidth(); sourceImg.getHeight(); 2,获取网络图片大小(尺寸) BufferedImage sourceImg=ImageIO.read(new URL(strSrc).openStream()); sourceImg

UIImagePickerController(获取相册图片,打开相机)

UIImagePickerController的使用一定要在controller中,因为需要弹出控制器,如果不是在controller中,则可以通过响应者链查找获得controller,也可以通过代理方法回调 //本文查看地址http://write.blog.csdn.net/postedit - (IBAction)pickPhotoLibrary:(id)sender { if (_imagePicker == nil) { _imagePicker = [[UIImagePickerCo

android获取拍照图片、本地图片简单实现!

在安卓应用开发中经常会用到调用系统相机拍照跟获取本地图片功能,下面就是对这一常用功能的简单实现Demo! 在获取拍照图片功能中要加上这两权限. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> 布局文件 1 <Re

如何用JavaScript在浏览器端获取图片的原始尺寸大小?

var img = $("#img_id"); // Get my img elem var pic_real_width, pic_real_height; $("<img/>") // Make in memory copy of image to avoid css issues .attr("src", $(img).attr("src")) .load(function() { pic_real_widt

WEB端获取远程图片的尺寸和大小

一直以来我都以为前端只能读取图片的宽度和高度,以及本地上传图片的大小(通过FileReader),但不能获取到远程图片的大小. 昨天在搜索时突然意识到,http headers中包含Content-Length参数,这不就是大小吗?!然后立马在console输入$.get(src, function(data, statusText, res){res.getAllResponseHeaders()}),这不就搞定了嘛! 但是我高兴太早了 把这个放在代码里,愣是不显示Content-Length