使用PowerShell将微软计算机视觉Get Thumbnail API返回值转为可用base64
问题解决方法
错误原因
- 你使用
Invoke-RestMethod默认会将二进制图像响应自动按照UTF8编码解码为字符串,后续再用[System.Text.Encoding]::UTF8.GetBytes()转换得到的字节已经不是原始的图像二进制数据,因此生成的base64字符串无效。 - 你之前填写的img标签data URI前缀为
data:image/gif;base64,,但该接口返回的是JPEG格式缩略图,前缀不匹配也会导致显示失败。
可行实现代码
PowerShell 7+ 版本(支持-AsByteStream参数)
$acs_req_headers = @{ "Ocp-Apim-Subscription-Key" = "...subscriptionkey..." } $acs_req_body = @{ url = "https://...url.../test/test.jpg" } | ConvertTo-Json # 直接获取接口返回的原始二进制字节 $imageBytes = Invoke-RestMethod 'https://...url...cognitiveservices.azure.com/vision/v3.2/generateThumbnail?width=100&height=100&smartCropping=true&model-version=latest' ` -Method 'POST' ` -Headers $acs_req_headers ` -Body $acs_req_body ` -ContentType 'application/json' ` -AsByteStream # 转换为base64字符串 $base64Str = [Convert]::ToBase64String($imageBytes) # 输出到本地文件 $base64Str | Out-File b64str.txt
PowerShell 5.1 版本(无-AsByteStream参数)
$acs_req_headers = @{ "Ocp-Apim-Subscription-Key" = "...subscriptionkey..." } $acs_req_body = @{ url = "https://...url.../test/test.jpg" } | ConvertTo-Json # 临时文件存储接口返回的缩略图 $tempPath = "$env:TEMP\thumb_temp.jpg" # 将接口返回的二进制内容直接写入临时文件 Invoke-WebRequest 'https://...url...cognitiveservices.azure.com/vision/v3.2/generateThumbnail?width=100&height=100&smartCropping=true&model-version=latest' ` -Method 'POST' ` -Headers $acs_req_headers ` -Body $acs_req_body ` -ContentType 'application/json' ` -OutFile $tempPath # 读取临时文件字节转base64 $imageBytes = Get-Content $tempPath -Encoding Byte $base64Str = [Convert]::ToBase64String($imageBytes) $base64Str | Out-File b64str.txt # 清理临时文件 Remove-Item $tempPath -Force
最终使用格式
生成base64字符串后,按照以下格式拼接即可在HTML中正常显示:
<img src="data:image/jpeg;base64,...base64string..." />
内容的提问来源于stack exchange,提问作者Key Va
相关产品推荐
相关产品推荐

