9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?