im пытается отправить изображение в веб-сервис в php с помощью json, но клиент cnt читает изображение .. когда я верну его!
<?php //recieve the image $media = json_decode($_POST['media']); header('content-type: image/jpeg'); $image = imagecreatefromjpeg($media); imagefilter($image,IMG_FILTER_GRAYSCALE); imagefilter($image,IMG_FILTER_COLORIZE,100,50,0); imagejpeg($image, '', 90); imagedestroy($image); //return image $response = array( 'image' => $image ); echo json_encode($response); ?>
из кода, есть ли что-то, что я делаю неправильно? Благодаря!!! :))
Тип JSON MIME – application/json
, поэтому вы не можете отправить image/jpeg
.
Я думаю, что было бы проще отправить путь к изображению, и ваш JavaScript сделает запрос на изображение.
В противном случае я не уверен, как вы собираетесь воссоздать это на клиенте. Для URI с датой рекомендуется использовать кодировку base64, поэтому, если вы настаиваете на ее выполнении, пожалуйста, base64_encode()
назовите base64_encode()
.
$media = json_decode($_POST['media']);
Как именно вы отправляете свой образ на этот скрипт? Загрузка файлов в PHP помещается в массив $ _FILES, а не $ _POST. Если ваш клиентский скрипт не делает что-то напуганное, отправка файла с client-> php никогда не появится в _POST.
imagejpeg($image, '', 90);
Эта строка выводит изображение как .jpg содержимое сразу, не сохраняя его в файле. Затем вы делаете
echo json_encode($response);
который будет небольшим фрагментом данных JSON. Однако вы уже вывели двоичные данные изображения с помощью вызова imagejpeg()
, поэтому теперь вы добавляете мусор в отправляемый файл.
Кроме того, $image
– это не двоичные данные изображения. Это ручка в системе GD, которая является ресурсом. Выполнение json_encode на нем не даст вам json'd .jpg, это даст вам какой-то json'd PHP-объект.
Возможно, используйте imagedestroy () после создания и отправки ответа json вместо ранее
Я использовал этот подход для получения изображения с моего сервера: получение изображений с PHP-сервера на Android