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

269
Views
¿Cómo puedo cambiar el tamaño de una imagen en Angular usando el lienzo?

Estoy tratando de cambiar el tamaño de un png que se recibe después de hacer clic en este botón:

 <input #FileInput id="fileControl" type="file" accept='image/*' (change)="addImage(FileInput.files, $event)">

Después de hacer clic en el botón, llama a addImage y recibe el archivo.

 async addImage(files: any, event: any) { var dbKey = this.selectedHour; var length = this.detailsArray(this.selectedHour).length; if (files.length === 0) return; var mimeType = files[0].type; if (mimeType.match(/image\/*/) == null) { this.message = 'Only images are supported.'; return; } var reader = new FileReader(); for (let j = 0; j < files.length; j++) { reader.readAsDataURL(files[j]); reader.onload = async (_event) => { var hour = this.selectedHour.slice(0, 4); var imgURL = reader.result; var resizedImage = ''; await this.resizeImage(imgURL).then((resolve: any) => { resizedImage = resolve; }); // keyparse works and give the right key let detailKey = this.keyParse(length.toString(), this.selectedHour.slice(0, 4)); let caption = ''; var theDict = { hour: hour, workHours: this.selectedHour, detailKey: detailKey, imgURL: resizedImage, caption: caption, }; let hour = dict.workHours; let theArray = this.detailsControl.controls[hour] as FormArray; theArray.push(this.fb.group(dict)); }; } ... }

Ahora puedo agregar la imagen al Grupo de formularios sin problemas, y mostrará la imagen, pero necesito cambiar su tamaño:

 resizeImage(imageURL: any): Promise<any> { return new Promise((resolve) => { var image = new Image(); var what = ''; image.onload = function () { var image = new Image(); var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); if (ctx != null) { ctx.drawImage(image, 0, 0, 640, 480); } image.src; var data = canvas.toDataURL('image/png', 0.5); what = data; console.log('data', data); }; image.src = imageURL; resolve(what); }); }

Desafortunadamente, este método me está dando un enlace roto en el elemento al que se dirige. La imagen no se muestra, a pesar de que console.log imprime una cadena base64 similar a la que funciona.

¿Puede alguien por favor ayudarme a averiguar qué está mal con esta cosa?

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

0

Hay varios problemas con su función resizeImage .

  1. Resuelve what antes de que la imagen se cargara y cambiara de tamaño. Devuelves una Promesa que se resolverá como '' .
  2. Su devolución de llamada onload tiene una segunda image . El lienzo dibujará esta imagen vacía en lugar de la cargada.
 resizeImage(imageURL: any): Promise<any> { return new Promise((resolve) => { var image = new Image(); image.onload = function () { var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); if (ctx != null) { ctx.drawImage(image, 0, 0, 640, 480); // <-- draw the right image! } var data = canvas.toDataURL('image/png', 0.5); resolve(data); // <-- call it here! }; image.src = imageURL; }); }
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!