首页 > Script > 自动为 TEM 照片添加标尺

自动为 TEM 照片添加标尺

[总点击:1010次]
2009年7月7日

经常要做透射电镜,每次拿回结果的时候都要手工为其添加标尺(就是在图片的某一角落添加一条一定长度的直线,一般是一厘米,然后上面标注上此段长度的线条代表的实际长度,就和地图的比例尺一样),开始我使用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"

Script , ,

本文的评论功能被关闭了.