text_blind_watermark icon indicating copy to clipboard operation
text_blind_watermark copied to clipboard

咨询一下工作原理

Open rovesoul opened this issue 10 months ago • 4 comments

这是什么原理实现的

rovesoul avatar Mar 31 '24 02:03 rovesoul

image text_blind_watermark 项目确实是通过修改某些指定的字符来嵌入水印信息。具体来说,它会在文本中添加一些不可见的字符(如零宽度空格或零宽度非连接符),这些字符在视觉上不会改变文本的外观,但会改变底层的二进制表示。

工作原理 选择嵌入位置:根据特定算法选择文本中的某些位置,这些位置可以是字符、单词或句子。 嵌入水印信息:在选定的位置上添加不可见字符(如零宽度空格 \u200B 或零宽度非连接符 \u200C)。这些字符在视觉上不可见,但会改变文本的二进制表示。 提取水印信息:通过检测这些不可见字符的位置,提取出嵌入的二进制数据,并将其转换回原始的水印信息。 示例代码 以下是一个简单的 Python 示例,展示如何将水印嵌入到文本中并提取出来:

Python

def text_to_binary(text): return ''.join(format(ord(char), '08b') for char in text)

def binary_to_text(binary): chars = [binary[i:i+8] for i in range(0, len(binary), 8)] return ''.join(chr(int(char, 2)) for char in chars)

def embed_watermark(text, watermark): binary_watermark = text_to_binary(watermark) words = text.split() for i in range(len(binary_watermark)): if i < len(words): words[i] += '\u200B' if binary_watermark[i] == '1' else '\u200C' return ' '.join(words)

def extract_watermark(text): words = text.split() binary_watermark = ''.join('1' if '\u200B' in word else '0' for word in words) return binary_to_text(binary_watermark)

示例

original_text = '这句话中有盲水印,你能提取出来吗?' watermark = 'ABC123'

嵌入水印

text_with_watermark = embed_watermark(original_text, watermark) print("嵌入水印后的文本:", text_with_watermark)

提取水印

extracted_watermark = extract_watermark(text_with_watermark) print("提取的水印内容:", extracted_watermark) AI-generated code. Review and use carefully. More info on FAQ. 这个示例展示了如何将水印信息转换为二进制,并嵌入到文本中。提取时,通过检测零宽度空格的位置,恢复原始的水印信息。

new bing 给的

Rgoogle avatar Jul 07 '24 18:07 Rgoogle

您的来信已经收到,谢谢。待我尽快上线处理。                                                                                    ——董汇标

rovesoul avatar Jul 07 '24 18:07 rovesoul

感谢分享这么好的项目。

ytfrdfiw avatar Aug 08 '24 01:08 ytfrdfiw

您的来信已经收到,谢谢。待我尽快上线处理。                                                                                    ——董汇标

rovesoul avatar Aug 08 '24 01:08 rovesoul