golangでImageMagickを触りたい
これ使う。
https://github.com/gographics/imagick
debianな人は libmagickwand-dev
が必要なので入れておく。
redhatな人は ImageMagick-devel
こっち。
MagickWand の API ラッパーなので基本他と一緒。
なのでいったん他の言語(phpとか)で試してからgolangに書き下すといいかんじ。
サンプル
-
base.jpg
の上に -
overlay.png
を100x100
にリサイズして - ど真ん中に乗せて
-
png
フォーマットで - stdout に出力する
- と同時に
out.png
にも出力
package main
import (
"fmt"
"os"
"github.com/gographics/imagick/imagick"
)
func main() {
imagick.Initialize()
defer imagick.Terminate()
// 下地
mw1 := imagick.NewMagickWand()
defer mw1.Destroy()
err := mw1.ReadImage("base.jpg")
if err != nil {
panic(err)
}
w1 := mw1.GetImageWidth()
h1 := mw1.GetImageHeight()
// 上モノ
mw2 := imagick.NewMagickWand()
defer mw2.Destroy()
err = mw2.ReadImage("overlay.png")
if err != nil {
panic(err)
}
// リサイズして
err = mw2.ResizeImage(100, 100, imagick.FILTER_POINT, 0)
if err != nil {
panic(err)
}
w2 := mw2.GetImageWidth()
h2 := mw2.GetImageHeight()
// ど真ん中に乗せる
err = mw1.CompositeImage(mw2, mw2.GetImageCompose(), int((w1-w2)/2), int((h1-h2)/2))
if err != nil {
panic(err)
}
err = mw1.SetFormat("png")
if err != nil {
panic(err)
}
// stdoutに吐く
blob := mw1.GetImageBlob()
os.Stdout.Write(blob)
// ファイルにも吐く
mw1.WriteImage("out.png")
fmt.Fprintln(os.Stderr, "FINISH!!")
}