Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> декодирование Base64 
V
    Опции темы
Paher
Дата 5.11.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 18.8.2009

Репутация: нет
Всего: нет



Добрый день, уважаемые! Помогите решить проблему.

Получаю строку $data, в которой в base64 закодирована jpg картинка. Пытаюсь декодировать и записать картинку в файл, однако в итоге картинка получается битая. с помощью просмоторщика видно, что она создается примерно на половину. код такой 

Код

    open(IMAGE, ">temp.jpg") or die;
    binmode(IMAGE);
    while (length($data)>0){
        my $sub = substr($data, 0, 57*60,'');
        my $dop = '';
        for (my $i=0; $i<4-length($sub)%4; $i++){
            $dop.="=";
        };

        if (length($dop)!=4){
            $sub.=$dop;
        }
               print IMAGE decode_base64($sub);
    }


перл выдает ошибку "Premature padding of base64". Где ошибка?
PM MAIL   Вверх
IceSunrise
Дата 5.11.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 7.4.2008
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Попробуйте воспользоваться модулем MIME::Decoder.

Код

use MIME::Decoder;

$decoder = new MIME::Decoder 'base64' or die "unsupported";
$decoder->encode(\*STDIN, \*STDOUT);


PM MAIL   Вверх
Paher
Дата 5.11.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 18.8.2009

Репутация: нет
Всего: нет



На сервере нет такого модуля, и я не имею возможности его поставить
PM MAIL   Вверх
shamber
Дата 5.11.2009, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Paher, поменять сервер не предлагать?
PM MAIL Jabber   Вверх
Paher
Дата 5.11.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 18.8.2009

Репутация: нет
Всего: нет



не предлагать. можно работать только с тем, что есть. а оно и не работает...

две особенности, которые заметил.

 во-первых, substr почему-то не хочет брать подстроку больше 1024 символов.

во-вторых, примерно на том же проценте, где режется картинка, процедура substr берет строку меньше обычной длины(похоже, дополняет до какого-то значения). т.е. идут строки по 1024, затем одна строчка  494, затем опять 1024 и последняя строчка в зависимости от общей длины

Это сообщение отредактировал(а) Paher - 5.11.2009, 15:00
PM MAIL   Вверх
amg
Дата 5.11.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Вообще странно. Если $data, в которой в base64 закодирована jpg картинка, закодирована правильно, то, вроде, должно работать просто
print IMAGE decode_base64($data);
без всякой проедварительной обработки.
PM MAIL   Вверх
Paher
Дата 5.11.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 18.8.2009

Репутация: нет
Всего: нет



вот по этому адресу

http://www.opennet.ru/man.shtml?topic=MIME...3&russian=3

написано про большие файлы. оттуда и обработку взял.

но, похоже, проблема в данных.  потому как при 

print IMAGE decode_base64($data);

результат то же
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2331 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.