ios — невозможно обработать base64 с iphone в стеке переполнения

Я использую методы base_64 для отправки файлов с устройств Android и iPhone на сервер php.

PHP-код, который я использую для преобразования base64 в виде файла:

file_put_contents($filename, base64_decode($data));

Файл из Android работает нормально, и файл из iphone в поврежденном состоянии.

Когда мы сравниваем строку в кодировке base64 для конкретного файла с обоих устройств, она возвращает разные выходные данные, и строка из iphone намного меньше, чем из Android.

Это проблема? Если да, то как ее решить?

Ниже приведены строки base64 из обоих:

База 64 от андроида:

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

База 64 от iphone:

iVBORw0KGgoAAAANSUhEUgAAAAoAAAANCAYAAACQN/8FAAAAHGlET1QAAAACAAAAAAAAAAcAAAAoAAAABwAAAAYAAAFEmBTn/wAAARBJREFUKBUUzD1Lw0AAh/H7In4AcRQcBHFydXJ1FRdnd8FBCkIRJ7FTKZRaNKCgRWPSgk2rvWuS5u3yfpeL5FP8rcOz/XiI6/ODkGeMJ4Uqiko2TSPrSskoLqQXJMoLU/ZviONG0zVEmpZQlcJkVcOwBbI0h+9zLO1gnT8llK1sP+DI8xKn/Rr7t7/Yvalx0pMIQ46fhQNrTh0ym1OWhAE6psBmq0acSThcYuOyRkfPsKQUhmkxYk4sFnsuzvoCx10FkUYQSYTDuwrngwx0ZuH1TWdk9G4we/GNCy3FTluhTELEUYCtlsKV5mOs63h4fGbkSXthum7g84ti+1ri6F6sbwJ77RyjjzGGQw3d3oD9AQAA//9PvKCmAAAAyUlEQVRjWLJs1fn1G7b8371r9/+dB078b1596X/NktP/N2zd/X/VqtX/58xb/H/23EWXGebMXXRx9eoN/9dv2Pp/x/ad/w/t2/d/x5bN/5csXfF/7vwl/2fMmv9/0pSZ0ximTp9zvLSs6r+7h9chNw/vrR6e3vs9PL0OuLp5HHFycV+bmJyW0te3ipOhvbO/3snZ7T8DA0MQEIsBsREQOwFxIBDrADEElJd38Ds7u8zl4eEBSSIDRiAHhBHA3t4pUlhY2AUhgskCAHZCN1W9mev8AAAAAElFTkSuQmCC

-1

Решение

Я декодировал обе строки Base64 и сохранил результаты в виде файлов .png, ниже приведены результаты:

Примечание 1: Быстрое оперативное декодирование начальных байтов показало, что данные были файлами PNG.
Примечание 2: я использую термины больше и меньше, потому что кажется, что строки Base64 неправильно помечены.

Декодированное изображение из «Base 64 от iPhone» — это изображение: введите описание изображения здесь с размером файла 528 байт.

Декодированное изображение из «Base 64 от android» — это изображение: введите описание изображения здесь с размером файла 3191 байт.

Таким образом, они оба являются действительными представлениями Base64 одного и того же изображения, но из разных файлов. Файл большего размера содержит больше информации EXIF.

Примечание 3: Вы должны удалить всю информацию, не относящуюся к изображениям, из файлов изображений, используемых в приложениях, чтобы сэкономить место.

EXIF из меньшего файла:
—- ExifTool —-
Номер версии ExifTool:
9,70
—- система —-
Имя файла:
a.png
Справочник:
/ Users / дан / Desktop
Размер файла:
582 байта
Дата / время изменения файла:
2014: 10: 21 11: 23: 17-04: 00
Дата и время доступа к файлу:
2014: 10: 21 11: 31: 55-04: 00
Дата / время изменения файлового индекса:
2014: 10: 21 11: 23: 28-04: 00
Разрешения файла:
RW-р — r—
—- Файл —-
Тип файла:
PNG
MIME Тип:
Изображение / PNG
—- PNG —-
Ширина изображения:
10
Высота изображения:
13
Битовая глубина:
8
Тип цвета:
RGB с альфа
Сжатие:
Выпустите / Inflate
Фильтр:
адаптивный
Чересстрочная:
Прогрессивная
—- композитный —-
Размер изображения:
10×13

Информация EXIF ​​из файла большего размера:
—- ExifTool —-
Номер версии ExifTool:
9,70
—- система —-
Имя файла:
b.png
Справочник:
/ Users / дан / Desktop
Размер файла:
3,1 кБ
Дата / время изменения файла:
2014: 10: 21 11: 26: 22-04: 00
Дата и время доступа к файлу:
2014: 10: 21 11: 31: 55-04: 00
Дата / время изменения файлового индекса:
2014: 10: 21 11: 26: 22-04: 00
Разрешения файла:
RW-р — r—
—- Файл —-
Тип файла:
PNG
MIME Тип:
Изображение / PNG
—- PNG —-
Ширина изображения:
10
Высота изображения:
13
Битовая глубина:
8
Тип цвета:
RGB с альфа
Сжатие:
Выпустите / Inflate
Фильтр:
адаптивный
Чересстрочная:
Прогрессивная
Имя профиля:
Профиль Photoshop ICC
Белая точка X:
0,31269
Белая точка Y:
0,32899
Красный X:
0,63999
Красный Y:
0,33001
Зеленый Х:
0,3
Зеленый Y:
0.6
Синий х:
0,15
Синий Y:
0,05999
—- PNG-pHYs —-
Пикселей на единицу X:
2835
Пикселей на единицу Y:
2835
Пиксельные единицы:
метры
—- ICC-заголовок —-
Профиль CMM Тип:
линотип
Версия профиля:
2.1.0
Класс профиля:
Профиль устройства отображения
Данные цветового пространства:
RGB
Пространство подключения профиля:
XYZ
Дата профиля Время:
1998: 02: 09 06:49:00
Подпись файла профиля:
АСУП
Основная платформа:
Корпорация Майкрософт
Флаги CMM:
Не встроенный, независимый
Производитель устройства:
IEC
Модель устройства:
SRGB
Атрибуты устройства:
Светоотражающий, глянцевый, позитивный, цветной
Рендеринг Намерения:
Медиа-относительный колориметрический
Освещение пространства подключения:
0,9642 1 0,82491
Создатель профиля:
HP
ID профиля:
0
—- ICC_Profile —-
Авторское право профиля:
Copyright (c) 1998 Компания Hewlett-Packard
Описание профиля:
sRGB IEC61966-2.1
Media White Point:
0,95045 1 1,08905
Media Black Point:
0 0 0
Красная матричная колонка:
0,43607 0,22249 0,01392
Зеленая матрица столбца:
0,38515 0,71687 0,09708
Синяя матрица столбца:
0,14307 0,06061 0,7141
Устройство Mfg Desc:
IEC http://www.iec.ch
Модель устройства Desc:
МЭК 61966-2.1 Стандартное цветовое пространство RGB — sRGB
Просмотр Cond Desc:
Условие просмотра ссылки в IEC61966-2.1
Luminance:
76.03647 80 87.12462
Технология:
Дисплей с электронно-лучевой трубкой
Кривая воспроизведения красного тона:
(Двоичные данные 2060 байт, используйте опцию -b для извлечения)
Кривая воспроизведения зеленого тона:
(Двоичные данные 2060 байт, используйте опцию -b для извлечения)
Кривая воспроизведения синего тона:
(Двоичные данные 2060 байт, используйте опцию -b для извлечения)
—- ICC-просмотр —-
Просмотр Cond Illuminant:
19,6445 20,3718 16,8089
Просмотр Cond Surround:
3.92889 4.07439 3.36179
Тип осветительного прибора Cond:
D50
—- МУС-мера —-
Наблюдатель измерений:
CIE 1931
Измерение поддержки:
0 0 0
Геометрия измерения:
неизвестный
Измерение Flare:
0,999%
Измерение освещенности:
D65
—- композитный —-
Размер изображения:
10×13

1

Другие решения

В iOS у меня та же проблема, но проблема файлов разного размера — это другое.

Для base64encode я заменяю «+» из строки enconde.

Как это:

self.stringImageEnconded = [self.encodedImage stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
3