python 缩略图,给图片加水印,,这里使用了PIL类库。[
python 缩略图,给图片加水印,,这里使用了PIL类库。[
这里使用了PIL类库。
[Python]代码
#coding:utf-8''' python图片处理 @author:fc_lamp @blog:http://fc-lamp.blog.163.com/'''import Image as image#等比例压缩图片def resizeImg(**args): args_key = {'ori_img':'','dst_img':'','dst_w':'','dst_h':''} arg = {} for key in args_key: if key in args: arg[key] = args[key] im = image.open(arg['ori_img']) ori_w,ori_h = im.size widthRatio = heightRatio = None ratio = 1 if (ori_w and ori_w > arg['dst_w']) or (ori_h and ori_h > arg['dst_h']): if arg['dst_w'] and ori_w > arg['dst_w']: widthRatio = float(arg['dst_w']) / ori_w #正确获取小数的方式 if arg['dst_h'] and ori_h > arg['dst_h']: heightRatio = float(arg['dst_h']) / ori_h if widthRatio and heightRatio: if widthRatio < heightRatio: ratio = widthRatio else: ratio = heightRatio if widthRatio and not heightRatio: ratio = widthRatio if heightRatio and not widthRatio: ratio = heightRatio newWidth = int(ori_w * ratio) newHeight = int(ori_h * ratio) else: newWidth = ori_w newHeight = ori_h im.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img']) ''' image.ANTIALIAS还有如下值: NEAREST: use nearest neighbour BILINEAR: linear interpolation in a 2x2 environment BICUBIC:cubic spline interpolation in a 4x4 environment ANTIALIAS:best down-sizing filter '''#裁剪压缩图片def clipResizeImg(**args): args_key = {'ori_img':'','dst_img':'','dst_w':'','dst_h':''} arg = {} for key in args_key: if key in args: arg[key] = args[key] im = image.open(arg['ori_img']) ori_w,ori_h = im.size dst_scale = float(arg['dst_h']) / arg['dst_w'] #目标高宽比 ori_scale = float(ori_h) / ori_w #原高宽比 if ori_scale >= dst_scale: #过高 width = ori_w height = int(width*dst_scale) x = 0 y = (ori_h - height) / 3 else: #过宽 height = ori_h width = int(height*dst_scale) x = (ori_w - width) / 2 y = 0 #裁剪 box = (x,y,width+x,height+y) #这里的参数可以这么认为:从某图的(x,y)坐标开始截,截到(width+x,height+y)坐标 #所包围的图像,crop方法与php中的imagecopy方法大为不一样 newIm = im.crop(box) im = None #压缩 ratio = float(arg['dst_w']) / width newWidth = int(width * ratio) newHeight = int(height * ratio) newIm.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img'])#水印(这里仅为图片水印)def waterMark(**args): args_key = {'ori_img':'','dst_img':'','mark_img':'','water_opt':''} arg = {} for key in args_key: if key in args: arg[key] = args[key] im = image.open(arg['ori_img']) ori_w,ori_h = im.size mark_im = image.open(arg['mark_img']) mark_w,mark_h = mark_im.size option ={'leftup':(0,0),'rightup':(ori_w-mark_w,0),'leftlow':(0,ori_h-mark_h), 'rightlow':(ori_w-mark_w,ori_h-mark_h) } im.paste(mark_im,option[arg['water_opt']],mark_im.convert('RGBA')) im.save(arg['dst_img'])#实例#原图ori_img = 'D:/tt.jpg'#水印标mark_img = 'D:/mark.png'#水印位置water_opt = 'rightlow' #右下#生成后的目标图(保存位置)dst_img = 'D:/python.jpg'dst_w = 200dst_h = 200#裁剪压缩clipResizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h)#等比例压缩#resizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h)#水印#waterMark(ori_img=ori_img,dst_img=dst_img,mark_img=mark_img,water_opt=water_opt)
相关内容
- python比较两个文件的差异,python两个差异,下面的pytho
- Python 求解组合问题,python求解组合,[Python]代码de
- Python sqlite模块,pythonsqlite模块,sqlite是非常著名的
- Python删除指定目录下的过期文件,,实现类似该命令的操
- MySQLdb and threading Base Usage,mysqldbthreading,[Python]代码im
- Python 读取纯真IP数据库,pythonip数据库,[Python]代码#!
- Python RSS阅读器,pythonrss阅读器,[Python]代码#
- python字符串填充,python字符串,string1 = "N
- python判断数组是否包含指定的元素的方法,python数组
- Python DBUtils数据连接池与ms sql配合用法,pythondbutils,[P
评论关闭