Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

159
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda