Goでバイナリでファイルを受け取った際にそのまま加工したい時
結論
bytes パッケージを使おう
Go言語 パッケージ bytes
ソースコード
main.go
package main
import (
"bytes"
"fmt"
"image"
"image/jpeg"
"io/ioutil"
"os"
)
func main() {
// ファイルの読み込み
buf, _ := ioutil.ReadFile("input.jpg")
// バイナリファイルをReaderに読み込み
reader := bytes.NewReader(buf)
// 画像変換
img, _, err := image.Decode(reader)
if err != nil {
fmt.Errorf("err %v", err)
}
// ファイル作成
f, err := os.Create("output.jpg")
if err != nil {
fmt.Errorf("err %v", err)
}
defer f.Close()
opt := jpeg.Options{
Quality: 90,
}
// 今回はJPEGだがPNGとかでもできそう
if err = jpeg.Encode(f, img, &opt); err != nil {
fmt.Errorf("err %v", err)
}
}