uploadされた写真をリサイズする方法

More than 3 years have passed since last update.


目的:

 formを使いuploadされた写真をrevel側で受け取り、その後リサイズする方法


環境:

Mac 10.10.1

go version 1.3.1

revel


実装内容:

 formのinputから写真をuploadする。その後revel側で受け取りDecodeする。そのごresizeした写真を書き出すまでを実装する。resizeに関してはrevel及び標準パッケージではなくnfntのライブラリーを使わせていただく


参考文献

https://github.com/nfnt/resize

http://tt-house.com/2014/07/golang-image-resize-onmemory.html

非常にわかりやすい説明とサンプルがあり大変助かりました。

ありがとうございます。


ソースコードと説明:

まずはformから写真データを受け取ります。一部抜粋なので適宜内容は変更願います。


photo.html

<label><strong>Photo Image</strong></label>

<input id="uploadImage" type="file" name="image">

次にencodeし、resizeして書き出すところまでします。


photo.go

func (c *Shop) BytesDataOfImage(data *os.File){

var img image.Image
var err error

// make decode image data
img, _, err = image.Decode(data)
c.errorHandler(err)

resizedimg := resize.Resize(680, 0, img, resize.Lanczos3)

// make bytes data
buf := new(bytes.Buffer)
err = jpeg.Encode(buf, resizedimg, nil)
out, err := os.Create("resizedTest.jpg")
c.errorHandler(err)
defer out.Close()
}


 resize.Resizeでサイズを指定しencodeしたimgを加工します。resize.Lanczos3は圧縮する際のアルゴリズムです。詳しくはGithubご参照ください。モアレが結構発生しているので縦線なんかは偽色が発生するかも?

 resize後のデータはjpegにencodeし別名で保存しています。非常に簡単にできました。