LoginSignup
9
8

More than 5 years have passed since last update.

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

Posted at

目的:

 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し別名で保存しています。非常に簡単にできました。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8