JS - lấy chiều rộng và chiều cao hình ảnh từ mã base64


Câu trả lời:


147
var i = new Image(); 

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

i.src = imageData; 

thật tuyệt, phải mất nửa thời gian để kiểm tra kích thước, cảm ơn bạn rất nhiều!
khoa trương vào

6
quá tệ rằng đây là một quá trình không đồng bộ.
Coen Damen

1
@CoenDamen yep. Tôi cũng cần quy trình đồng bộ.
1,21 gigawatts

Bạn thật tuyệt vời
Valdrinium 15/02/17

12
Tôi cũng muốn nói thêm rằng thứ tự ở đây là rất quan trọng. Nếu bạn làm điều này theo cách khác (src trước khi tải lên), bạn có thể bỏ lỡ sự kiện. Xem: stackoverflow.com/a/2342181/4826740
maxshuty

34

Để sử dụng đồng bộ, chỉ cần gói nó thành một lời hứa như sau:

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

thì bạn có thể sử dụng await để lấy dữ liệu theo kiểu mã hóa đồng bộ:

var dimensions = await getImageDimensions(file)

1
Tuy nhiên, nó vẫn không đồng bộ. Chỉ sử dụng đường cú pháp.
gustavopch

'naturalWidth' và 'naturalHeight' có phải là lựa chọn tốt hơn không? stackoverflow.com/questions/28167137/…
Crashalot

6

Tôi thấy rằng sử dụng .naturalWidth.naturalHeightcó kết quả tốt nhất.

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

Điều này chỉ được hỗ trợ trong các trình duyệt hiện đại. http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/


2

Tạo một ẩn <img>với hình ảnh đó và sau đó sử dụng jquery .width () và. Chiều cao()

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

Kiểm tra ở đây: FIDDLE

Hình ảnh ban đầu không được tạo ẩn. nó được tạo, sau đó bạn nhận được chiều rộng và chiều cao rồi xóa nó. Điều này có thể gây ra khả năng hiển thị rất ngắn trong các hình ảnh lớn, trong trường hợp này, bạn phải bọc hình ảnh trong một vùng chứa khác và làm cho vùng chứa đó bị ẩn chứ không phải chính ảnh.


Một Fiddle khác không thêm vào dom theo anser của gp.: TẠI ĐÂY


var i = new Image (); i.src = imageData; setTimeout (function () {alert ("width:" + i.width + "height:" + i.height);}, 100);
gp.

đây chỉ là một bản sửa lỗi cần thiết vì bản chất của jsfiddle, bạn có thể thay đổi onLoad thành onDomReady để khắc phục sự cố chiều rộng và chiều cao 0 ban đầu đó. Mã giả sử bạn gọi hàm này ở đâu đó trong công việc của bạn nơi tài liệu đã được tải.
Desu

Đoán quan điểm của bạn là bạn không cần thêm bất cứ thứ gì vào dom để có chiều rộng và chiều cao. Sẽ sửa đổi câu trả lời để phản ánh đề xuất của bạn.
Desu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.