#目的:
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から写真データを受け取ります。一部抜粋なので適宜内容は変更願います。
<label><strong>Photo Image</strong></label>
<input id="uploadImage" type="file" name="image">
次にencodeし、resizeして書き出すところまでします。
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し別名で保存しています。非常に簡単にできました。