使用 PowerShell 将 Get Thumbnail API 转换为 base64(来自 Microsoft Computer Vision Get Thumbnail API)
converting Get Thumbnail API to base64 with PowerShell (from Microsoft Computer Vision Get Thumbnail API)
我正在尝试从 Microsoft Computer Vision Get Thumbnail API 获取缩略图,并将响应保存为 base64 编码字符串,可以在 html img 标签中使用,如下所示:
<img src="data:image/gif;base64,...base64string..."></img>
如果我从本地驱动器上的 test.jpeg 图像开始,我能够生成可用的 base64 字符串:
[convert]::ToBase64String((get-content 'c:\test\test.jpeg' -encoding byte)) >> b64str.txt
当我尝试使用从 REST API 返回的数据时,我没有得到可用的 base64 字符串(我 确实得到了一个字符串 但它不是 [= html img 标签中的 23=]可用:
$acs_req_headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$acs_req_headers.Add("Ocp-Apim-Subscription-Key", "...subscriptionkey...")
$acs_req_body = '{"url":"https://...url.../test/test.jpg"}'
[convert]::ToBase64String(([System.Text.Encoding]::UTF8.GetBytes((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')))) >> b64str.txt
我已经为此工作了几天,上面的内容与我得到的 看起来 接近的字符串一样接近。问题似乎是从 API 服务返回的格式以及随后转换为字节,然后是 base64string,但我不知道从哪里开始。
我尝试使用 Invoke-RestRequest
从 google 个图像中获取图像,但未能将其转换为有效的 base64 字符串。
但是,Invoke-WebRequest
我设法做到了,因为内容已经是字节格式了:
$req = Invoke-WebRequest -Method Get -Uri 'https://static.remove.bg/remove-bg-web/8fb1a6ef22fefc0b0866661b4c9b922515be4ae9/assets/start_remove-c851bdf8d3127a24e2d137a55b1b427378cd17385b01aec6e59d5d4b5f39d2ec.png'
$b64str = [convert]::ToBase64String($req.Content)
我从 here 那里看到 RestRequest
在幕后做了一些转换?也许这就是导致问题的原因。
Invoke-WebRequest
试一试。但不要将它用作 Invoke-RestRequest
,因为它 returns 一个 WebResponseObject
对象,其中包含一个 Content
属性 ,您的实际响应将在其中。
我正在尝试从 Microsoft Computer Vision Get Thumbnail API 获取缩略图,并将响应保存为 base64 编码字符串,可以在 html img 标签中使用,如下所示:
<img src="data:image/gif;base64,...base64string..."></img>
如果我从本地驱动器上的 test.jpeg 图像开始,我能够生成可用的 base64 字符串:
[convert]::ToBase64String((get-content 'c:\test\test.jpeg' -encoding byte)) >> b64str.txt
当我尝试使用从 REST API 返回的数据时,我没有得到可用的 base64 字符串(我 确实得到了一个字符串 但它不是 [= html img 标签中的 23=]可用:
$acs_req_headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$acs_req_headers.Add("Ocp-Apim-Subscription-Key", "...subscriptionkey...")
$acs_req_body = '{"url":"https://...url.../test/test.jpg"}'
[convert]::ToBase64String(([System.Text.Encoding]::UTF8.GetBytes((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')))) >> b64str.txt
我已经为此工作了几天,上面的内容与我得到的 看起来 接近的字符串一样接近。问题似乎是从 API 服务返回的格式以及随后转换为字节,然后是 base64string,但我不知道从哪里开始。
我尝试使用 Invoke-RestRequest
从 google 个图像中获取图像,但未能将其转换为有效的 base64 字符串。
但是,Invoke-WebRequest
我设法做到了,因为内容已经是字节格式了:
$req = Invoke-WebRequest -Method Get -Uri 'https://static.remove.bg/remove-bg-web/8fb1a6ef22fefc0b0866661b4c9b922515be4ae9/assets/start_remove-c851bdf8d3127a24e2d137a55b1b427378cd17385b01aec6e59d5d4b5f39d2ec.png'
$b64str = [convert]::ToBase64String($req.Content)
我从 here 那里看到 RestRequest
在幕后做了一些转换?也许这就是导致问题的原因。
Invoke-WebRequest
试一试。但不要将它用作 Invoke-RestRequest
,因为它 returns 一个 WebResponseObject
对象,其中包含一个 Content
属性 ,您的实际响应将在其中。