如果您點擊運行代碼片段在this link,它顯示了一個很酷的用法<canvas>
您可以在其中「剪切」圖像的一部分(只需將圖像上的鼠標拖動到「剪切」)。我只是好奇,是否有任何方法可以將圖像的「剪切」部分保存爲透明的PNG(即畫布上白色的所有東西都是透明的)。如何將畫布顯示保存爲透明PNG?
如果有人能指出我正確的方向(或告訴我它不可行),我會很感激。
如果您點擊運行代碼片段在this link,它顯示了一個很酷的用法<canvas>
您可以在其中「剪切」圖像的一部分(只需將圖像上的鼠標拖動到「剪切」)。我只是好奇,是否有任何方法可以將圖像的「剪切」部分保存爲透明的PNG(即畫布上白色的所有東西都是透明的)。如何將畫布顯示保存爲透明PNG?
如果有人能指出我正確的方向(或告訴我它不可行),我會很感激。
是的,有一種方法。使用畫布context.getImageData
獲取圖像原始數據數組。用它(原始數據)處理你需要的東西(使你需要的任何像素透明),然後使用context.putImageData
在畫布上呈現數據。然後使用var data = canvas.toDataURL("image/png")
獲取圖像數據。然後你可以這樣做:image.src = data
; 使用此鏈接https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getImageData更多信息
這裏展示瞭如何裁剪&保存圖像的用戶拖動缺口快速瀏覽:
當用戶完成定義其切口區域:
context.globalCompositeOperation='source-in'
。只有當新繪製的像素與現有像素重疊並且其他所有東西都變得透明時,此模式纔會導致任何新圖形出現。通常情況下:新像素將被「剪切」到用戶定義的切口中,新的像素不會出現在切口外。結果是所述圖像的第二繪圖將只出現在用戶定義的切口內。其他一切都將是透明的。
最後,您可以使用var url=canvasElement.toDataURL
將裁剪後的畫布圖像保存到.png
dataURL中。如果你想從這個dataURL獲得一個實際的圖像,你可以var img=new Image()
並設置img.src=url
。