2016-08-02 58 views
-1

我想通過使用PHP上傳本地圖像到面部API,我使用示例代碼來調用API,並且它很好,當我使用JSON。但在更改爲八位字節流時​​會卡住。我通過引用「https://pear.php.net/manual/en/package.http.http-request2.request.php認知服務面對api使用本地圖像 - PHP

$image = "images/face-021.jpg"; 
$fp = fopen($image, 'r+'); 
$request->addUpload('stuff', $fp, 'custom.name', 'application/octet-stream'); 

使用下面的代碼,我得到下面的響應形成API。

stdClass Object 
(
[error] => stdClass Object 
    (
     [code] => InvalidImageSize 
     [message] => Image size is too small or too big. 
    ) 
) 

我在將二進制數據傳遞給api之前缺少一些步驟嗎?

所述的圖像尺寸只是956 KB和尺寸是2448 X 2448

+0

圖像過小或過大 – NDM

+0

這不是PHP相關。嘗試首先調整圖片的大小:https://secure.php.net/manual/en/intro.imagick.php – siannone

+0

通常閱讀您收到的錯誤消息是一種很好的做法... – walther

回答

1

面孔API不支持多部分MIME有效載荷。您應該直接在請求的正文中發送圖像。

$image = 'images/face-021.jpg'; 
$fp = fopen($image, 'rb'); 
$request->setBody($fp); 
$request->setHeader('Content-Type', 'application/octet-stream'); 
$request->setMethod(HTTP_Request2::METHOD_POST); 
+0

現在可以使用。真的很感謝你的幫助=) 我不知道API不支持多部分MIME有效載荷(也許我錯過了文檔上的東西),我雖然我必須按照「pear」上的函數通過使用addUpload() 。所以我堅持上傳部分。非常感謝 –

0
function microimg() { 
    //$GLOBALS['telegram']->ssendmessage($GLOBALS['userid'], $urlImage);  
    $request = new Http_Request2('https://westus.api.cognitive.microsoft.com/face/v1.0/detect'); 
    $url1 = $request->getUrl(); 

    $headers = array(`enter code here` 
     'Content-Type' => 'application/json', 
     'Ocp-Apim-Subscription-Key' => 'xxxxxxxxxxxxxxxxxx' 
    ); 

    $request->setHeader($headers); 

    $parameters = array(
    // Request parameters 
    'returnFaceId' => 'true', 
    'returnFaceLandmarks' => 'false', 
    'returnFaceAttributes' => 'age', 
    ); 

    $parameters = array(); 
    $url1->setQueryVariables($parameters); 
    $request->setMethod(HTTP_Request2::METHOD_POST); 

    //$request->setBody('{"url": "http://miladddddddddddddd.ml/fillter_image/photos/file_93.jpg" }'); 
    $request->setBody('{"url": "'.$GLOBALS['fileurl'].'" }'); 
    $err = $request->setBody; 
    try { 
     $response = $request->send(); 
     echo $response->getBody(); 
     $ed = $response->getBody(); 
     $GLOBALS['telegram']->ssendmessage($GLOBALS['userid'],$ed); 
     $GLOBALS['telegram']->ssendmessage($GLOBALS['userid'], $GLOBALS['fileurl']);  
    } catch (HttpException $ex) { 
     echo $ex; 
    } 
} 


microimg($urlimg); 
+1

對此答案的解釋很有用。 –

相關問題