Как преобразовать ответ https://graph.microsoft.com/v1.0/me/photo/$value с php в изображение

Я пытаюсь показать изображение Microsoft Graph на веб-сайте php. Я получаю изображение из графика, но оно не в правильном формате.

Результат похож на ����JFIF``��C и т. Д.

Проблема в том, что в результате я получаю изображение, а не json. Но я не могу отобразить изображение с помощью приведенного выше кода.

> HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: image/jpeg
ETag: "BB3972DD"
request-id: 1d3edddb-4278-43ac-be53-4a60861c7703
client-request-id: 1d3edddb-4278-43ac-be53-4a60861c7703
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"North Europe","Slice":"SliceA","Ring":"3","ScaleUnit":"002","Host":"AGSFE_IN_2","ADSiteName":"DUB"}}
Duration: 176.1934
Date: Wed, 28 Feb 2018 18:35:52 GMT
����JFIF``��C��C����"�� 
���}!1A

Благодаря помощи этого сообщества я смог решить свою проблему. Мой рабочий код:

$ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => 'https://graph.microsoft.com/v1.0/me/photo/%24value',
        CURLOPT_HEADER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => null,
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_HTTPHEADER => array(
            'authorization: Bearer '.ipDb()->selectValue('user','hash',array('id' => ipUser()->userId())),
            'content-type: image/jpeg; charset=utf-8'
        ) ,
    ));
    $response = curl_exec($ch);
    // Close the cURL resource, and free     system resources
    curl_close($ch);
    $returndata = 'photo <img src="data:image/jpeg;base64,' . base64_encode($response) . '"/>';
    return $returndata;

person Tim Vanden Hende    schedule 28.02.2018    source источник
comment
Спасибо за предложение, но я уже попробовал информацию по этой теме, прежде чем отправлять вопрос. Я обновил свой вопрос этой информацией.   -  person Tim Vanden Hende    schedule 28.02.2018
comment
Вы кодируете $? Кроме того, вам необходимо преобразовать двоичное изображение в base64, прежде чем вы сможете передать его в качестве URL-адреса данных (это также jpg, а не gif).   -  person Marc LaFleur    schedule 28.02.2018
comment
Я протестировал некоторые вещи и обновил свой вопрос. Проблема в том, что я получаю не json, а jpeg от конечной точки.   -  person Tim Vanden Hende    schedule 28.02.2018
comment
Этот запрос API не возвращает JSON - он возвращает jpeg по дизайну и в соответствии с заголовком HTTP Content-Type. См. developer.microsoft.com/en -us / graph / docs / api-reference / v1.0 / api /. Таким образом, ваш код должен ожидать возврата двоичных данных, а не JSON.   -  person Dan Kershaw - MSFT    schedule 01.03.2018
comment
Когда я перехожу на тип содержимого заголовка запроса: image / jpeg; charset = utf-8 'проблема все та же. Я все еще не могу преобразовать ответ на изображение в php. Не с и не без base64_encode моего ответа.   -  person Tim Vanden Hende    schedule 01.03.2018


Ответы (1)


Поскольку URL-адрес $ value возвращает двоичный файл изображения, строка

    $returndata = 'photo <img src="data:image/jpeg;base64,' . base64_encode($res1['@odata.context']) . '"/>';

не следует использовать $res1['@odata.context'], а напрямую $response.

Итак, base64_encode($response) должен быть последней частью тега img src.

person RasmusW    schedule 01.03.2018
comment
Спасибо! Работает. Мне также нужно было установить для CURLOPT_HEADER значение false. - person Tim Vanden Hende; 01.03.2018