Стоит задача: из приложения отправлять на сервер изображения. Все сделано "по науке", на сервере возникает ошибка: Warning: imagecreatefromstring() [function.imagecreatefromstring]: gd-jpeg: JPEG library reports unrecoverable error: in Реализация в андроид клиенте: Код (PHP): String query =""; Bitmap bitmap; //тут картинку подгружаю из галереи ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] imageBytes = baos.toByteArray(); String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); query=query+"&img="+encodedImage; //далее POSTом отправляю скрипту На сервере скрипт принимает так: Код (PHP): $_img = $_POST['img']; if($_img) { $imageData = base64_decode($_img); file_put_contents ('test2.txt',$imageData); $photo = imagecreatefromstring($imageData); // *тут возникает ошибка !!!! imagejpeg($photo,'my.jpg',100); } * Ошибка в указанной строке: Warning: imagecreatefromstring() [function.imagecreatefromstring]: gd-jpeg: JPEG library reports unrecoverable error: in Итак ругается, что не может из полученных данных собрать изображение. В ходе исследований выяснил следующее: 1)Данные, которые отправляет клиент в encodedImage в полном объеме прилетают в $_img, без искажений. 2)Если подвергнуть изображение на клиенте обратному преобразованию все нормально. Что не так? или готовый код как отправить с клиента и принять на сервере? Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Если цель сохранить пересланные данные, зачем ты вызываешь imagecreatefromstring ? Ты уже сохранил данные в файл, только не в тот ))) см. test2.txt
file_put_contents ('test2.txt',$imageData); Это лишнее.. Цель: принять от клиента изображение! Данные прилетают в $_img в виде текстовой строки, как будто их в php сделали следующим кодом: Код (PHP): $imagedata = file_get_contents("my.jpg"); $_img = base64_encode($imagedata);
ну и таки что? ты принял и сохранил. зачем тебе создавать образ картинки в памяти, затем сохранять ее еще раз с неизбежным, блин, перепожатием jpeg?! Добавлено спустя 1 минуту 36 секунд: IMHO, лишнее — всё, что после этого
так там картинка преобразованная в строку!!! при декодировании получается что-то другое! А с картинкой на сервере можно работать нормально, как с изображением. это же очевидно
ну что ты за человек! ))) а что ты (А) косячишь и (Б) пытаешся доказать что ты прав, это тебе не очевидно? попробуй как я тебе сказал, тебе понравится.
я не понимаю происходящего(( php 3 дня знаю( Добавлено спустя 2 минуты 1 секунду: я попробовал, переименовал test2.txt в test2.jpg - картинку не распознает
кошмар в том, что п.1 и п.2 верны п.2 в дебагере смотрел что отправляю, а в скрипте сохранял получаемое. по размеру и визуально равны. НЕ БРОСАЙ МЕНЯ! МНЕ КАЖЕТСЯ ТЫ МОЖЕШЬ ПОМОЧЬ я только не знаю чем
и где оно? файл test2.txt как раз и должен быть полной копией отправленного. попробуй не делать decode в php, может быть магия сработает
дело в Base64.encodeToString(imageBytes, Base64.DEFAULT) в клиенте. Она кодирует в строку таким образом, что ... при base64_encode($imagedata) получается что-то другое. Буду сидеть разбираться Спасибо друг за протянутую руку. Все, бросай меня. Дальше иди сам
Все брат, я ее победил. 1)Base64.encodeToString(imageBytes, Base64.DEFAULT) - с параметром по умолчанию добавляет переводы строк в результат 2)"+" был заменен на " ". Спасибо, что ты был рядом