图片加“水印”的制作过程;我们经常会看见一些地图网站的地图切片上都有一个l;很明显吧!;这样logo是怎么加上去的呢?我就花了点时间在网;现在我就介绍下实现所谓“水印”的效果是什么样的一;一、Python环境的配置;Python环境配置很简单,若你安装了ArcGI;二、Logo的制作;Logo在这里我觉得只分为两种,一种是文字,另一;Logo
图片加“水印”的制作过程
我们经常会看见一些地图网站的地图切片上都有一个logo标志,例如下图上面就有一个标志,
很明显吧!
这样logo是怎么加上去的呢?我就花了点时间在网上查了查资料,原来网上的方法很多,但是我更倾向使用Python来实现这个东西。Python脚本的优点在这里就不具体介绍了,虽然Python我会的只是点皮毛,但是解决些常规问题还是可以的。
现在我就介绍下实现所谓“水印”的效果是什么样的一个过程:在我具体操作之后,觉得整个过程分为3个部分
一、 Python环境的配置
Python环境配置很简单,若你安装了ArcGIS DeskTop,则只需要安装一个python包,PIL图片处理库,这个库对图片处理的功能很强大(The Python Imaging Library (PIL) allows you to create, modify, and convert image files in a wide variety of formats using the Python language.)。环境配置好了就可以进行下一步工作了。
二、 Logo的制作
Logo在这里我觉得只分为两种,一种是文字,另一种是图片。文字是指把文字直接加到图片上去,成为“水印”,而后者则是把图片加到图片上成为“水印”。在这里只介绍下图片类型,是因为好多很好看的Logo都是图文并茂的。
Logo制作,在这里我只在PS里试了下,主要注意几点,Logo必须PNG格式的图片,而且最好把Logo做的尺寸不要超过所加图片的尺寸,在这里我所加的图片都是256px*256px的,Logo大小为180px*30px(具体要这么做,只是减少程序里的复杂度),接下来就是PS里操作了,我就不具体说了,Logo如下图(PS水平有限,前面图标的背景轮廓没给除掉):
三、AddLogo.py的代码编写
Python脚本语言很有灵活性,但是它的格式也常会令生手头痛。因为它的语句缩进直接和语句运行顺序有关。有兴趣可以去看看Python脚本的基本语法,你就会明白了!
代码如下:(这些网上都有的,一些高人早就发到网上了,我只是综合整理且实际操作了下)
# -*- coding: utf-8 -*-
import Image, ImageEnhance #引用所需的库
POSITION = ('LEFTTOP','RIGHTTOP','CENTER','LEFTBOTTOM','RIGHTBOTTOM',"title","scale") #Logo的位置
PADDING = 10
MARKIMAGE = r'E:\学习\python\tt1.png' # Logo图片的位置
def reduce_opacity(im, opacity): # 处理Logo的透明度
assert opacity >= 0 and opacity <= 1
if im.mode != 'RGBA':
im = im.convert('RGBA')
else:
im = im.copy()
alpha = im.split()[3]
alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
im.putalpha(alpha)
return im
def watermark(imagefile, markfile, position=POSITION[4], opacity=0.1):
im = Image.open(imagefile)
mark = Image.open(markfile)
if opacity < 1:
mark = reduce_opacity(mark, opacity)
if im.mode != 'RGBA':
im = im.convert('RGBA')
# 创建一个透明层,根据位置 来画Logo.
layer = Image.new('RGBA', im.size, (0,0,0,0))
if position == 'title':
for y in range(0, im.size[1], mark.size[1]):
for x in range(0, im.size[0], mark.size[0]):
layer.paste(mark, (x, y))
elif position == 'scale':
# scale, but preserve the aspect ratio
ratio = min(
float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
w = int(mark.size[0] * ratio)
h = int(mark.size[1] * ratio)
mark = mark.resize((w, h))
layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
elif position == POSITION[0]:
#左上角
position = (PADDING,PADDING)
layer.paste(mark, position)
elif position == POSITION[1]:
#右上角
position = (im.size[0] - mark.size[0]-PADDING, PADDING)
layer.paste(mark, position)
elif position == POSITION[2]:
#中间
position = ((im.size[0] - mark.size[0])/2,(im.size[1] - mark.size[1])/2)
layer.paste(mark, position)
elif position == POSITION[3]:
#左下角
position = (PADDING,im.size[1] - mark.size[1]-PADDING,)
layer.paste(mark, position)
else:
#右上角
position = (im.size[0] - mark.size[0]-PADDING, im.size[1] - mark.size[1]-PADDING,) layer.paste(mark, position)
# 组合起来就可以啦
return Image.composite(layer, im, layer)
new_image_s_filename=r"E:\学习\python\test.png" # 要加水印的图片
watermark(new_image_s_filename,MARKIMAGE,POSITION[2],opacity=0.2).save(new_image_s_filename,quality=90)
双击运行AddLogo.py文件就可以了。效果如下图:
效果就是这样,至于和人家的效果有差别,很正常啊,因此,我们在logo制作上有待改进,logo美观和标志性,添加到图片上还要选择适当logo的透明度,这些都要考虑。
好了若你想把很多图片,例如咱们地图切片数据添加“水印”,就很方便了,在这基础上加个循环就OK啦,即使你有成千上万张图片都是小Case了,只要电脑实力够强大,你只要双击运行脚本程序,就把任务交给电脑来做了,它会很快的完成任务,而你就可以在这个时间中去打打篮球了!
我们都知道图片加“水印”主要是版权保护之举,目前这种方法倒是很实用,据我了解目前把水印加上去容易、若再把水印除掉就有点难了,这个过程可逆性难度很大(呵呵,其实一旦人家能获取这个Logo原始图,那就惨了,除去水印就有办法解决了,只是网上的全是PS具体操作,不是用程序来解决这个问题,所以大量的图片要除去水印,那工作量大的吓人啊!不过可能有技术能做到这点,只是我还不知道罢了)
!所以这种加了水印的地图数
据即使被别人Down去再拼起来使用,是大大费功夫的额!至于目前主流的“数字水印”技术,这个方法还不是一个等级上的概念,对“数字水印”技术有兴趣是可以去学习下的,毕竟学海无涯啊!
虽然这个做“水印”的方法早就不是什么难点,但是对于我,通过实际学习,收获很多啊!学海当中,高人无数,只要我们时刻保持拥有一颗对学习充满热情的心,就会在学习知识的道路上获取无尽的快乐,为工作做好坚实的基础!