python:加水印小应用程序的实现
2018-01-15 13:46
399 查看
在学习啦一段时间python之后,尝试着使用Python做一些图像处理方面的内容,这里编写了一个简单的加水印的小程序。主要用到了Python中自带的Tkinter标准GUI库和pillow图像处理库
这两个库的学习本人主要是看相关的文档,最后面中会附有链接。功能很简单,实现的效果图如下:
加水印实现代码如下:
界面代码如下:
学习链接:
pillow
TkinterBook
Tkinter之文件对话框
这两个库的学习本人主要是看相关的文档,最后面中会附有链接。功能很简单,实现的效果图如下:
加水印实现代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-12-27 15:55:57 # @Author : cfq (cfqpeter@qq.com) # @Link : ${link} # @Version : $Id$ import sys from PIL import Image,ImageDraw,ImageFont import random import watermark # 随机颜色: def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255),90) def watermark(s,*,path = None,image = None): #受限制的关键字参数 if path: im = Image.open(path).convert('RGBA') if image: im = image w,h = im.size txt_im = Image.new('RGBA', im.size, (255,255,255,0)) draw = ImageDraw.Draw(txt_im) font = ImageFont.truetype('C:/Windows/Fonts/Arial.ttf',40) # 添加水印: for c in range(len(s)): draw.text((30*c+10, 10), s[c], font=font,fill = rndColor()) out = Image.alpha_composite(im, txt_im) #融合 return out #运行测试 if __name__=='__main__': args = sys.argv if len(args) <3: print('Error:Missing parameters') sys.exit(0) L = [] path = args[1] #获取图像路径 for i in range(2,len(args)): L.append(args[i]) s = ''.join(L) #获取水印字符串 print('waterMark:',s) res = watermark(s,path = path) res.show()
界面代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-12-29 13:29:07 # @Author : cfq (cfqpeter@qq.com) # @Link : ${link} # @Version : $1.0$ '''[summary] 一个用来给图片添加水印的小程序 Tk 完成GUI界面 Pillow 完成加水印 [description] ''' from tkinter import * import tkinter.messagebox as messagebox import tkinter.filedialog as filedialog from PIL import Image,ImageTk import watermark class watermark_App(Frame): def __init__(self,master = None): Frame.__init__(self,master) self.pack() self.createWidgets() def createWidgets(self): frame1 = Frame(self) frame1.pack() #包管理器 label1 = Label(frame1,text = "原始图像:") self.canvas1 = Canvas(frame1,width = 256,height = 256,background = "white") label2 = Label(frame1,text = "水印图像:") self.canvas2 = Canvas(frame1,width = 256,height = 256,background = "white") label1.grid(row=0,column=0) label2.grid(row=0,column=1) self.canvas1.grid(row=1,column=0) self.canvas2.grid(row=1,column=1) frame2 = Frame(self) frame2.pack() label = Label(frame2,text = "请输入图像地址:") self.path = StringVar() entry = Entry(frame2,textvariable = self.path,state='readonly') label_mark = Label(frame2,text = "输入水印内容:") self.mark = StringVar() entry_mark = Entry(frame2,textvariable = self.mark) label.grid(row=0,column=0) entry.grid(row=0,column=1) label_mark.grid(row=0,column=2) entry_mark.grid(row=0,column=3) frame3 = Frame(self) frame3.pack() btOpenImage = Button(frame3,text = "打开图片",command = self.openImage) btOpenImage.grid(columnspan =3,sticky=W,padx=5,pady=3) btProcess = Button(frame3,text = "处理",command = self.processButton) btProcess.grid(row=0,column=3,columnspan=3,padx=5,sticky=E) self.btSave = Button(frame3,text = "保存结果",state = DISABLED,command = self.saveImage) self.btSave.grid(row=0,column=6,columnspan=3) def openImage(self): filename = filedialog.askopenfilename(initialdir='E:/', filetypes=[("图像",".jpg .png .tif")],title='打开')#文件打开对话框 self.path.set(filename) self.srcImageId = None if filename: self.srcImage = Image.open(filename).convert('RGBA') self.tk_srcIm = ImageTk.PhotoImage(self.srcImage.resize((256,256))) if self.srcImageId: self.canvas1.delete(self.srcImageId) self.srcImageId = None self.srcImageId = self.canvas1.create_image(0,0,anchor = NW,image = self.tk_srcIm) def processButton(self): if self.srcImage: mark = self.mark.get() self.dstImageId = None if mark: self.dstImage = watermark.watermark(mark,image = self.srcImage) #加水印 self.tk_dstIm = ImageTk.PhotoImage(self.dstImage.resize((256,256))) if self.dstImageId: self.canvas2.delete(self.dstImageId) self.dstImageId = None self.dstImageId = self.canvas2.create_image(0,0,anchor = NW,image = self.tk_dstIm) self.btSave.config(state = NORMAL) #激活保存按钮 else: messagebox.showinfo('Error',"无水印!请输入要添加的水印内容") else: messagebox.showinfo('Error',"输入图像错误") def saveImage(self): filename = filedialog.asksaveasfilename(initialdir='E:/',defaultextension = 'png',title='保存') #文件保存对话框 if filename: if self.dstImage: self.dstImage.save(filename) root = Tk() root.resizable(0,0) app = watermark_App(root) app.master.title('水印生成工具') app.mainloop()
学习链接:
pillow
TkinterBook
Tkinter之文件对话框
相关文章推荐
- 基于Jupyter平台通过python实现Spark的应用程序之wordCount
- Python之Fabric模块 Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:
- Python的Flask框架应用程序实现使用QQ账号登录的方法
- python实现应用程序在右键菜单中添加打开方式功能
- python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
- python实现根据图标提取分类应用程序实例
- python使用PIL模块实现给图片打水印的方法
- Python 实现计算机屏幕水印
- 使用 Python 和 Oracle 数据库实现高并发性 了解如何借助线程和并发性提升支持 Oracle 数据库的 Python 应用程序的吞吐量和响应性。
- python3+PyQt5实现支持多线程的页面索引器应用程序
- python3+PyQt5 实现支持多线程的页面索引器应用程序
- 基于python的图片修复程序(实现水印去除)
- python3+PyQt5 图形项的自定义和交互--实现page Designer应用程序
- python实现根据图标提取分类应用程序实例
- Python 快速实现CLI 应用程序的脚手架
- python使用PIL模块实现给图片打水印的方法
- python使用multiprocessing模块实现带回调函数的异步调用方法
- python TKinter 实现显示日期时间和秒表的功能
- Python实现好玩的雨滴下落到地面的效果
- python实现单链表,及两个链表按位相加