套用 openlayers 濾鏡並在我將地圖儲存為影像時保持不變
P粉951914381
P粉951914381 2023-09-10 09:51:05
0
1
532

我製作了一張 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學習者快速成長!