Golang(Go言語)ドラックアンドドロップで画像リサイズ

ブログ書くときに画像をリサイズしなきゃいけないんだけど
いちいち、画像編集ソフト開くのも邪魔くさいし
毎回同じサイズにするんだし

とおもって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勉強してるから、ちょっと身の回りの簡単なツールぐらいと思って
作ってみました。
コードもこれもしないとあれもしないとで継ぎ接ぎ感満載のコード(笑)

  • tadayoshi
  • 農家やったり、プログラミングしたり、猫と遊んだりしてます。
    農業では、トマトソバージュ栽培とアスパラガスの採りっきり栽培やズッキーニ、オクラ、味グルメ大根などをやってます。
    ソバージュ栽培では、専門書の一部をちょっとだけ執筆しました。
    プログラミングは、今はGolangをホソボソと趣味程度に

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です