Power Automate 會將圖片內容以 Base64 編碼文字的形式回傳,內嵌於 JSON 回應、資料 URL 欄位以及附件屬性之中,而將該字串轉換為一個真實、可檢視檔案的最快方式,就是將它貼到 Base64 to Image Converter,這是一個瀏覽器工具,可將嚴格的 RFC 4648 Base64 或帶有明確 ;base64 標記的資料 URL,完全在您的本機分頁中解碼為經過驗證的 PNG、JPEG、GIF 或 WebP 圖片。該工具接受最多 8,000,000 個 UTF-16 字碼單位的輸入,拒絕產生任何大於 5,242,880 個解碼位元組(5 MiB)的輸出,並要求瀏覽器必須實際解碼這些位元組並回報正數尺寸,才會顯示預覽或提供下載。由於該轉換器並不信任所宣告的 MIME 類型,而是從檔案簽章偵測真實的格式,因此它也能處理 Power Automate 中常見的情況:HTTP 回應或連接器雖然標示為 image/jpeg,實際內容卻是 PNG、GIF 或 WebP 的位元組。在這個來回轉換的過程中,沒有任何資料會離開您的機器,這在圖片包含客戶資料、簽署文件,或任何您不會上傳到隨機網路服務的內容時,是非常重要的。

最後這一點,正是 Power Automate 使用者如此頻繁遇到此問題的實際原因。該平台以 Base64 的形式傳遞圖片資料,因為這種表示法是文字安全的、可透過 JSON 傳輸,並且能在每一個 HTTP 和 SMTP 的傳遞節點中存活下來而不會產生二進位損毀。代價是,作為檢視結果的人類,您無法看著一段 Base64 字串就能判斷其承載的到底是 4,000 像素寬的 PNG 還是 640 像素寬的 WebP。您需要的不只是一個能還原編碼的解碼器,還需要它能告訴您格式、尺寸和位元組大小,並在最後給您一個真正的檔案。

how to convert base64 to image in power automate
how to convert base64 to image in power automate

為何 Power Automate 以 Base64 的形式交給您圖片

幾乎每一個現代的 Microsoft 連接器,以及每一個會回傳圖片的 HTTP 動作,都是將二進位資料編碼為 Base64 字串來達成。SharePoint 的檔案內容、透過 Office 365 連接器擷取的 Outlook 訊息附件、HTTP 動作的回應主體、從 OpenAPI 定義所建置的自訂連接器,以及 Power Apps 元件架構的資料來源,全都匯聚成同一種形式:一個 JSON 欄位(例如 contentBytes、body、fileContent 或 data),其中包含一長串英數字混合的字串。該字串就是圖片本身,但您無法將它直接貼到 Word、附加到電子郵件,或用「相片」應用程式開啟。

Power Automate 原生的 base64ToBinary() 運算式只完成了一半的工作,它會將一個二進位 blob 回傳給您,但它並不會告訴您這些位元組構成的是 PNG、JPEG、GIF 還是 WebP,也無法給您一個可以拖曳到桌面上的檔案。最乾淨的偵錯路徑,是從執行歷程記錄中複製原始的 Base64 字串,將它貼到一個會檢查簽章的轉換器中,並在將該二進位資料接入下一個動作之前,先確認其真實的格式。

Power Automate Base64 可能呈現的兩種形式

Power Automate 的承載資料會以兩種形式出現,而轉換器兩者皆可處理。知道您手上的究竟是哪一種,能讓您免於盯著「格式錯誤的資料 URL」錯誤訊息發呆。

Power Automate 中的形式範例片段轉換器的處理方式
純 Base64iVBORw0KGgoAAAANSUhEUgAA...直接解碼,從位元組簽章推斷格式,並從該簽章選擇副檔名。
帶有 ;base64 的資料 URLdata:image/png;base64,iVBORw0KGgo...移除前置字串,驗證類型/子類型參數,要求必須有逗號和 ;base64 標記,然後解碼其餘部分。

嚴格的解析器僅接受標準的 RFC 4648 Base64。這意味著僅使用標準字母字元、長度可被四整除、填補字元僅能出現在結尾、未使用的填補位元為零。空白字元、換行、URL 安全的減號和底線字元,以及缺少的填補,全部都會導致失敗。Power Automate 的 base64() 和 base64ToString() 函式並不一定會產生標準的輸出,因此一段經過 Compose 動作往返的字串,可能會不知不覺地多了空白或少了填補。如果轉換器拒絕了輸入,那就是您該先在 Power Automate 中以 replace() 運算式清理該字串的提示,或者在您再花一小時追查流程之前,先使用 專屬的瀏覽器解碼逐步說明 做一次健全性檢查。

從 Power Automate 流程將 Base64 轉換為圖片

當 Power Automate 的一次執行給您一段 Base64 圖片,而您想要一個真實的檔案來開啟、附加,或交給同事檢閱時,請使用此程序。

  1. 在 Power Automate 的執行歷程記錄中,開啟失敗或您感興趣的動作,展開其輸出,並找出包含 Base64 字串的欄位。常見的索引鍵包括 body、contentBytes、$content 和 fileContent。
  2. 將該值複製到剪貼簿。如果該值被 JSON 引號包起來,則只有在您打算使用資料 URL 形式時才一併保留引號;否則,請僅複製英數字混合的承載內容本身。
  3. 在新的瀏覽器分頁中開啟 Base64 to Image Converter。整個轉換過程皆在本機執行,因此不會有任何資料被傳送到伺服器。
  4. 將 Base64 字串貼到輸入欄位。如果該字串已經以 data:image/... 開頭並包含 ;base64,,則解析器會將它視為資料 URL 來接受。如果該字串是沒有前置字串的純 Base64,那也完全沒問題。
  5. 點選 Convert to image 動作。解碼器會檢查字母、重算預期的輸出長度、解碼位元組,並依據 PNG、JPEG、GIF 或 WebP 規格執行結構性的預檢。
  6. 確認偵測到的格式、解碼後的尺寸、位元組大小以及預覽結果。如果預覽看起來不正確,表示原始承載中所宣告的 MIME 類型與實際的位元組並不相符,而轉換器向您顯示的是真實的格式,而非所宣稱的格式。
  7. 點選下載連結以儲存原始的解碼位元組。下載檔案的副檔名是根據經過驗證的檔案簽章所選擇,因此一段被宣告為 image/jpeg、實際上卻是 PNG 的承載,將會以 file.png 而非 file.jpg 的形式下載。

如果轉換過程失敗並顯示明確的錯誤訊息,該訊息會告知您是哪一條規則遭到違反。空白的輸入、違法的空白字元、格式錯誤的資料 URL、無效的字母或填補、超過位元組上限的解碼資料、無法辨識或結構上不完整的容器、無法由瀏覽器解碼的損壞圖片,以及過大的解碼尺寸,全部都會被回報為個別的錯誤類別。該工具絕不會默默地重寫輸入,因此失敗的發生會直接指向來源字串中的某個問題。

當宣告的 MIME 類型錯誤時會發生什麼

Power Automate 連接器對於它們所回傳的內容,並不總是準確的。一個宣稱正在傳送 image/jpeg 的連接器,可能會不小心送出了 PNG、GIF 或 WebP 的位元組,特別是在上游服務已經過重構,或自訂連接器自行進行編碼的情況下。以 .jpg 副檔名儲存那些位元組,將會產生一個在大部分檢視器中都無法開啟的檔案,並迫使您必須從一次全新的下載開始進行偵錯。

該轉換器將所宣告的 MIME 視為不可信任的中繼資料。它會從八位元組的 PNG 簽章、JPEG 的影像開頭標記、GIF87a 或 GIF89a 的標頭,或 RIFF/WEBP 容器來偵測真實的格式,並將此偵測結果同時用於預覽和下載的副檔名。所宣告的類型/子類型會被顯示出來,以便您能看出其中的不相符,但它永遠不會凌駕於實際的位元組之上。對 Power Automate 的使用者而言,這意味著僅僅一次貼上動作,就能在不撰寫任何檢查程式碼的情況下,解開「檔案無法開啟」的謎團。

需要留意的限制與邊界情況

在您貼上之前,先了解該轉換器所強制執行的精確邊界條件會有所幫助。下表彙整了您可以依賴的數值,以及各數值所依據的規格文件。

限制條件數值存在的原因
輸入大小(UTF-16 字碼單位)8,000,000限制解析器並避免失控的字串處理。
解碼位元組上限5,242,880(5 MiB)避免工具在瀏覽器分頁中配置巨大的陣列。
最大寬度或高度20,000 像素保護瀏覽器記憶體,因為編碼後的小檔案可能會展開成大尺寸的像素表面。
最大總像素面積40,000,000 像素針對極寬或極高的圖片提供相同的保護。
接受的格式PNG、JPEG、GIF、WebP針對這四種格式實作了結構性的預檢;其他所有格式會在一開始就被拒絕。

如果承載的內容大於解碼位元組上限,轉換器會在配置之前就拒絕它,而不是將其截斷,因此您永遠不會收到一個不完整的檔案。如果承載通過了位元組檢查,但解碼後的圖片在任何一個維度上都過大,該工具便會回報「過大的解碼尺寸」,而不是讓瀏覽器卡住。Power Automate 的使用者偶爾會因為螢幕擷圖、被轉為影像串流的掃描 PDF,或是長時間的大量高解析度相片而觸及位元組上限,此時最安全的做法是在重新編碼之前先壓縮來源。

一旦您取得了圖片檔案後該怎麼做

下載的檔案包含來自您 Base64 字串的精確解碼位元組,因此 PNG 會保留其 alpha 通道、JPEG 會保留其壓縮效果、動畫 GIF 會保留其影格,而 WebP 則會保留其透明度。瀏覽器預覽僅受到頁面布局上的限制;儲存的檔案並未透過畫布重新繪製,也不會被重新壓縮。這意味著該檔案忠實地呈現來源,但它並未經過最佳化,您可能會希望在分享之前先將其縮小。

若要獲得尺寸相同但容量較小的檔案,請將下載的圖片送入 Image Compressor,整個過程皆在本機完成。若需要不同的解析度,請使用 Image Resizer。如果您想檢查可能內嵌於 JPEG 中的 EXIF 或相機中繼資料,EXIF Viewer 能在不上傳該相片的情況下讀取這些欄位。如果原始的 Base64 字串是從相反的方向而來,也就是說您手上有一個檔案,而需要將其編碼回字串以用於 Power Automate 運算式,那麼對應的 Image to Base64 Converter 會以同樣的簽章式格式偵測來處理反向的轉換。

就大部分 Power Automate 的偵錯情境而言,這個循環都很短:從一次執行中複製 Base64、貼到轉換器、確認實際的格式,然後判斷究竟是您流程中的下一個動作需要調整,還是上游的 API 才是真正的問題所在。由於轉換是在本機進行的,您可以在不讓那些位元組離開裝置的情況下,對機密的螢幕擷圖、客戶上傳的圖片或簽署過的文件執行此操作。

延伸閱讀:How to Convert Base64 to Image in React JS