Language
Banner
Home > Projects > CGM & GMETA轉檔腳本

Home

Projects

Memo

Links

Contact







簡述
  • 本BASH Script可將經由NCAR Graphics或RIPv4所產生的CGM / GMETA檔切割後轉換為GIF / JPG / PNG等格式之圖檔。
註:會使用到ctrans、med、ncgmstat及convert指令,故可能需要先安裝NCAR Graphics以及ImageMagick。
操作方式
請先於Script中設定以下變數:
  • 圖檔輸出資料夾(變數名稱OPDir)
  • 輸出檔案之檔頭(變數名稱OUTprefix)
  • 輸出檔案之格式(變數名稱OUTformat)
  • ctrans指令所用參數(變數名稱ctransArg,預設為-d ps.color
  • convert指令所用參數(變數名稱convertArg,預設為-trim -density 300
  變數設定完畢後即可以以下指令執行本腳本:bash CGMConverter.sh 待處理之圖檔檔名
  其中,輸出檔案所支援之格式可用identify -list format指令查詢;另外ctrans、convert指令所用之參數若無特殊需求則無須修改。程式將會依序執行以下動作:
  1. 檢查ctrans/med/ncgmstat/convert指令之可用性
  2. 檢查輸入檔案是否存在
  3. 檢查輸出資料夾是否存在,若不存在會詢問您是否要建立該資料夾
  4. 以med指令將原始圖檔切割為個別的檔案(轉為ncgm檔暫存於輸出資料夾中)
  5. 轉檔
  6. 移除暫存檔
授權方式:
本軟體係採用創用CC-GNU GPL第2.0版或任何更新版本條款授權。 CC-GNU GPL
下載連結 版本 檔案大小 檔案格式 日期
腳本檔
1.0.0.1 2.70 KB
.sh 腳本檔
2014 Aug.1
從GitHub上下載:https://github.com/Cypresslin/CGM_GMETA-Image-Converter
運行環境:Linux
註:下載後可在Linux上以chmod u+x賦予其執行之權限。

若您沒有前述之軟體,可至其官方網站下載:ImageMagick - http://www.imagemagick.org/
                    NCL - http://www.ncl.ucar.edu/

運行畫面
指令列
Command Line

原始碼
#!/bin/bash
##############################################################
# CGM/GMETA Image Converter    Copyright (C) 2012 Cypresslin #
#        This script is distributed under GNU GPLv2.         #
# Visit http://cypresslin.web.fc2.com/ for more information. #
#                                                            #
# Usage: bash CGMConverter.sh YOUR_CGM.cgm                   #
##############################################################


#===== User Modification Area =====
 INcgm="$1"
 OPDir="./Output/"
 OUTprefix="CASEName-"
 OUTformat=".png"                          # png recommended
 ctransArg="-d ps.color"
 convertArg="-trim -density 300"
#===== End of User Modification =====
#
TmpFN="Temp-"                             # Temp file prefix
#----- Checking User-Defined Variables -----
OPDir=${OPDir%"/"}"/"                   # Add a "/" after the output directory variable
OUTformat="."${OUTformat#"."}    # Add a "." before the output format variable
#----- Checking necessary tools -----
type ctrans >/dev/null 2>&1 || { echo >&2 "cmd: ctrans not found, NCARGraphics required."; exit 1; }
type med >/dev/null 2>&1 || { echo >&2 "cmd: convert not found, NCARGrphics required."; exit 1; }
type ncgmstat >/dev/null 2>&1 || { echo >&2 "cmd: ncgmstat not found, NCARGraphics required."; exit 1; }
type convert >/dev/null 2>&1 || { echo >&2 "cmd: convert not found, ImageMagick required."; exit 1; }

#----- Checking Existence -----
[  -f $INcgm ] || echo -e "\033[1;31mInput File Does Not Exist!\033[m"; exit 1
# InputFileOK
Frames=`ncgmstat -c $INcgm`
echo -e "File: \033[1;33m$INcgm\033[m , with \033[1;33m$Frames\033[m frames"
if [ -d $OPDir ]; then
    #OutputDirOK
    echo -e "Output File goes to \033[1;33m$OPDir\033[m"
else
    echo "Output DIR Does Not Exist"
    read -p "Creat it Now? (y/n): " MKDIR
    if [ $MKDIR = "y" -o $MKDIR = "Y" ]; then
      echo -en "mkdir $OPDir : \033[1;31m"
      mkdir $OPDir 2>&1 || { echo -e >&2 "\033[m"; exit 1; }
      echo -e "\033[1;33mDONE\033[m"
    else
      echo -e "\033[1;31mProgram Terminated\033[m"
      exit 0
    fi
fi
#===== Generates *.ncgm =====
echo -ne "File Splitting...(${INcgm#*.} > .ncgm) \033[1;31m"
med -e "read $INcgm" -e "split $Frames $OPDir$TmpFN"
if [ $? != 0 ]; then
    echo -e "Splitting FAILED \033[m"
    exit 1
else
    echo -e "\033[1;33mDONE\033[m"
fi
echo "Format Converting... ncgm > ps > $OUTformat"
i=0
while [ $i -lt $Frames ]
do
    let "i = $i + 1"
    TmpFile=`printf $OPDir$TmpFN%03d.ncgm $i`
    OutTmp=`printf $OUTprefix%03d$OUTformat $i`
    ctrans $TmpFile $ctransArg >TEMP.ps
    convert TEMP.ps $convertArg $OPDir$OutTmp
done
echo "Removing Temporary Files"
rm $OPDir*.ncgm
rm TEMP.ps
echo -e "\033[1;33m=== Job Done ===\033[m"

inserted by FC2 system