ブログ書くときに画像をリサイズしなきゃいけないんだけど
いちいち、画像編集ソフト開くのも邪魔くさいし
毎回同じサイズにするんだし
とおもってGolangでちょろっと作ってみました。
(はてなブログに書いてたやつをこっちにもってきてるだけだけど)
nfnt/resize ってのを使ってます。
var ( rw, rh uint ) if len(os.Args) < 2 { log.Fatal("Not File") } //Get image size file, err := os.Open(os.Args[1]) _, inFileName := filepath.Split(file.Name()) fmt.Printf(inFileName) onError(err) imgf, _, err := image.DecodeConfig(file) file.Close() w := imgf.Width h := imgf.Height fmt.Printf("Width=%d Height=%d", w, h)
最初に引数を受け取って、そのファイルを開いて
画像のサイズを取得
コマンドラインからファイル名指定してもいいし
画像ファイルをドラックアンドドロップで実行したら
自動的にフルパス受け取って、開くわけ
後々の処理でファイル名だけ欲しいからfilepath.Splitでファイル名だけ抽出する
//Resize image file, err = os.Open(os.Args[1]) img, err := jpeg.Decode(file) file.Close() //サイズ判定 if w >= h { rw = 1200 rh = 0 } else if w < h { rw = 0 rh = 1200 } resizedImage := resize.Resize(rw, rh, img, resize.Lanczos3) outFileName := "re" + inFileName out, err := os.Create(outFileName) onError(err) defer out.Close() jpeg.Encode(out, resizedImage, nil)
後は、リサイズ処理なんだけど
開いたファイルをJPEGでデコートして、img変数に押し込む
そんでもって、サイズ判定ってところは、縦長なのか横長なのか判定して、長い方を1200になるように
Resizeの引数に渡す。
あとは、元のファイル名に”re”ってつけて、保存して終了!
最初、テストの時は、実行するときに引数を手入力して、渡してたわけ。
だけど、そのあとドラッグアンドドロップしたら、なんかうまくいかなくて
どうしてかなーとおもったら、ドラッグアンドドロップしたら、フルパスを渡すみたいで、ファイル名がめちゃくちゃになっちゃってたみたい。
だから、最初のほうで、 filepath.Splitして、ファイル名だけを抽出したわけ。
最初にも書いたけど
ブログ書くときって、画像サイズは、そんなに大きい必要ないし
ちょっと小さくするためにいちいち編集ソフト開くのも面倒
だから、ドラックアンドドロップでサイズ変換したかったわけです。
フリーソフトとかで似たようなものはたくさんあるんだけど
せっかくGo勉強してるから、ちょっと身の回りの簡単なツールぐらいと思って
作ってみました。
コードもこれもしないとあれもしないとで継ぎ接ぎ感満載のコード(笑)