JS - 从base64代码中获取图片的宽高

Posted

技术标签:

【中文标题】JS - 从base64代码中获取图片的宽高【英文标题】:JS - get image width and height from the base64 code 【发布时间】:2013-07-20 10:35:41 【问题描述】:

我有一个 base64 img 编码,你可以找到 here。如何获取它的高度和宽度?

【问题讨论】:

这个问题的链接失效了 【参考方案1】:
var i = new Image(); 

i.onload = function()
 alert( i.width+", "+i.height );
;

i.src = imageData; 

【讨论】:

太棒了,检查尺寸需要一半时间,非常感谢! 太糟糕了,这是一个异步进程。 @CoenDamen 是的。我也需要同步过程。 你太棒了 我还要补充一点,这里的顺序非常重要。如果您以相反的方式执行此操作(在 onload 之前的 src),您可能会错过该事件。见:***.com/a/2342181/4826740【参考方案2】:

对于同步使用,只需将其包装成这样的承诺:

function getImageDimensions(file) 
  return new Promise (function (resolved, rejected) 
    var i = new Image()
    i.onload = function()
      resolved(w: i.width, h: i.height)
    ;
    i.src = file
  )

那么你可以使用await来获取同步编码风格的数据:

var dimensions = await getImageDimensions(file)

【讨论】:

它仍然是异步的。只是使用语法糖。 'naturalWidth' 和 'naturalHeight` 是更好的选择,不是吗? ***.com/questions/28167137/…【参考方案3】:

我发现使用.naturalWidth.naturalHeight 的效果最好。

const img = new Image();

img.src = 'https://via.placeholder.com/350x150';

img.onload = function() 
  const imgWidth = img.naturalWidth;
  const imgHeight = img.naturalHeight;

  console.log('imgWidth: ', imgWidth);
  console.log('imgHeight: ', imgHeight);
;

文档:

https://developer.mozilla.org/en-US/docs/Web/API/htmlImageElement/naturalWidth https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/naturalHeight

这仅在现代浏览器中受支持。 http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/

【讨论】:

没错,就是被object-fit调整大小之前的原图大小【参考方案4】:

使用该图像创建一个隐藏的<img>,然后使用 jquery .width() 和 .高度()

$("body").append("<img id='hiddenImage' src='"+imageData+"' />");
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert("width:"+width+" height:"+height);

在这里测试: FIDDLE

图像最初不是隐藏的。它被创建,然后你得到宽度和高度,然后将其删除。这可能会导致大图像的可见性非常短,在这种情况下,您必须将图像包装在另一个容器中,并使该容器而不是图像本身隐藏。


另一个没有按照 gp. 的分析器添加到 dom 的小提琴: HERE

【讨论】:

var i = new Image(); i.src = 图像数据; setTimeout(function() alert ( "width:"+ i.width+" height:" + i.height ); ,100); 由于 jsfiddle 的性质,这只是一个需要的修复,您可以将 onLoad 更改为 onDomReady 来修复初始的 0 宽度和高度问题。代码假定您在工作中已加载文档的某处调用此函数。 猜你的意思是,你不需要向 dom 添加任何东西来获得宽度和高度。将修改答案以反映您的建议。

以上是关于JS - 从base64代码中获取图片的宽高的主要内容,如果未能解决你的问题,请参考以下文章

获取图片的宽高

获取图片的宽高

js 获取file控件 选中图片的宽高

js 获取file控件 选中图片的宽高

js canvas获取图片base64 dataUrl

前端上传图片变成var