Проблема декодирования Base64 с данными изображения-iphone

У меня возникла проблема с декодированием данных изображения из строки с кодировкой base 64. Я использую файлы base64.h и base 64.m, загруженные по следующей ссылке.

http://cdn.imthi.com/e6cef8/wp-content/uploads/2010/08/base64.zip

это мой код

[Base64 initialize];
NSData * data = [Base64 decode:imageString];
imgview.image=[UIImage imageWithData:data];

но ничего не отображается в представлении изображения,

Я тестировал, декодируя строку base 64 (взятую из консоли отладчика) с помощью онлайн-декодера base 64, он дает правильное изображение, я также тестировал, записывая данные в файл, подобный этому

[data writeToFile:imagePath atomically:YES];

он дает файл jpg, но я не могу открыть этот файл изображения, он выдает сообщение об ошибке, например

Не удалось открыть файл «test.jpg».

«Он может быть поврежден или использовать формат файла, который Preview не распознает». В чем проблема с моим кодом Может ли кто-нибудь мне помочь.....

Спасибо


person Johnykutty    schedule 01.12.2011    source источник
comment
Существует несколько вариантов кодировки Base64 — вы можете перепроверить, что у вас нет странного варианта ни в ваших данных, ни в той версии, которую вы скачали. Убедитесь, что вы получаете все данные. Распространенной ошибкой iOS является невозможность загрузить весь длинный поток данных — получить только первый буфер, пропустить последний буфер и т. д.   -  person Hot Licks    schedule 01.12.2011
comment
А макет JPG можно найти в сети — откройте полученный файл в hex-редакторе и прикиньте, правильно ли он выглядит. (Также сравните длину полученного файла с длиной исходного файла.)   -  person Hot Licks    schedule 01.12.2011
comment
Можете ли вы предоставить ссылку на правильно работающую кодировку base64   -  person Johnykutty    schedule 01.12.2011
comment
Проверьте статью в Википедии для получения информации о вариантах.   -  person Hot Licks    schedule 01.12.2011


Ответы (1)


Попробуйте другую реализацию base 64, я использую реализацию из проекта с открытым исходным кодом colloquy:


    #import "NSDataAdditions.h" 

    /* encoded string to image */
    NSString *imageString = @"";
    NSData * data = [NSData dataWithBase64EncodedString:imageString];
    UIImage *image1 = [UIImage imageWithData:data];

    /* image to encoded string, back to image */
    imageString = [UIImagePNGRepresentation(image) base64Encoding];
    data = [NSData dataWithBase64EncodedString:imageString];
    UIImage *image2 = [UIImage imageWithData:data];

Получите NSAdditions файла: NSAdditions.h + NSAdditions.m

person djromero    schedule 01.12.2011
comment
Извините, ребята, у меня была ошибка, данные были сжаты. Теперь я получил правильное изображение с помощью метода gzipInflate в NSDataAddissions. - person Johnykutty; 07.12.2011
comment
Это перевернуло мое изображение, я сделал снимок и поместил изображение в первый UIImageView, а затем закодировал, а затем декодировал изображение и поместил полученное изображение во второй UIImageView. - person zurbergram; 29.03.2013