最近新入了一台单反相机,尼康的D7000, 是一台很赞的机器,摄影也是我暂时拟定的几个主要的技能树之一,分别是编程,摄影,电子制作,无线电和骑车。如果这是一篇介绍使用ps给照片加水印的文章那就太没意思啦,网上能找到很多类似的教程和文章,如果您想学习使用ps来给文章添加睡应的话,很抱歉,您可以关闭该网页了,本文的主角是gimp(GNU Image Manipulation Program),一个开源的自由图像编辑软件,它功能强大之处在于可定制性,您可以根据自己的需要来添加自己所需要的功能,可定制性也是我喜爱自由软件的原因之一,我选择gimp的还有一个主要原因是我是linux的狂热用户,linux下没有ps的,而我也不想在自己的电脑上使用盗版软件,我工作就是编写软件所以对软件的版权也很看重,相信ps这样的软件也是一班屌丝程序员辛苦编写出来的,屌丝何苦为难屌丝呢:)
本文主要介绍gimp在linux下的是使用,所以以下的所有步骤均是在了linux下的操作,windows用户请自行查阅相应的安装步骤,我所使用的linux是opensuse12.3,如果是其他发行版的话使用其相应的软件包管理器安装就可以了,大多是的发行版软件源中相信都添加了该软件,安装非常的容易在opensuse中的操作如下:
sudo zypper install gimp
接下来我将介绍如何编写一个gimp的插件,这里我使用的是bumpmap效果来添加水印,gimp可以支持三中语言的脚本,分别是python, perl和scheme,不过gimp的编写者似乎对python和perl并不怎么关心相关的文档已经特别陈旧了,scheme的文档似乎更多一些,scheme是一种函数式编程语言,是一种高端大气上档次的lisp方言,lisp语言可是唯一能理解上帝的的语言啊!!!! 当然啦对于这种高大上的语言我自然是不懂的,所以参考了下别人的代码(娇羞), 代码如下:
(define (bumped-watermark filename fullname) (let* ((img (car (gimp-file-load RUN-NONINTERACTIVE filename fullname))) (drawable (car (gimp-image-active-drawable img))) (layer (car (gimp-layer-new img 1200 800 //设置输入分辨率 RGB "Water mark layer" 100 NORMAL)))) (gimp-image-add-layer img layer 0) (gimp-edit-fill layer WHITE-FILL) (let* ((drawable(car (gimp-image-active-drawable img))) (text-float(car (gimp-text-fontname img drawable 1000 750 //水印位置 "@cfylee" //水印字符 0 1 20 0 "Sans")))) //水印字体 (gimp-floating-sel-anchor text-float)) (let* ((watermark (car (gimp-image-active-drawable img)))) (plug-in-bump-map RUN_NONINTERACTIVE img drawable watermark 135 45 0 0 0 0 1 0 LINEAR)) (gimp-image-remove-layer img layer) (gimp-file-save RUN_NONINTERACTIVE img drawable fullname filename) ;Finally register our script with script-fu. (script-fu-register "bunped-watermark" "Bunped watermark" "Add Bumpered watermark to a given image" "cfylee" "cfylee" "2013-6-12" "" SF-STRING "File name:" "" SF-STRING "Full file path name:" "") (script-fu-menu-register "bumped-watermark" "~/.gimpplugins")
将上面的代码保存成scheme源文件,取名watermark.scm,放到~/.gimp-2.8/scripts目录中,打开gimp2.8在工具栏中找到filters->Scripts-Fu->refresh script 完成后我们编写的插件就完成安装了,使用方法,在shell中输入以下命令:
gimp -c -i -d -b '(bumped-watermark "'$file'" "'$ddir'/'$file'")' -b '(gimp-quit 0)'
将’$file’替换成源图片的路径,’$addr’/’$file’替换成目标图片的路径.
有关scheme和Script-Fu插件编写的信息参考:http://www.gimp.org/tutorials/Basic_Scheme/
关于bumpmap插件的使用效果,参考:http://www.gimp.org/tutorials/The_Basics/
关于Script-Fu的具体使用参考:http://www.gimp.org/tutorials/Basic_Scheme/
如果每次都一张一张的处理图片的话一定会让人崩溃的,作为一个懒人这种无聊的工作自然是要交给计算机来做,根据unix编程原则don’t repeat yourself, 编写了下面的shell脚本来完成批量处理的工作,忽然想起上高中时老师说我基因都是懒的,不禁婉儿一笑,懒有什么不好?代码如下:
#!/bin/env bash sdir = "~/Pictures/xx" //替换成源图片路径 ddir = "~/Pictures/xx.done" //替换成目标图片路径 cd $sdir mkdir $ddir for file in * do if [ -f "$file" -a -n $(ls $file | grep '.jpg') ] then echo "Adding watermark to picture:$file.." if [ -f "$file" -a -n $(ls $file | grep '.jpg') ] fi done echo "Done"
http://www.gimp.org/docs/
http://www.gimp.org/tutorials/Basic_Perl/
http://imagic.weizmann.ac.il/~dov/gimp/perl-tut-2.0/
http://www.gimp.org/docs/python/index.html