У меня есть FBX со встроенным изображением. Изображение в Base64. Я прочитал фрагмент и успешно его расшифровал. Проблема возникает, когда изображение больше. FBX разбивает изображение на 2 строки, что похоже на base64, но я не понимаю, как его декодировать.
Content: , "iVBORw0KGgoAAAANSUhEUg...AAAAA = ", "AAAAAAAAAAAAAAAAAA...AD//wEAAP///noceab5flIAAAAASUVORK5CYII = "
Как видите, первая строка представляет собой заголовок PNG (iVBOR...), а вторая строка не имеет заголовка. Первая и вторая строки имеют окончание base64, поэтому я подозреваю, что их следует декодировать отдельно.
Кто-нибудь знает, как?
Как воспроизвести: откройте 3ds max, создайте плоскость, примените изображение как текстуру, сохраните как ascii FBX с встраиванием носителя.
ок, отредактирую..
Я скачал и установил последнюю версию 3ds max. Я создал самолет и добавил изображение PNG в качестве текстуры, я экспортировал его в виде файла fbx в формате ascii (версия по умолчанию) с использованием встроенного носителя.
Я видел несколько строк ascii в кодировке base64. Первая строка содержала заголовок PNG, и мой декодер распознал его как файл PNG. Последующие строки не содержали заголовков PNG и декодировались как файлы BIN. Все именно так, как вы описываете.
Однако в моем случае простое объединение декодированных сегментов правильно восстановило исходный файл PNG, как и следовало ожидать.
Я использовал сайт это для декодирования всех отдельных фрагментов и загрузки их в виде двоичных файлов перед их объединением.
Я использовал двоичный редактор с открытым исходным кодом ШестнадцатеричныйПравить, чтобы изучить фрагменты и объединить их.
Поскольку этот процесс работал, как и ожидалось, я предполагаю, что ваше декодирование или конкатенация Base64 должны быть неисправны. Вы написали свою собственную процедуру декодирования? если это так, возможно, вы забыли отбросить любые байты, соответствующие символам заполнения (терминал =
или ==
, используемый для того, чтобы окончательное количество байтов делилось на три без остатка для каждой строки). Обратите внимание, что эти байты должны быть отброшены после декодирования, а не до. Практически все библиотеки декодирования делают это незаметно для вас.
Если это не решит вашу проблему, опубликуйте файл PNG, который вы используете, полную версию Base64 для первой и второй строк вывода и процедуру, которую вы используете для их декодирования и объединения. Если вы это сделаете, мы рассмотрим более внимательно, чтобы помочь вам разобраться в проблеме.
Привет! Ваша помощь была полезна, чтобы узнать, что моя процедура декодирования base64 на самом деле теряла последний байт из-за ошибки в заполнении. Затем, после конкатенации, он был поврежден. Я изменил свою процедуру на ту, что здесь stackoverflow.com/questions/180947/base64-decode-snippet-in-c, и все заработало как часы. Спасибо большое.
Не могли бы вы привести пример такого изображения PNG