невидимые водяные знаки в [закрытых] изображениях

Я не уверен, что это pythonic, но, похоже, работает

def alternate_list(a):
   return a[::2], a[1::2]

key_list,value_list = alternate_list(a)
b = dict(zip(key_list,value_list))
9
задан casperOne 11 October 2012 в 14:38
поделиться

10 ответов

Вы могли бы хотеть изучить Стеганографию; это скрывает данные в изображениях. Существуют формы, которые не потеряются, если Вы преобразуете в lossier формат или выровняете части обрезки изображения.

7
ответ дан 4 December 2019 в 11:09
поделиться

Я ищу "небьющиеся" водяные знаки, таким образом, данные, хранившие в exif или метаданных изображения, отсутствуют.

Я нашел некоторый интересный материал в сети при ожидании ответов здесь: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/

Существует основной тезис, это является довольно исчерпывающим об алгоритмах и их характеристиках (что они делают и насколько небьющийся они). У меня нет времени для чтения его подробно, но этот материал выглядит серьезным. Существуют алгоритмы, которые поддерживают сжатие JPEG, обрезку, гамма-коррекцию или вниз масштабирование в некотором роде. Это - C, но я могу портировать его на Python или пользоваться библиотеками C из Python.

Однако это с 2001, и я предполагаю, что 7 лет являются долгим временем в этом поле :( Does, у кого-либо есть некоторый подобный и более свежий материал?

2
ответ дан 4 December 2019 в 11:09
поделиться

Я использую следующий код. Это требует PIL:

def reduceOpacity(im, opacity):
    """Returns an image with reduced opacity."""
    assert opacity >= 0 and opacity <= 1
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    else:
        im = im.copy()
    alpha = im.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im

def watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduceOpacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)

img = Image.open('/path/to/image/to/be/watermarked.jpg')

mark1 = Image.open('/path/to/watermark1.png')
mark2 = Image.open('/path/to/watermark2.png')

img = watermark(img, mark1, (img.size[0]-mark1.size[0]-5, img.size[1]-mark1.size[1]-5), 0.5)
img = watermark(img, mark2, 'scale', 0.01)

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

Если Вы хотите видеть, как это работает, перейдите к TylerGriffinPhotography.com. На каждом изображении на сайте делают водяные знаки дважды: однажды с водяным знаком в правом нижнем углу в 50%-й непрозрачности (5 пкс от края), и однажды по целому изображению в 1%-й непрозрачности (использующий "масштаб", который масштабирует водяной знак к целому изображению). Можно ли выяснить, какова вторая, низкая форма водяного знака непрозрачности?

4
ответ дан 4 December 2019 в 11:09
поделиться

Ну, невидимое создание водяных знаков не настолько легко. Проверьте digimarc, что сделали деньги они зарабатывают на нем. Нет никакого бесплатного кода C/Python, что одинокий гений записал отпуск это для бесплатного использования. Я реализовал свой собственный алгоритм, и названием инструмента является SignMyImage. Google это, если заинтересовано... F>

1
ответ дан 4 December 2019 в 11:09
поделиться

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

1
ответ дан 4 December 2019 в 11:09
поделиться

Я не думаю, что существует библиотека, которая делает это из поля. Если бы Вы хотите реализовать свое собственное, я определенно пошел бы с Библиотекой обработки изображений Python (PIL).

Это - рецепт Поваренной книги Python, который использует PIL для добавления видимого водяного знака к изображению. Если это достаточно для Ваших потребностей, Вы могли бы использовать это для добавления водяного знака с достаточной прозрачностью, что это только видимо, если Вы знаете то, что Вы ищете.

1
ответ дан 4 December 2019 в 11:09
поделиться

Существует более новое (2005) цифровое создание водяных знаков FAQ по watermarkingworld.org

1
ответ дан 4 December 2019 в 11:09
поделиться

Я собирался отправить ответ, подобный Тьфу. Я предложил бы поместить маленький файл TXT, описывающий источник изображения (и возможно маленький оператор авторского права, если Вы применяетесь) в изображение способом, который трудно обнаружить и повредиться.

0
ответ дан 4 December 2019 в 11:09
поделиться

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

0
ответ дан 4 December 2019 в 11:09
поделиться

Я не уверен, как важный это должно быть небьющимся, но простое решение могло бы просто быть должно добавить текстовый файл в конец изображения. Что-то как "Это изображение принадлежит...".

При открытии изображения в средстве просмотра/браузере похоже на нормальный jpeg, но если бы Вы открываете его в текстовом редакторе, последняя строка была бы читаема.

Тот же метод позволяет Вам, включают фактический файл в изображение. (скройте файл в изображении), я нашел, что это немного случайно, но с 7 zip-файлами, кажется, работают. Вы могли скрыть все виды copywrite положительных героев в изображении.

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

0
ответ дан 4 December 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: