За последние 24 часа нас посетили 17858 программистов и 1603 робота. Сейчас ищут 1732 программиста ...

Изображение от андроид клиента

Тема в разделе "Обработка изображений средствами PHP", создана пользователем geoboo, 3 мар 2015.

  1. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Стоит задача: из приложения отправлять на сервер изображения. Все сделано "по науке", на сервере возникает ошибка:
    Warning: imagecreatefromstring() [function.imagecreatefromstring]: gd-jpeg: JPEG library reports unrecoverable error: in

    Реализация в андроид клиенте:
    Код (PHP):
    1. String query ="";
    2. Bitmap bitmap;
    3. //тут картинку подгружаю из галереи
    4. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    5. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    6. byte[] imageBytes = baos.toByteArray();
    7. String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    8. query=query+"&img="+encodedImage;
    9. //далее POSTом отправляю скрипту
    10.  
    На сервере скрипт принимает так:
    Код (PHP):
    1. $_img        = $_POST['img'];
    2. if($_img)
    3. {
    4.   $imageData = base64_decode($_img);
    5.   file_put_contents ('test2.txt',$imageData);
    6.   $photo = imagecreatefromstring($imageData); // *тут возникает ошибка !!!!
    7.   imagejpeg($photo,'my.jpg',100); 
    8. } 
    * Ошибка в указанной строке: 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 и т. д.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Если цель сохранить пересланные данные, зачем ты вызываешь imagecreatefromstring ? Ты уже сохранил данные в файл, только не в тот ))) см. test2.txt
     
  3. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    file_put_contents ('test2.txt',$imageData);
    Это лишнее..
    Цель: принять от клиента изображение!
    Данные прилетают в $_img в виде текстовой строки, как будто их в php сделали следующим кодом:
    Код (PHP):
    1. $imagedata = file_get_contents("my.jpg");
    2. $_img = base64_encode($imagedata); 
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    ну и таки что? ты принял и сохранил. зачем тебе создавать образ картинки в памяти, затем сохранять ее еще раз с неизбежным, блин, перепожатием jpeg?!

    Добавлено спустя 1 минуту 36 секунд:
    IMHO, лишнее — всё, что после этого ;)
     
  5. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    так там картинка преобразованная в строку!!!
    при декодировании получается что-то другое!
    А с картинкой на сервере можно работать нормально, как с изображением. это же очевидно:)
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    ну что ты за человек! ))) а что ты (А) косячишь и (Б) пытаешся доказать что ты прав, это тебе не очевидно?
    попробуй как я тебе сказал, тебе понравится.
     
  7. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    я не понимаю происходящего:((( php 3 дня знаю:((

    Добавлено спустя 2 минуты 1 секунду:
    я попробовал, переименовал test2.txt в test2.jpg - картинку не распознает:(
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    значит вот это утверждение неверно:
     
  9. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    кошмар в том, что п.1 и п.2 верны:(
    п.2 в дебагере смотрел что отправляю, а в скрипте сохранял получаемое. по размеру и визуально равны.
    НЕ БРОСАЙ МЕНЯ! МНЕ КАЖЕТСЯ ТЫ МОЖЕШЬ ПОМОЧЬ:)
    я только не знаю чем:(
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    и где оно? файл test2.txt как раз и должен быть полной копией отправленного.

    попробуй не делать decode в php, может быть магия сработает
     
  11. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    дело в Base64.encodeToString(imageBytes, Base64.DEFAULT) в клиенте.
    Она кодирует в строку таким образом, что ... при base64_encode($imagedata) получается что-то другое.
    Буду сидеть разбираться:(
    Спасибо друг за протянутую руку. Все, бросай меня. Дальше иди сам:)
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
  13. geoboo

    geoboo Новичок

    С нами с:
    2 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Все брат, я ее победил.
    1)Base64.encodeToString(imageBytes, Base64.DEFAULT) - с параметром по умолчанию добавляет переводы строк в результат
    2)"+" был заменен на " ".
    Спасибо, что ты был рядом:)
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    я горжусь тобой!