自动为 TEM 照片添加标尺
经常要做透射电镜,每次拿回结果的时候都要手工为其添加标尺(就是在图片的某一角落添加一条一定长度的直线,一般是一厘米,然后上面标注上此段长度的线条代表的实际长度,就和地图的比例尺一样),开始我使用gimp标注,一次两次倒还凑活,太多了就受不了了,于是乎决定写一个脚本来自动处理这种事(机械的活就该机器来干嘛,机器的活总是人来干的话,那咱智慧生物岂不白长了个脑袋不是?!)
挽上袖子开工,思路如下:
1) 根据放大倍数算出一定长度(这里是一厘米)代表的实际长度,以此来产生用于标注的文本。算法根据电镜老师的说明:请将图片在PHOTOSHOP中打开,将图片的尺寸改为8.1cmx5.4cm,此时,在10万倍的情况下,1cm代表100nm
2) 将原图缩小到一定尺寸(8.1cmx5.4cm)
3) 在原图上面右下角贴上文字(就是1中算出的实际尺寸)
4) 把一厘米的长度棒贴到文字下面(长度棒是事先画好的一条棒子),完工!
先是尝试了将图片缩小到8.1cmx5.4cm,结果发现图片很小,很奇怪,不过不论gimp/ps做出来的都是这个德性, 因此将图片缩小为8.1*3cmx5.4*3cm的大小,相应的长度棒也增大三倍,这下产生出来的图片就大而清晰了,呵呵 从此就不必再干这种体力活咯,来个图代表一下先:
![]() |
| 发件人 xiooli |
下面是代码(bar.tiff要自己画,长度是三厘米,这个是gimp上设的三厘米,切忌用尺子在屏幕上量出三厘米哦):
1 #!/bin/bash
2 #Author: xiooli <xioooli[at]yahoo.com.cn, http://joolix.com>
3 #Licence: GPLv3
4 #Version: 20090707
5 #注:三个参数(第三个可选),分别是放大倍数(单位是万倍)、原文件和输出文件
6
7 Mag="$1"
8 [ "$1" = "-h" ] && echo "$0 放大倍数(万倍) 原文件 输出文件(可选)" && exit
9 Infile="$2"
10 Outfile="${3:-"fixed-`basename $2`"}"
11 #标尺图像文件的路径
12 Barpic=$HOME/.Share/bar.tiff
13 Text="`bc -l<<<"10/$Mag*100"`"
14 Text="${Text%.*} nm"
15 #文字位置
16 TextX=560
17 TextY=410
18 #文字与标尺的间距
19 Interval=9
20 Font=Times-New-Roman-Normal
21 FontSize=24
22
23 [ ! "${#@}" -ge 2 ] && echo "参数个数不对。" && exit
24
25 [ -f "$Infile" ] && \
26 convert -resize 689×460 "$Infile" "/dev/shm/resize-tmp.tiff"
27
28 [ -f "/dev/shm/resize-tmp.tiff" ] && \
29 drawtext="convert -font \"$Font\" -fill black -pointsize $FontSize -draw ‘text ${TextX},${TextY} \"$Text\"‘ \"/dev/shm/resize-tmp.tiff\" \"/dev/shm/addtext-tmp.tiff\"" && eval $drawtext
30
31 [ -f "/dev/shm/addtext-tmp.tiff" -a -f "$Barpic" ] && \
32 composite -geometry "+${TextX}+$(($TextY+$Interval))" "$Barpic" \
33 "/dev/shm/addtext-tmp.tiff" "$Outfile"

















最近评论