Vielleicht hilft das anderen. In meinem Fall habe ich eine File
Typ (das ist garantiert ein Bild sein) & Ich möchte das Bild Dimensionen ohne Laden es auf dem DOM.
Allgemeine Strategie: Konvertieren File
a ArrayBuffer
-> Konvertieren ArrayBuffer
in einen base64-String umwandeln -> diesen als Bildquelle mit einer Image
Klasse -> verwenden naturalHeight
& naturalWidth
um die Abmessungen zu erhalten.
const fr = new FileReader();
fr.readAsArrayBuffer(image); // image the the 'File' object
fr.onload = () => {
const arrayBuffer: ArrayBuffer = fr.result as ArrayBuffer;
// Convert to base64. String.fromCharCode can hit stack overflow error if you pass
// the entire arrayBuffer in, iteration gets around this
let binary = '';
const bytes = new Uint8Array(arrayBuffer);
bytes.forEach(b => binary += String.fromCharCode(b));
const base64Data = window.btoa(binary);
// Create image object. Note, a default width/height MUST be given to constructor (per
// the docs) or naturalWidth/Height will always return 0.
const imageObj = new Image(100, 100);
imageObj.src = `data:${image.type};base64,${base64Data}`;
imageObj.onload = () => {
console.log(imageObj.naturalWidth, imageObj.naturalHeight);
}
}
Dies ermöglicht es Ihnen, die Bildabmessungen und das Seitenverhältnis aus einer File
ohne sie wiederzugeben. Kann leicht die onload
Funktionen zu RxJS Observables mit fromEvent
für ein besseres asynchrones Erlebnis:
// fr is the file reader, this is the same as fr.onload = () => { ... }
fromEvent(fr, 'load')
18 Stimmen
Mit modernen Browsern ist das ganz einfach: davidwalsh.name/get-image-dimensions
5 Stimmen
Die meisten der folgenden Antworten beziehen sich nur auf die Breite und Höhe des Stils, nicht auf die tatsächliche Breite und Höhe des Bildes. verwenden
imgElement.naturalWidth
yimgElement.naturalHeight
um Breite und Höhe zu erhalten.