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

160
Vistas
Aplicar un degradado a un icono en capas abiertas

En mi proyecto, originalmente usé CircleStyle para crear puntos en un mapa y luego usé fill: new Fill({ with CanvasGradient para diseñar el punto con dos colores.

Ahora quiero usar un ícono personalizado (por ejemplo, 'icon.png') en lugar de solo un punto de color para estos puntos.

Intenté usar image: new Icon para esto, que funciona para mostrar el ícono, pero no puedo aplicar un CanvasGradient a esto.

Puedo aplicar un solo color al ícono con color que se superpone al ícono con ese color con transparencia, idealmente lo querría con 2 colores; la mitad del icono es de un color y la mitad del icono es del otro color.

He subido una imagen que muestra cómo se ven mis puntos actualmente a continuación. punto circleStyle con 2 colores aplicados usando ColourGradient

La documentación sugiere que CanvasGradient no se puede aplicar a los íconos, por lo que mi pregunta es: ¿Cómo puedo aplicar dos colores/un degradado a un ícono en OpenLayers?

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

0

El estilo de icono de OpenLayers puede tomar un elemento de lienzo, así como una URL de icono. Por lo tanto, podría cargar la URL del icono, dibujarla en un lienzo, aplicar el degradado mediante una operación de multiplicación y, finalmente, utilizar una operación de destino para restaurar la transparencia:

 const img = document.createElement('img'); img.onload = function () { const width = img.width; const height = img.height; const canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; const context = canvas.getContext('2d'); const gradient = context.createLinearGradient(0, 0, width, 0); gradient.addColorStop(0, 'red'); gradient.addColorStop(0.5, 'red'); gradient.addColorStop(0.5, 'green'); gradient.addColorStop(1, 'green'); context.drawImage(img, 0, 0); context.globalCompositeOperation = 'multiply'; context.fillStyle = gradient; context.fillRect(0, 0, width, height); context.globalCompositeOperation = 'destination-in'; context.drawImage(img, 0, 0); feature.setStyle( new Style({ image: new Icon({ img: canvas, imgSize: [width, height], }) }) ); }; img.src = icon_url;

Ejemplo de trabajo https://codesandbox.io/s/icon-color-forked-4b1e1?file=/main.js

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