Как декодировать встроенные изображения base64 fbx - PullRequest
3 голосов
/ 09 апреля 2019

У меня есть FBX со встроенным содержимым изображения. Изображение в Base64. Я прочитал кусок и успешно расшифровал его. Проблема возникает, когда изображение больше. FBX разбивает изображение на 2 строки, которые выглядят как base64, но я не понимаю, как мне его декодировать.

  1. Я попытался декодировать обе строки в base64 и объединить их перед распаковкой png, но png поврежден.
  2. Я попытался объединить строки Base64, но это не работает, так как окончание = след неверно.
  3. Я попытался распаковать первую первую строку (правильный png, но только половину изображения) и распаковать вторую как растровое изображение, но поскольку у второй нет заголовков, это недопустимое изображение.

Содержание:, "IVBORw0KGgoAAAANSUhEUg ... ААААА =", "AAAAAAAAAAAAAAAAAA ... AD // wEAAP /// noceab5flIAAAAASUVORK5CYII ="

Как видите, первая строка - это заголовок PNG (iVBOR ...), но вторая строка не имеет заголовка. Первая и вторая строки имеют окончание base64, поэтому я подозреваю, что они должны быть декодированы отдельно.

Кто-нибудь знает как?

Как тиражировать: откройте 3ds max, создайте плоскость, примените изображение в качестве текстуры, сохраните как ascii FBX с врезанными носителями.

PNG with enough size to be split

1 Ответ

2 голосов
/ 13 мая 2019

Я скачал и установил последнюю версию 3ds max. Я создал плоскость и добавил изображение PNG в качестве текстуры, я экспортировал его в виде файла fbx в формате ascii (версия по умолчанию) с использованием встроенного носителя.

Я видел несколько строк ascii в кодировке base64. Первая строка содержала заголовок PNG, и мой декодер распознал его как файл PNG. Последующие строки не содержали заголовков PNG и были декодированы как файлы BIN. Все это именно так, как вы описываете.

Однако в моем случае простая конкатенация декодированных сегментов правильно восстановила исходный файл PNG, как и следовало ожидать.

Я использовал этот сайт для декодирования всех отдельных фрагментов и загрузки их в виде двоичных файлов перед их объединением.

Я использовал бинарный редактор с открытым исходным кодом HexEdit , чтобы проверить фрагменты и объединить их.

Поскольку этот процесс работал должным образом, я полагаю, что ваша Base64-декодировка или конкатенация должны быть ошибочными. Вы написали свою собственную процедуру декодирования? если это так, возможно, вы забыли сбросить любые байты, соответствующие символам заполнения (терминал = или ==, используемый для равномерного деления конечного числа байтов на три для каждой строки). Обратите внимание, что эти байты должны быть сброшены после декодирования, а не до. Практически все библиотеки декодирования делают это для вас незаметно.

Если это не решит вашу проблему, пожалуйста, опубликуйте файл PNG, который вы используете, полную Base64 для первой и второй строк вывода и процедуру, которую вы используете для их декодирования и объединения. Если вы это сделаете, мы рассмотрим более внимательно, чтобы помочь вам разобраться в проблеме.

...