Добавление невидимого водяного знака изображения в С#?

Я хочу вставить несколько невидимых водяных знаков в свои изображения JPEG с помощью кода С#. Это означает, что мне нужна библиотека .NET, которая выполняет эту работу, а не какое-то внешнее пакетное приложение.

Какие-либо предложения?


person Tonči D.    schedule 29.12.2008    source источник
comment
Вы имеете в виду невидимый или прозрачный?   -  person kgiannakakis    schedule 29.12.2008
comment
Существуют видимые и невидимые водяные знаки: riecks.com/security   -  person splattne    schedule 29.12.2008
comment
Я написал невидимый, а не прозрачный...   -  person Tonči D.    schedule 29.12.2008


Ответы (5)


есть порт библиотеки изображений magick для С#, и он может легко выполнить эту операцию для вас...

person reflog    schedule 29.12.2008

Хранение «невидимых» данных в изображениях известно как «стеганография». Поиск в Google по запросу "steganography.net" дает эту статью. как его главный хит - может оказаться полезным.

person Matt Hamilton    schedule 29.12.2008

Какова цель этого? Это для того, чтобы вы могли идентифицировать файлы JPG, которые были взяты с вашего сайта?

Ответ в комментариях: «Да, я хочу защитить свои фотографии с помощью надежного и невидимого водяного знака. Полувидимый логотип сайта не вариант...»

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

Любой водяной знак, подобный описанному вами, может быть использован для идентификации прямой копии всего изображения, но с jpg мне кажется, что если его даже открыть и снова сохранить в редакторе, есть шанс, что изменение сжатия повлияет водяной знак. Кроме того, если кто-то украдет ваше изображение и сделает с ним что-то более масштабное — подкорректирует цветовой баланс, немного обрежет его и т. д., маловероятно, что какие-либо невидимые водяные знаки будут достаточно надежными, чтобы выжить и остаться узнаваемыми.

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

person glenatron    schedule 29.12.2008
comment
Да, я хочу защитить свои фотографии, используя надежный и невидимый водяной знак. Полувидимый логотип сайта не вариант... - person Tonči D.; 29.12.2008
comment
это должен быть комментарий, а не ответ! - person balexandre; 29.12.2008
comment
Существует несколько решений для невидимых водяных знаков для формата JPEG. Большинство из них изменяют значения дискретного косинусного преобразования. Поскольку у меня нет времени программировать его самому, мне нужно готовое рабочее решение. Итак, я ищу предложение, например упомянутую библиотеку MagickNet... - person Tonči D.; 29.12.2008
comment
@toncidamjanic: имейте в виду, что в последний раз, когда я проверял (более года назад), такие решения были взломаны - person Steven A. Lowe; 29.12.2008
comment
@steven: ну, они могут быть взломаны, если вы знаете, что искать. Большинство водяных знаков представляют собой незаметный шум, вставленный в изображение, который не может быть легко обнаружен методом грубой силы. - person Tonči D.; 29.12.2008

Эта статья на devx.com содержит библиотеку (Stego) с исходным кодом, который вы можете использовать:

Сохранение секретов в секрете: стеганография с .NET

После реализации этого API скрыть сообщение внутри файла .bmp несложно:

   ICoverFile cover = new BMPCoverFile("cover.bmp");
   cover.CreateStegoFile("stego.bmp","Hello","MyPwd");   

Точно так же вы можете легко извлечь сообщение:

   IStegoFile stego = new 
      BMPStegoFile("stego.bmp","MyPwd");
   Console.WriteLine(stego.HiddenMessage);

ОБНОВЛЕНИЕ. Извините. Мэтт ссылается на ту же статью... не видел этого при написании этого ответа.

person splattne    schedule 29.12.2008

Если вы работаете над важным приложением, почему бы не попробовать платную услугу?

Digimarc и Signumtech может оказать вам такую ​​поддержку, используя свой SDK.

person balexandre    schedule 29.12.2008
comment
Да, платное решение тоже вариант. Мне просто нужна хорошо сделанная и хорошо протестированная библиотека. - person Tonči D.; 29.12.2008