使用PowerShell将Get Thumbnail API转换为base64(来自Microsoft Computer



我正试图从微软计算机视觉获取缩略图API获取缩略图图像,并将响应保存为base64编码的字符串,可以在html img标签中使用,如:

<img src="data:image/gif;base64,...base64string..."></img>

如果我从本地驱动器上的test.jpeg图像开始,我就能够生成一个可用的base64string:

[convert]::ToBase64String((get-content 'c:testtest.jpeg' -encoding byte)) >> b64str.txt

当我尝试从REST API返回的数据时,我没有得到一个可用的base64string(我得到一个字符串,但它不是可用在html img标签):

$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获得图像,我没有设法将其转换为有效的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)

我从这里看到RestRequest在引擎盖下做一些转换?也许这就是问题的原因。

Invoke-WebRequest注射。但是不要使用它作为Invoke-RestRequest,因为它返回一个WebResponseObject对象,其中包含一个Content属性,您的实际响应将是。

最新更新