iT邦幫忙

0

Blob.slice() 讀取圖片檔頭:切位元組不等於裁切或轉檔

  • 分享至 

  • xImage
  •  

Blob.slice() 取得的是檔案的一段位元組。它不會把圖片裁成較小尺寸,也不會重新編碼。讀取圖片檔頭時,應把結果當成待檢查的檔案片段。

例如 file.slice(0, 16) 會取得前 16 個位元組,結束位置 16 不包含在結果內。如果檔案不足 16 個位元組,結果只含實際存在的資料。接著可用 await header.arrayBuffer() 讀取這段資料,這裡的 header 就是剛取得的 Blob。

檔頭比對只能作為前置線索。符合某種檔案特徵,不代表整個圖片能成功解碼,也不代表檔案符合上傳限制。不要把通過短檔頭檢查直接當成解碼成功;完整解碼與伺服器檢查仍須各自處理。

slice() 的第三個參數 contentType 只是設定新 Blob 的 type。把它寫成 image/jpeg,不會把原始 HEIC 或 PNG 位元組轉成 JPEG。若要轉檔,需要真正的解碼及重新編碼步驟。

測試可以用已知內容的 Blob,分別檢查起點、終點及短檔案。例如四個位元組的資料取 slice(0, 2),結果應保留前兩個位元組。將位元組範圍與圖片格式判斷分開測試,避免兩種錯誤混在一起。

參考:https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言