JS - รับความกว้างและความสูงของภาพจากรหัส base64


คำตอบ:


152
var i = new Image(); 

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

i.src = imageData; 

1
ยอดเยี่ยมมากใช้เวลาตรวจสอบขนาดครึ่งหนึ่งขอบคุณมาก!
ระเบิด

9
แย่เกินไปที่นี่เป็นกระบวนการแบบอะซิงโครนัส
Coen Damen

2
@CoenDamen ครับ ฉันต้องการกระบวนการซิงโครนัสเช่นกัน
1.21 กิกะวัตต์

คุณยอดเยี่ยมมาก
Valdrinium

13
ฉันขอเพิ่มด้วยว่าคำสั่งซื้อที่นี่มีความสำคัญมาก หากคุณทำในทางกลับกัน (src ก่อน onload) คุณอาจพลาดกิจกรรมนี้ ดู: stackoverflow.com/a/2342181/4826740
maxshuty

34

สำหรับการใช้งานแบบซิงโครนัสเพียงแค่รวมไว้ในสัญญาเช่นนี้:

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
  })
}

จากนั้นคุณสามารถใช้การรอเพื่อรับข้อมูลในรูปแบบการเข้ารหัสแบบซิงโครนัส:

var dimensions = await getImageDimensions(file)

1
แม้ว่าจะยังไม่ตรงกัน เพียงแค่ใช้น้ำตาลซินแทติก
gustavopch

'naturalWidth' และ 'naturalHeight' เป็นตัวเลือกที่ดีกว่าไม่ใช่หรือ? stackoverflow.com/questions/28167137/…
Crashalot

11

ฉันพบว่าใช้.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);
};

เอกสาร:

รองรับเฉพาะในเบราว์เซอร์สมัยใหม่เท่านั้น http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/


2

สร้างซ่อน<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

ภาพไม่ได้ถูกสร้างขึ้นในตอนแรกถูกซ่อนไว้ มันถูกสร้างขึ้นจากนั้นคุณจะได้รับความกว้างและความสูงจากนั้นจึงลบออก ซึ่งอาจทำให้การมองเห็นสั้นมากในรูปภาพขนาดใหญ่ในกรณีนี้คุณต้องห่อรูปภาพไว้ในคอนเทนเนอร์อื่นและทำให้คอนเทนเนอร์นั้นซ่อนไม่ใช่รูปภาพนั้นเอง


Fiddle อื่นที่ไม่ได้เพิ่มลงใน dom ตามคำตอบของ gp: ที่ นี่


var i = รูปภาพใหม่ (); i.src = imageData; setTimeout (ฟังก์ชัน () {alert ("width:" + i.width + "height:" + i.height);}, 100);
gp.

นี่เป็นเพียงการแก้ไขที่จำเป็นเนื่องจากลักษณะของ jsfiddle คุณสามารถเปลี่ยน onLoad เป็น onDomReady แทนเพื่อแก้ไขปัญหาความกว้างและความสูง 0 เริ่มต้น Code จะถือว่าคุณเรียกใช้ฟังก์ชันนี้ที่ใดที่หนึ่งในงานของคุณซึ่งมีการโหลดเอกสารอยู่แล้ว
Desu

เดาประเด็นของคุณคือคุณไม่จำเป็นต้องเพิ่มอะไรใน dom เพื่อให้ได้ความกว้างและความสูง จะแก้ไขคำตอบเพื่อให้สอดคล้องกับข้อเสนอแนะของคุณ
Desu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.