Как сохранить пользовательские данные как допустимое изображение в формате jpeg на С#

Мне нужно хранить данные XML на сервере, который принимает только изображения в формате jpeg. Я подумал о том, чтобы записать свои XML-данные в действительный файл jpeg. В конце концов, кроме заголовка jpeg, содержимое файла изображения представляет собой произвольные данные, верно?

Можно ли создать действительный файл jpeg, но заполнить его «тело» пользовательскими байтами?

Конечно, мне также нужно уметь декодировать пользовательский файл jpeg и восстанавливать данные.

Я не знаком с форматом файла jpeg, поэтому был бы признателен за явный пример.


person Frederic    schedule 02.02.2011    source источник


Ответы (4)


Возможно, просто добавление данных в небольшой jpeg будет работать?

  • Создайте небольшой jpeg.
  • Добавьте свой (запутанный/зашифрованный) XML в файл.
  • Загрузить на сервер.

FWIW, вы можете легко увидеть, как это работает, используя шестнадцатеричный редактор. Просто создайте небольшой jpeg и добавьте свой xml в конец. Затем откройте его с помощью любого графического редактора.

Это совершенно правильное действие для файла jpeg:

Сделают ли случайные данные, добавленные к JPG, непригодным для использования?< /а>

person SuggestionBox    schedule 02.02.2011
comment
Это действительно работает. Я беспокоился, что лишние байты будут удалены сервером, но этого не произошло. Это не совсем то, как я хотел это сделать, поскольку я не уверен, что полученное изображение имеет 100% -ное состояние jpeg-соответствия. - person Frederic; 02.02.2011
comment
Это хорошая альтернатива. Я предпочитаю не устанавливать это как ответ, так как это больше похоже на обходной путь, чем на ответ на вопрос. - person Frederic; 03.02.2011

Ммм, это странная архитектура... но в любом случае я думаю, что этот пост будет полезен: Как добавить "комментарии" к файлу JPEG с помощью C#, поэтому предлагается добавить данные в качестве метаданных пустого изображения jpeg.

person Felice Pollano    schedule 02.02.2011
comment
Я думаю, что он имел в виду напрямую кодировать данные XML с данными двоичного изображения (не для обработки OCR) - person Philibert Perusse; 02.02.2011
comment
Я не хочу добавлять метаданные, так как они станут доступными для сервера и могут запутать пользователя, если сервер их отобразит. - person Frederic; 02.02.2011

Если вы хотите добавить свои данные как настоящие данные jpeg, сначала создайте BitmapSource с BitmapSource.Create и поместите свои данные в параметр буфера. Затем используйте JpegBitmapEncoder, чтобы сохранить его. в формате jpeg (пример здесь).

Однако, насколько я знаю, кодировщик .Net jpeg не работает без потерь (даже если вы установите его качество на 100%), поэтому вам понадобится сторонняя библиотека, которая может кодировать JPEG без потерь.

person Andrei Pana    schedule 02.02.2011

Я не знаю конкретного способа JPEG, но есть метод PNG/GIF для кодирования произвольных данных и пикселей. Проверьте этот пост. Некоторые сайты позволяют загружать файлы PNG и GIF, переименованные в JPEG, чтобы вы могли попробовать это. http://blog.nihilogic.dk/2008/05/compression-using-canvas-and-png.html

Он сохраняет javascript, но вы могли бы использовать и текст, правда.

person Chris Haas    schedule 02.02.2011