凝结时光:ImageMagick 制作 gif
从去年12.12开始,工作日都会从单位的落地窗向外拍一张照片,有点每日打卡的意思。weekday 是一天不落的,weekend 不是每次都到单位,落了几次。
想法来自上学的时候,有同学在同一个地方,拍北洋广场的一年四季,做成 gif,非常漂亮。自己就也想试一下,于是就动手了。
干货开始。
工具:shell、ImageMagick
1、照片采集
手机拍摄,上传网盘。
2、照片整理
# 准备目录
workDir=gifs
mkdir $workDir
mkdir -p $workDir/imgs
mkdir -p $workDir/minImgs # 准备文件
cd $workDir
cp ~/Downloads/aaa/*.jpg imgs/
3、文件名处理
这个是一个特殊的情况,iPhone 拍出来的照片,传到网盘后,文件名是“2014-12-31 084045.jpg”,中间有个空格,在处理的时候有点麻烦,需要把空格处理掉。
cd imgs
for f in `find *.jpg | tr ' ' '_'`
do
mv "`echo $f | tr '_' ' '`" $f
done
4、图片加水印
这里我想的是右上角加上日期的标签,内容可以从文件名里面截取:
水印的坐标需要根据图片的实际情况去设置,对 ImageMagick 用的不多,还没有掌握相对坐标的方式(如果有的话)。
# 当前目录 $workDir/imgs for f in `ls . | grep jpg`
do
echo "current img: "$f
wm_file=${f::}.jpg
wm_text=${f::}
echo "water mark: "$wm_text
convert -fill white -pointsize -draw "text 2700,160'$wm_text'" $f $wm_file > ../log
rm $f
done
5、图片压缩
原始的图片太大,可以适当压缩下:
DPI 设置为400,压缩成原来的25%
# 当前目录 $wordDir/imgs for f in `ls . | grep jpg`
do
convert -density -geometry % $f ../minImgs/$f
done cd $workDir
6、合成 gif
这里 imageMagick 默认的一个 tick 是1/100s,这里50个 tick,就是50/100,就是半秒。可以根据自己的需求,多试几次。
# 当前目录 $workDir convert -delay minImg/*.jpg res.gif 2>>log
最后,上结果。
(超过10M 了 T T)
http://pan.baidu.com/s/1sjuizQP
附全部代码:
#!/bin/sh
if [[ $# != ]]
then
echo "Usage: sh makeGif.sh srcDir"
exit
fi SRCDIR=$
WORKDIR=gifs
mkdir $WORKDIR
mkdir -p $WORKDIR/imgs
mkdir -p $WORKDIR/minImgs # 准备文件
cd $WORKDIR
cp $SRCDIR/*.jpg imgs/ cd imgs
for f in `find *.jpg | tr ' ' '_'`
do
mv "`echo $f | tr '_' ' '`" $f
done # 当前目录 $WORKDIR/imgs for f in `ls . | grep jpg`
do
echo "current img: "$f
wm_file=${f:0:10}.jpg
wm_text=${f:0:10}
echo "water mark: "$wm_text
convert -fill white -pointsize 96 -draw "text 2700,160'$wm_text'" $f $wm_file 2> ../log
rm $f
done # 当前目录 $wordDir/imgs for f in `ls . | grep jpg`
do
convert -density 400 -geometry 25% $f ../minImgs/$f.jpg
done cd .. # 当前目录 $WORKDIR convert -delay 50 minImgs/*.jpg res.gif 2>>log
凝结时光:ImageMagick 制作 gif的更多相关文章
- 使用imageMagick 制作圆角矩形和图片加水印
制作圆角矩形好图片水印都是图片合成的操作 composite -gravity southeast mask175.png src.jpg dest.jpg -gravity southeast ...
- ImageMagick
http://blog.csdn.net/lan861698789/article/details/7738383 1.官网 http://www.imagemagick.org/script/ind ...
- jffs2文件系统制作
内核: linux-3.0 uboot: 2010.09 开发板: fl2440 交叉编译器: 2011. ...
- 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...
- 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...
- 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...
- ImageMagick的使用
关于ImageMagick ImageMagick (TM) 是一个免费的创建.编辑.合成图片的软件.它可以读取.转换.写入多种格式的图片.图片切割.颜色替换.各种效果的应用,图片的旋转.组合,文本, ...
- 【ImageMagick】ImageMagick命令行工具
[关于ImageMagick] [命令行工具] [源码安装] [二进位发布版本] [资源配置文件] [相关下载] ImageMagick命令行工具 [ convert | identify | mog ...
- [置顶] 修改Android开机画面之rle制作
第一个动画: Bootloader开机使用的图片是linux.bmp,长高分别是120*120,色度是32,所以可以拿相同格式图片替换,进行编译烧写即可. 第二个图片:内核logo 这个修改方式,我在 ...
随机推荐
- nodejs安装:nodejs入门
nodejs开篇 前几天看到好多关于node 的帖子没有单独说明node安装的文章~ 特发此篇 总结一下平时在windows上nodejs的安装... 1.js来搞前后端分离是nodejs的一大特点, ...
- 安德鲁斯 建立与各种听众自己定义的ScrollView
=== 建立与各种听众自己定义的ScrollView === 尽管安卓5.1已经release, 可是ScrollView的封装和对外API依然少的可怜, 尽管它优化得非常好了. 所以问题来了: Sc ...
- 如何使用 RMAN 异构恢复一些表空间
在oracle 在日常维护的数据库中难免会遇到误删数据和使用(drop.delete. truncate)当我们使用常规手段(flashback query .flashback drop)当数据不能 ...
- UVA11983 - Weird Advertisement(扫描线)
UVA11983 - Weird Advertisement(扫描线) 题目链接 题目大意:给你n个覆盖矩形,问哪些整数点是被覆盖了k次. 题目大意:这题和hdu1542是一个题型.可是这题求的是覆盖 ...
- 经典弹出层Colorbox - a jQuery lightbox
Colorbox - a jQuery lightbox A lightweight customizable lightbox plugin for jQuery Fork me on GitHub ...
- 手工制作的年份Java老A发售量
Java老A这本书是写了很长的时间,昨天终于开始china-pub.京东.活动当天发售的猫,现在,简称买卖,他当然还没有到. 有兴趣的人能够去看看哈(兴许其它站点地址也会在这里公开): china-p ...
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...
- Ubuntu更改hosts档
Ubuntu更改hosts档 打开hosts档 sudo gedit /etc/hosts 下载hosts,并全选复制 hosts 粘贴到hosts文件里.保存就可以 $(function () { ...
- 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)
标题叙述性说明:鉴于阵列A,尺寸n,数组元素1至n数位,但是,一些数字多次出现,有些数字不出现.请设计算法和程序.统计数据不会出现什么.什么号码多次出现. 您可以O(n)时间复杂度,O(1)求下完毕么 ...
- Windows下C语言的Socket编程例子(TCP和UDP)
原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...