凝結時光:ImageMagick 制作 gif


從去年12.12開始,工作日都會從單位的落地窗向外拍一張照片,有點每日打卡的意思。weekday 是一天不落的,weekend 不是每次都到單位,落了幾次。

想法來自上學的時候,有同學在同一個地方,拍北洋廣場的一年四季,做成 gif,非常漂亮。自己就也想試一下,於是就動手了。

干貨開始。

工具:shell、ImageMagick

1、照片采集

手機拍攝,上傳網盤。

2、照片整理

1 # 准備目錄
2 workDir=gifs
3 mkdir $workDir
4 mkdir -p $workDir/imgs
5 mkdir -p $workDir/minImgs
6 
7 # 准備文件
8 cd $workDir
9 cp ~/Downloads/aaa/*.jpg imgs/

3、文件名處理

這個是一個特殊的情況,iPhone 拍出來的照片,傳到網盤后,文件名是“2014-12-31 084045.jpg”,中間有個空格,在處理的時候有點麻煩,需要把空格處理掉。

1 cd imgs
2 for f in `find *.jpg | tr ' ' '_'`
3 do
4     mv "`echo $f | tr '_' ' '`" $f 
5 done

4、圖片加水印

這里我想的是右上角加上日期的標簽,內容可以從文件名里面截取:

水印的坐標需要根據圖片的實際情況去設置,對 ImageMagick 用的不多,還沒有掌握相對坐標的方式(如果有的話)。

 1 # 當前目錄 $workDir/imgs
 2 
 3 for f in `ls . | grep jpg` 
 4 do
 5     echo "current img: "$f
 6     wm_file=${f:0:10}.jpg
 7     wm_text=${f:0:10}
 8     echo "water mark: "$wm_text
 9     convert -fill white -pointsize 96 -draw "text 2700,160'$wm_text'" $f $wm_file 2> ../log
10     rm $f
11 done

 

5、圖片壓縮

原始的圖片太大,可以適當壓縮下:

DPI 設置為400,壓縮成原來的25%

1 # 當前目錄 $wordDir/imgs
2 
3 for f in `ls . | grep jpg`
4 do
5     convert -density 400 -geometry 25% $f ../minImgs/$f
6 done 7 8 cd $workDir

6、合成 gif

這里 imageMagick 默認的一個 tick 是1/100s,這里50個 tick,就是50/100,就是半秒。可以根據自己的需求,多試幾次。

1 # 當前目錄 $workDir
2 
3 convert -delay 50 minImg/*.jpg res.gif 2>>log

 

最后,上結果。

(超過10M 了 T T)

http://pan.baidu.com/s/1sjuizQP

 

附全部代碼:

 1 #!/bin/sh
 2 if [[ $# != 1 ]]
 3 then
 4     echo "Usage: sh makeGif.sh srcDir"
 5     exit 1
 6 fi
 7 
 8 SRCDIR=$1
 9 WORKDIR=gifs
10 mkdir $WORKDIR
11 mkdir -p $WORKDIR/imgs
12 mkdir -p $WORKDIR/minImgs
13 
14 # 准備文件
15 cd $WORKDIR
16 cp $SRCDIR/*.jpg imgs/
17 
18 cd imgs
19 for f in `find *.jpg | tr ' ' '_'`
20 do
21     mv "`echo $f | tr '_' ' '`" $f 
22 done
23 
24 # 當前目錄 $WORKDIR/imgs
25 
26 for f in `ls . | grep jpg` 
27 do
28     echo "current img: "$f
29     wm_file=${f:0:10}.jpg
30     wm_text=${f:0:10}
31     echo "water mark: "$wm_text
32     convert -fill white -pointsize 96 -draw "text 2700,160'$wm_text'" $f $wm_file 2> ../log
33     rm $f
34 done
35 
36 # 當前目錄 $wordDir/imgs
37 
38 for f in `ls . | grep jpg`
39 do
40     convert -density 400 -geometry 25% $f ../minImgs/$f.jpg
41 done
42 
43 cd ..
44 
45 # 當前目錄 $WORKDIR
46  
47 convert -delay 50 minImgs/*.jpg res.gif 2>>log

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM