ImageMagickで画像ファイルのトリミングをしたい

ImageMagickで、結構な数の画像をトリミングしようと思ってF#でスクリプトを書いた。F#の文字列内で"(ダブルクオテーション)を使うためには@" "" "みたいに

  • @を使う
  • "(ダブルクオテーション)は重ねて書く

ってのに気がつかなくてハマったのでメモ。

//imagemagickのコンバータ
let convert arg = 
    System.Diagnostics.Process.Start(@"C:\Program Files\ImageMagick-6.9.0-Q16\convert.exe", arg);
//スクリプトがあるフォルダ下のimagesフォルダのpngファイルゲッツ
let png_files = System.IO.Directory.GetFiles(__SOURCE_DIRECTORY__ + "\images", "*.png", System.IO.SearchOption.AllDirectories);
//トリミング用の引数作成
let make_arg png =  
    let extension = System.IO.Path.GetExtension(png)
    let file      = System.IO.Path.GetFileNameWithoutExtension(png) + "_trim"
    let dir       = System.IO.Path.GetDirectoryName(png) + "/../trim/"
    let option =  " -crop 930x720+170+1 " 
    let arg = option + @" """ + png + @""" """ + dir + file  + extension + @""""
    printf "%s" dir
    arg
//pngファイルをマルっとトリミング
png_files |> Array.map (fun file -> file |> make_arg |> convert)

文字列のクオート周り

F#3.0からトリプルクオート(""")でイケるって話をF# for C# developperでみた。あと@付ではじまる文字列はverbatim stringsって呼ぶそうだ。

"the last character is tab\t" 
@"the last character is tab\t"
"this is \"good\"."
@"this is ""good""."
"""this is "good"."""
""""good" dog"""