ブログ書くときに画像をリサイズしなきゃいけないんだけど
いちいち、画像編集ソフト開くのも邪魔くさいし
毎回同じサイズにするんだし
とおもって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勉強してるから、ちょっと身の回りの簡単なツールぐらいと思って
作ってみました。
コードもこれもしないとあれもしないとで継ぎ接ぎ感満載のコード(笑)