Как да запазите персонализирани данни като валидно jpeg изображение в C#

Трябва да съхранявам 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