這篇的重點,使用canvas優化照片大小與Blob VS DataURL
前端照片優化選項
- 縮小照片尺寸
- 降低畫質
- 檔案格式轉換:轉為 JPEG 或 WebP。JPEG 可能會有一些失真,但文件較小;WebP 品質更好,但只有 98% 的瀏覽器支持
縮小照片尺寸
使用
<canvas> 元素來等比例縮小照片。以下是一個簡單的 JavaScript 範例:降低畫質和檔案格式轉換
使用
toDataURL() 或 toBlob() 方法來降低畫質或轉換文件格式。toBlob
- 非同步操作:
toBlob是一個異步方法,它接受一個回調函數,該回調函數將在圖像數據準備好後被調用。
- 效能和內存使用:通常來說,
toBlob更為高效,因為它直接生成一個 Blob 對象,而不需要先將圖像數據轉換為 Base64 字符串。
- 檔案格式支持:它允許你選擇輸出的圖像格式,包括
image/png、image/jpeg和image/webp。
- 品質調整:你可以指定一個品質參數,這是一個介於 0 和 1 之間的數字,用於控制輸出圖像的品質。
toDataURL
- 同步操作:
toDataURL是一個同步方法,會立即返回一個包含圖像數據的 Base64 編碼的 URL 字符串。
- 效能和內存使用:生成 Base64 字符串可能會增加內存使用量和CPU負擔。
- 檔案格式支持:通常僅支持
image/png和image/jpeg。
- 品質調整:也可以指定一個品質參數。
總結,
toBlob 通常在處理大文件或需要更多格式支持時更為高效,而 toDataURL 則提供了一種更簡單但可能較低效的方式來獲取圖像數據。選擇哪一個取決於你的具體需求和應用場景。- Data URL: 通常以
"data:"開頭,例如data:image/png;base64,...,可以表示檔案數據
- Blob URL: 通常以
"blob:"開頭,例如blob:http://...
讀取file:
使用
FileReader 的 readAsDataURL() 方法會讓 reader.result 包含一個表示檔案數據的 Data URL。這個 Data URL 是一個 base64 編碼的字符串,您可以直接將它用於圖像預覽或其他用途。當
reader.onloadend 事件觸發後,reader.result 就會包含這個 Data URL。您可以確信 reader.result 這時是一個 Data URL,不是 Blob URL
.png?table=block&id=67b7b83b-663b-4eab-9ce9-9ca10e60bf70&cache=v2)
