如圖
這張是網頁上的畫面
我用css把canvas變成圓的
雖然在網頁上不會顯示
下面這張是我存起來的圖片
我把canvas變成圖片存起來後
會存成完整的正方形canvas
而不是我想要的圓形圖片
請問我該怎麼把canvas存成圓形圖片?
以下是程式碼
const canvas = new fabric.Canvas('canvas', {
width: 650,
height: 650,
})
// 下載圖片到後端
function dlimg() {
// 建立 file
const dataURL = canvas.toDataURL('image/png')
const blobBin = atob(dataURL.split(',')[1])
const array = []
for (let i = 0; i < blobBin.length; i++) {
array.push(blobBin.charCodeAt(i))
}
const file = new Blob([new Uint8Array(array)], {type: 'image/png'})
console.log(file)
// 將file 加至 formData
let formData = new FormData()
formData.append('file', file, 'test.png');
console.log(formData)
formData.append('_token', '{{ csrf_token() }}');
//real ajax
jQuery.ajax({
url: '{{route('test3222.upload')}}',
type: "POST",
dataType: "html",
contentType:false,
processData:false,
data: formData,
success: function (response) {
console.log('success!');
}
});
}
因為你的Canvas圓形和圓形邊框是由CSS產生的,圓形邊框並不屬於Canvas
你可以產生一個Canvas,並在Canvas繪製等寬與等高的圓,接著在裡面繪製圖片
下載時取得這個Canvas就會包含圓型及所有文字和圖片
範例:
https://jsfiddle.net/gdt6aey2/
要注意的是
這個範例程式碼的下載功能,由於CORS的因素,在JS Fiddle上是無法作用
繪製在圓型的圖片檔來源,請使用自己伺服器環境上的圖片
若使用跨域的圖片,請加上 image.crossOrigin = 'Anonymous'