我正试图从微软计算机视觉获取缩略图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
属性,您的实际响应将是。