Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

231
Vistas
cuando copie el elemento con la imagen de fondo y cree un archivo png a partir de él usando blob, obtenga una imagen incorrecta

problema almacenado en caché al copiar el elemento con la imagen de fondo y crear un archivo png a partir de él usando blob, obtener la imagen incorrecta

  1. Tengo un elemento div con una imagen de fondo:
  2. Creé un nuevo archivo png a partir de ese div.
  3. Cambié la imagen en el div (URL diferente), en el HTML todo se ve bien
  4. Convierta nuevamente este div a un archivo png
  5. Obtener la primera imagen de fondo en el archivo png

*) si actualizo la página y luego cambio la imagen de fondo del div y luego creo a partir de él el archivo png, funcionará...

 <div class="d-flex d-flex-1-1-auto" style="background-image: url("https://fe.io/webresources/image/show/img.png?path=dashboard/1679941/bb41d1d0-6e01-4c4d-b3bb-de3724122b1d.jpg";); background-repeat: no-repeat; background-size: contain; background-position: center center; margin-left: 0px; margin-top: 0px;">

Creé un nuevo contenedor div y le copié los datos.

 const container = this.dom.query(SCREENSHOT_CONTAINER_SELECTOR); const clonedDashboard = dashboard.cloneNode(true) as HTMLElement; this.dom.appendChild(container, clonedDashboard);

de lo que lo convierto en lienzo:

 canvas = (const options: html2ImageOptions = { width: element.scrollWidth, height: element.scrollHeight, ...html2ImageOptions, }; return htmlToImage[format](element, options);)();

y luego usando el lienzo y creando a partir de él un archivo png

 new Promise((resolve) => extraCanvas.toBlob(resolve, 'image/png')

luego el archivo de retorno de resolución (blob) y cuando llamo a

 const url = URL.createObjectURL(file); console.log(url);

La primera vez, veo ese png que muestra el div con la imagen correcta. después de eso (cuando no se actualiza) Y cambié la imagen de fondo para que sea otra imagen... Lo veo correctamente en la página, pero cuando abro el archivo png que se creó, veo que el png contiene un div con el imagen de fondo de la imagen anterior que se seleccionó

en HTML muestra la foto correcta. en el archivo png, muestra la primera foto seleccionada (probablemente se almacenó en caché en el archivo creado procesado, blob)

¿Cómo puedo resolverlo? Obtengo una imagen que representa el div con el fondo de la imagen anterior.

Después de una actualización, funciona bien, la nueva imagen se refleja como se esperaba en el archivo png

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El problema de almacenar en caché el resultado del blob está relacionado con la cadena de consulta en la URL.

Incluso la URL de la imagen de fondo era diferente entre sí, eran diferentes después de la cadena de consulta.

la solución fue cambiar la URL antes de la cadena de consulta y luego el blob no ve estas URL como iguales y no las toma del caché

 const queryString = '?'; const imageSelector = this.dom.query(this.imageWidgetSelector, widgetElement); const imageDivArr = imageSelector.getElementsByTagName('div'); if (imageDivArr.length > 0) { const backgroundImageDivURL = imageDivArr[0].style.backgroundImage; const backgroundImageDivURLParts = backgroundImageDivURL.split(queryString); const urlWithoutQueryString = `${backgroundImageDivURLParts[0]}${Date.now()}${index}`; const backgroundImageDivURLWithAdditionalInfo = `${urlWithoutQueryString}${queryString}${backgroundImageDivURLParts[1]}`; imageDivArr[0].style.backgroundImage = backgroundImageDivURLWithAdditionalInfo;
about 4 years ago · Juan Pablo Isaza Denunciar

0

Necesitas publicar más código.

¿Cómo estás cambiando la imagen sin actualizar? Y también, después de cambiar la imagen, ¿está clonando nuevamente el div y luego recreando el lienzo? O si solo cambia la imagen y nunca vuelve a clonar el div, entonces el lienzo está usando el div anterior.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda