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

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

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

5 ответов


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


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


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

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

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

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

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


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

хранить секреты в тайне: стеганография с .Чистая

после реализации этого 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);

UPDATE: о, извините. Мэтт ссылался на ту же статью... не см. это при написании этого ответа.


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

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