Я не уверен, почему вы хотите использовать Javascript здесь. В любом случае вставленная вами строка выглядит как начало заголовка JPG. Проблема в том, что JPG наверняка будет содержать NUL (символы с 0 в качестве значения). Скорее всего, это приведет к обрезанию строки (как, по-видимому, и в примере, который вы разместили). Если вы хотите «структурировать» JPG, стандартный подход кодирует его как Base 64.
Однако, если вы хотите сохранить данные локально, есть способ сделать это во Flash. Это просто, но у него есть некоторые ограничения.
Для этого вы можете использовать локальный Общий объект . По умолчанию существует ограничение в 100 Кб, что недостаточно для файлов изображений; Вы можете попросить пользователя выделить больше места для вашего приложения. В любом случае я бы попытался сохранить изображение в формате JPG, а не в виде необработанных пикселей, поскольку разница в размерах очень существенна.
Shared Objects будет прозрачно обрабатывать сериализацию / десериализацию для вас. Есть некоторые предостережения: не каждый объект действительно может быть сериализован; для начала у него должен быть конструктор без параметров; Объекты DisplayOb, такие как спрайты, фрагменты ролика и т. Д., Не будут работать. Однако можно сериализовать ByteArray, чтобы вы могли сохранять файлы JPG локально (если пользователь допускает дополнительное пространство). Вы должны использовать AMF3 в качестве схемы кодирования (я думаю, что она используется по умолчанию); также вы должны сопоставить класс, который вы сериализуете, с registerClassAlias , чтобы сохранить тип сериализованного объекта (иначе он будет рассматриваться как объект Object). Вам нужно сделать это только один раз в жизненном цикле приложения, но это нужно сделать перед любым чтением / записью в Shared Object.
Что-то вроде:
registerClassAlias ( "flash.utils.ByteArray", ByteArray);
Я бы использовал Shared Objects, а не Javascript. Просто имейте в виду, что вам, скорее всего, придется попросить пользователя предоставить вам больше места для хранения изображений (что кажется достаточно разумным, если вы позволяете им работать в автономном режиме), и что пользователь может удалить данные в любое время. время (точно так же, как он мог удалить куки своего браузера).
Редактировать
Я понимаю, что на самом деле я не обращал особого внимания на то, что "мы выбрали Gears для этого", часть вашего вопроса.
В этом случае вы могли бы попробовать использовать метод base 64 для передачи данных в JS. Со стороны Actionscript это просто (возьмите один из множества доступных кодеров / декодеров Base64), и я предполагаю, что в API Gear уже должен быть доступен кодер / декодер (или, по крайней мере, его не должно быть трудно найти). В этот момент вам, вероятно, придется превратить это в BLOB-объект и сохранить его на диске (возможно, используя BlobAPI , но я не уверен, поскольку у меня нет опыта работы с Gears).