2011-02-02 3 views
2

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

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

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

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

ответ

2

Uhmmm это странная архитектура ... но в любом случае я думаю, что этот пост будет полезен: How to Add 'Comments' to a JPEG File Using C# поэтому предложение добавить данные в виде метаданных в формате JPEG пустое изображение.

+0

Я думаю, что он хотел кодировать данные XML с данными двоичного изображения напрямую (не для обработки OCR) –

+0

Я не хочу добавлять метаданные, так как он станет доступным для сервера и может смутить пользователя, если сервер отобразит его. – Frederic

3

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

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

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

Это вполне допустимо, что нужно сделать, чтобы Jpeg файл:

Will random data appended to a JPG make it unusable?

+0

Это действительно работает. Я был обеспокоен тем, что дополнительные байты будут загружены сервером, но они не были. Не совсем так, как я хотел это сделать, так как я не уверен, что получившееся изображение имеет 100% -е соответствие jpeg. – Frederic

+0

Это хорошая альтернатива. Я предпочитаю не устанавливать это как ответ, потому что это больше похоже на обходной путь, чем на ответ на вопрос. – Frederic

0

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

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

0

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

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