Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
¿Cómo creo un objeto de imagen a partir de una etiqueta de entrada html y obtengo su ancho/alto?

Estoy construyendo un transmutador de proyección de mapas del lado del cliente. Debo pedirle al cliente que seleccione una imagen, cree un objeto de imagen, obtenga su tamaño, cambie el tamaño de un lienzo y pinte la imagen en el lienzo. Estoy atascado en el paso uno.

Una prioridad en este proyecto es la legibilidad para que otros archivistas puedan mejorarla. Tengo prohibido usar recursividad, autorreferencia, funciones que se llaman durante la creación, nombres de variables que son idénticos a clases de CUALQUIER tipo y funciones de flecha.

Esto debería funcionar. No es asi. No hay comentarios utilizables en la consola.

 function imagetocanvas(element) { let file = element.files[0]; let reader = new FileReader(); reader.onloadend = function() { const bob = reader.result; var inmap = new Image(); inmap.src = bob; alert(bob.width); // UNDEFINED?...WHY?? } reader.readAsDataURL(file); }
 <input type="file" accept="image/*" id="inputtag" onchange="imagetocanvas(inputtag)" > <canvas id="primary" width="" height="" >

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Creo que lo siguiente se ajusta a sus criterios restrictivos. Aborda ambas preocupaciones que se plantearon en los comentarios; ninguno de los cuales contradice al otro.

  1. Debe esperar a que se cargue la Image antes de intentar acceder a su width .
  2. Debe usar URL.createObjectURL en lugar de un FileReader si todo lo que está haciendo es mostrar el archivo. Consulte ¿Cómo trabajar con la URL de un objeto fileReader?

Incluso he agregado la representación de la imagen al lienzo. Consulte Cómo agregar una imagen al lienzo para obtener más información sobre ese proceso.

 const fileInput = document.getElementById('inputtag'); const currentImage = new Image(); const primaryCanvas = document.getElementById('primary'); const context = primaryCanvas.getContext('2d'); // Handle changes to the selected file. fileInput.addEventListener('change', function (changeEvent) { // Guard against invalid input (no files). if (!changeEvent?.target?.files?.length) return; // Read the file as a blob. const firstFile = changeEvent.target.files[0]; const fileUrl = URL.createObjectURL(firstFile); // Update the image. currentImage.src = fileUrl; }); // Wait for the image to load before accessing its // current width or drawing it to the canvas. currentImage.addEventListener('load', function () { console.log(currentImage.width); context.drawImage(currentImage, 0, 0); });
 <input type="file" accept="image/*" id="inputtag"> <canvas id="primary" width="" height="">

Utilicé el encadenamiento opcional ( ?. ) para verificar que la matriz de files existiera y tuviera al menos un elemento. Si no está autorizado a usarlo, una verificación equivalente sería:

 // Guard against invalid input (no files). if (!changeEvent || !changeEvent.target || !changeEvent.target.files || !changeEvent.target.files.length) { return; }

La verificación contra length sirve para verificar undefined , null y length == 0 porque todos son falsos . Este no es un concepto específico de JS, pero puede que no le resulte familiar según las características del lenguaje a las que esté acostumbrado.

Como referencia, aquí está la documentación de Blob y la documentación de URL.createObjectURL que juntas cubren cómo se leen los archivos en la memoria y cómo se accede a ellos.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!