python写的批量图片水印工具

前段时间想给seo那边做个某工具站的爬虫,用到了图像识别(对方防守可谓严密啊,异步返回非标准json结构+referer+加密+图像四道防线.嘿嘿,代码就不放了.)

正好公司要给全站图片加水印,刚研究的图像识别又有用武之地了.

万事先谷歌,找到个加水印的代码,修改了一番就用上了.^ ^

  1 import Image,ImageFilter,ImageEnhance
  2 import os
  3
  4 def reduce_opacity(im, opacity):
  5     """Returns an image with reduced opacity."""
  6     assert opacity >= 0 and opacity <= 1
  7     if im.mode != ‘RGBA‘:
  8         im = im.convert(‘RGBA‘)
  9     else:
 10         im = im.copy()
 11     alpha = im.split()[3]
 12     alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
 13     im.putalpha(alpha)
 14     return im
 15
 16 def watermark(im, mark, position, opacity=1):
 17     """Adds a watermark to an image."""
 18     if opacity < 1:
 19         mark = reduce_opacity(mark, opacity)
 20     if im.mode != ‘RGBA‘:
 21         im = im.convert(‘RGBA‘)
 22     # create a transparent layer the size of the image and draw the
 23     # watermark in that layer.
 24     layer = Image.new(‘RGBA‘, im.size, (0,0,0,0))
 25     if position == ‘tile‘:
 26         for y in range(0, im.size[1], mark.size[1]):
 27             for x in range(0, im.size[0], mark.size[0]):
 28                 layer.paste(mark, (x, y))
 29     elif position == ‘scale‘:
 30         # scale, but preserve the aspect ratio
 31         ratio = min(
 32             float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
 33         w = int(mark.size[0] * ratio)
 34         h = int(mark.size[1] * ratio)
 35         mark = mark.resize((w, h))
 36         layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
 37     else:
 38         layer.paste(mark, position)
 39     # composite the watermark with the layer
 40     return Image.composite(layer, im, layer)
 41
 42 def fetchdir(path):
 43     """Get the source list"""
 44     return os.listdir(path)
 45
 46 def fetchfile(path, basepath, flag):  #flag: 1 detail,2 product
 47     """Get the source images path."""
 48     if flag == 1:
 49         imageslist = os.listdir(basepath + path)
 50         del imageslist[imageslist.index(‘index.htm‘)]
 51         return imageslist
 52     elif flag == 2:
 53         imageslistraw = os.listdir(basepath + path)
 54         imageslist = []
 55         for i in imageslistraw:
 56             if not ‘_‘ in i:
 57                 imageslist.append(i)
 58         return imageslist
 59
 60 def test():
 61     basepath = ‘/var/img_test/‘
 62     detail_img_root_path = basepath + ‘upload/‘
 63     product_img_root_path = basepath + ‘2014/‘
 64     mark = Image.open(‘/var/img_test/watermark.png‘)
 65
 66     #"""
 67     for d in fetchdir(detail_img_root_path):
 68         for p in fetchfile(d, detail_img_root_path, 1):
 69             impath = detail_img_root_path + d + ‘/‘ + p
 70             #print impath
 71             #print ‘openpic=========>>>‘ + impath
 72             try:
 73                 im = Image.open(impath)
 74                 _, im_ysize = im.size
 75                 savepath = basepath + ‘marked/upload/‘
 76                 if not os.path.isdir(savepath + d):
 77                     os.makedirs(savepath + d)
 78                 markedimg = watermark(im, mark, (506, im_ysize - 67), 0.8).convert(‘RGB‘) # 3: 2:596:47 1:476*86
 79                 savepath = savepath + d + ‘/‘+ p #.replace(‘jpg‘, ‘png‘)
 80                 #markedimg.show()
 81                 markedimg.save(savepath)
 82             except IOError:
 83                 print ‘openfailed==============>‘ + impath
 84      #"""
 85
 86     for d1 in fetchdir(product_img_root_path):
 87         d1_path = product_img_root_path + d1
 88         for d2 in fetchdir(d1_path):
 89             d2_path = d1_path + ‘/‘ + d2
 90             for p in fetchfile(d2, d1_path + ‘/‘, 2):
 91                 impath = d2_path + ‘/‘ + p
 92                 #print ‘openpic=========>>>‘ + d2_path + ‘/‘ + p
 93                 try:
 94                     im = Image.open(impath)
 95                     _, im_ysize = im.size
 96                     savepath = basepath + ‘marked/2014/‘
 97                     if not os.path.isdir(savepath + d1 + ‘/‘ + d2):
 98                         os.makedirs(savepath + d1 + ‘/‘ + d2)
 99                     markedimg = watermark(im, mark, (506, im_ysize - 67), 0.8).convert(‘RGB‘)
100                     markedimg.save(savepath + d1 + ‘/‘ + d2 + ‘/‘ + p)
101                 except IOError:
102                     print ‘openfailed==============>‘ + impath
103
104 if __name__ == ‘__main__‘:
105     test()

后记:之间还发现0kb图片和开发代码误传到图片路径,后代码小改变成了一个图片安全检测工具,嘿嘿.(其实就是IO异常,PIL对不能成立的图片的异常也直接继承了IO异常)

时间: 2024-10-04 11:13:46

python写的批量图片水印工具的相关文章

用Python写的批量文件重命名

  有些时候下载图片或其他文件,文件名都怪怪的,可选的办法是下载一个文件批量重命名的软件.当然,如果想自己'DIY'一把的话编个Python脚本最好不过了. 下面的代码实现的对指定类型的文件进行批量重命名.拷贝下面的代码到待批量命名的文件夹下,保存为xx.py直接运行,程序会提示需要批量命名的扩展名,以及重命名时的文件前缀. # -*- coding: cp936 -*- """ Created on Wed Jun 25 16:24:23 2014 @author: Adm

用java的swing写了个图片标注工具

功能说明: 1 鼠标单击:选取裁剪区域 2 鼠标双击:选取裁剪区域,并把裁剪区域保存为文件,同时把区域中心点的坐标保存 3 打开图片:从某个文件夹打开图片并显示,同时把该目录的所有图片的路径载进来.这个功能主要是针对这么种情况, 假如处理某个文件夹的图片集,在某一张终止了或者暂停了,下一次要从这种图片开始. 4 保存坐标:把裁剪区域保存为文件,同时把区域中心点的坐标保存 5 打开目录:把该目录的所有图片的路径载进来. 6 下一张:展示下一张图片. 常见用法: 1 "打开目录",这时会将

python写的百度图片爬虫

学了一下python正则表达式,写一个百度图片爬虫玩玩. 当技术遇上心术不正的人,就成我这样的2B青年了. python3.6开发,在Windows下需要安装vc2015动态库.下载地址:http://www.cr173.com/soft/146014.html 1 #/usr/bin/env python 2 #Guoyabin 3 #-*- coding:utf-8 -*- 4 import re,os 5 import requests 6 7 keyword=input('请输入搜索关键

用python写的批量判断url状态

好久没写博文了,今日正好不忙,看到同学用iisputscan批量扫ip呢,可是扫到ip之后要去一个一个点击,看看是否可进行访问,极其麻烦,于是写了个判断url状态码的小程序,原理很简单,从文件中读取ip,修改成http://ip:port格式,之后调用urllib2,判断可否访问,看代码: #coding=utf-8 import sys  import urllib2 url_notok=sys.argv[1] url_ok=sys.argv[2] result = list() f = op

用Python写一个批量生成账号的函数(用户控制数据长度、数据条数)

# 1.写一个函数,批量生成一些注册使用的账号:产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母.小写字母.数字组成 import random,stringdef Users(num,len): result = [] a = string.ascii_lowercase b = string.ascii_uppercase c = string.digits d = string.ascii_letters count = 0

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧开始爬吧. 以下就是我的爬虫步骤: 一.获取页面 虽然request和beautifulsoup模块方便又好用,但是我还是决定使用传统的urllib和urllib模块,毕竟对这两个模块熟悉之后,就能基本明白爬虫的原理和实现啦. 首先是导入模块,除了前面提到的两个模块,我们还要导入re模块,使用正则表

Python写的大小写转换小工具

几行代码的小工具,用于进行如下转换 TRANSACTIONS ON CLOUD COMPUTING => Transactions On Cloud Computing orig = 'TRANSACTIONS ON CLOUD COMPUTING' splited = orig.split(' ') handled = '' for word in splited: word = word[0] + word[1:].lower() handled += (' ' + word) handle

Python写一个批量生成账号的函数

批量生成账户信息,产生的账户由@sina.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母.小写字母和数字组成. 1 def Users(num,len): # num产生多少条信息,len账号的长度 2 ''' 3 用交集来判断是否包含大小写字母 4 :param num: 生成几条数据 5 :param len: 账号的长度 6 :return: 7 ''' 8 results = [] # 存放结果的数组 9 uppers = set(string.

用 Python 写一个爬图片的程序---------纪念我的第一个爬虫程序

终于到这题了,话不多说.直接上代码. #coding:utf-8 #By :晓明酱 #Date:2016/4/16 #参考:http://blog.csdn.net/xiaowanggedege/article/details/8650034 import urllib,re def get_html(url): page = urllib.urlopen(url) html = page.read() return html def get_img(html): reg = r'src="(.