Python 实现计算机屏幕水印

原本有公司提议给业务系统加上水印,工作人员拍照可自动打上水印。同事开玩笑说应该给整个屏幕打上水印——“物理水印”。直接在显示器上设置水印?这不显示,想想python能不能实现,果然有人用python实现过。屏幕出现水印后,各个应用程序仍然可点击操作。

主要模块:

pip install tkinter
pip install pypiwin32

脚本:(文件名:watermark.py)

import tkinter, win32api, win32con, pywintypes

def get_replicate_text(text):
	i,space,str1,str2 = 0,70,"",""
	while (i <= 5):
		str1 = str1 + text + " "*space
		i = i + 1
	str2 = " "*space + str1 + "\n\n\n\n"
	str1 = str1 + "\n\n\n\n"
	str1 = (str1 + str2) * 5
	return str1
	
mytext = get_replicate_text('KK 笔记')
root = tkinter.Tk() 
width = win32api.GetSystemMetrics(0)
height = win32api.GetSystemMetrics(1)
root.overrideredirect(True) #隐藏显示框
root.geometry("+0+0") #设置窗口位置或大小
root.lift() #置顶层
root.wm_attributes("-topmost", True) #始终置顶层
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")#白色背景透明
hWindow = pywintypes.HANDLE(int(root.frame(), 16))
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
label = tkinter.Label(text=mytext,compound = 'left',font=('Times New Roman','15'), fg='#d5d5d5', bg='white')
label.pack() #显示
root.mainloop() #循环

后台执行:

pythonw watermark.py

效果:



同样可以实现桌面 gif 动态图:

import tkinter, win32api, win32con, pywintypes

root = tkinter.Tk() 
root.overrideredirect(True)
root.geometry("+1100+450") #设置窗口位置或大小
root.lift()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")#白色背景透明
hWindow = pywintypes.HANDLE(int(root.frame(), 16))
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
framenum = 30 # gif 的帧数需要确定下来
giffile = 'D:/Python35/mypy/timg.gif' #找一张白色背景的gif,设置白色为透明
frames = [tkinter.PhotoImage(file=giffile,format = 'gif -index %s' % i) for i in range(framenum)]
def update(ind):
	if (ind == framenum-1):#
		ind = 0
	frame = frames[ind]
	ind += 1
	label.configure(image=frame)
	root.after(100, update, ind)
label = tkinter.Label(root,bg='white')#设置白色为透明
label.pack() #显示
root.after(0, update, 0)
root.mainloop() #循环


参考:

How to display text on the screen without a window using Python

Extended Window Styles

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
数字水印可以通过将加密后的信息嵌入到图像的高频分量中来实现。其中,DCT(离散余弦变换)是一种常用的数字图像处理方法,可以将信号从时域转换到频域,进而提取图像的高频分量。下面是一个简单的Python代码示例,演示了如何使用DCT实现数字水印的嵌入和提取。 ```python import cv2 import numpy as np # 加载图像 img = cv2.imread('lena.png', 0) rows, cols = img.shape # 生成随机二进制序列 message = '1010101010101010' message_bits = np.array(list(message)).astype(int) # 将二进制序列转换为DCT系数 message_dct = cv2.dct(np.float32(message_bits.reshape(4, 4))) # 对图像进行DCT变换 dct = cv2.dct(np.float32(img)) # 将DCT系数嵌入到高频分量中 alpha = 0.1 dct[rows-4:rows, cols-4:cols] += alpha * message_dct # 对图像进行IDCT变换 watermarked = cv2.idct(dct) # 提取数字水印 extracted_dct = cv2.dct(np.float32(watermarked)) extracted_message = np.round(extracted_dct[rows-4:rows, cols-4:cols] * (1/alpha)).astype(int) extracted_bits = np.ravel(extracted_message) % 2 # 输出结果 print('原始信息:', message_bits) print('提取信息:', extracted_bits) ``` 在这个示例中,我们首先加载了一张图像,并生成了一个长度为16的随机二进制序列。然后,我们将这个序列通过DCT变换转换为一组DCT系数,并将其嵌入到图像的右下角4x4的DCT系数中。这里,我们将嵌入系数的权值设置为0.1。最后,我们对加入数字水印的图像进行IDCT变换,提取出嵌入的数字水印,并对比原始信息和提取信息,以验证数字水印的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值