Добавление невидимого водяного знака изображения в C#?
Я хочу вставить несколько невидимых водяных знаков в мои изображения JPEG через код c#. Это означает, что мне нужна библиотека .NET, которая выполняет эту работу, а не какое-то внешнее пакетное приложение.
какие предложения?
5 ответов
хранение "невидимых" данных в изображениях известно как"стеганография". 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.