我想用Golang来操作ImageMagick
我想用golang来使用ImageMagick。
使用这个。
https://github.com/gographics/imagick
对于使用Debian的人来说,需要安装libmagickwand-dev。
对于使用Redhat的人来说,需要安装ImageMagick-devel这个。
由于 MagickWand 的 API 包装器与其他基本相同,所以建议先在其他语言(如 PHP)中尝试一次,然后再用 Golang 重新编写,效果会很好。
样本
base.jpg の上に
overlay.png を 100×100 にリサイズして
ど真ん中に乗せて
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!!")
}