应用 openlayers 滤镜并在我将地图保存为图像时使其保持不变
P粉951914381
P粉951914381 2023-09-10 09:51:05
0
1
495

我制作了一张 openlayers 地图,上面有各种折线。我正在使用默认的 openstreetmap 图层,但想将其变暗以使我的折线脱颖而出。我发现我可以按如下方式执行此操作:

map.getLayers().getArray()[0].on('postcompose', function (evt) { evt.context.canvas.style.filter="invert(99%)"; });

但是,我还想让我的用户能够以 PNG 格式下载此地图。为此,我使用以下代码,通过单击按钮触发:

map.once('postcompose', function(event) { var canvas = event.context.canvas; if (navigator.msSaveBlob) { navigator.msSaveBlob(canvas.msToBlob(), 'mymap.png'); } else { canvas.toBlob(function(blob) { saveAs(blob, 'mymap.png') }); } }); map.renderSync();

不幸的是,这并没有保留我为调整画布所做的修改。

请问有人可以帮助我吗?感谢您的阅读。

P粉951914381
P粉951914381

全部回复 (1)
P粉252423906

在元素上设置样式过滤器不会影响toBlob()toDataURL()的输出。如果您想更改画布上下文而不是浏览器渲染画布的方式,您将需要一个 globalCompositeOperation (从您正在使用的代码来看,我假设您正在使用 OpenLayers 5):

map.getLayers().getArray()[0].on('postcompose', function (evt) { evt.context.globalCompositeOperation = 'difference'; evt.context.fillStyle = 'white'; evt.context.fillRect(0, 0, evt.context.canvas.width, evt.context.canvas.height); evt.context.globalCompositeOperation = 'source-over'; });
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!