Go
ImageMagick
golang

golangでImageMagickを触りたい

More than 1 year has passed since last update.

golangでImageMagickを触りたい

これ使う。
https://github.com/gographics/imagick

debianな人は libmagickwand-dev が必要なので入れておく。
redhatな人は ImageMagick-devel こっち。

MagickWand の API ラッパーなので基本他と一緒。
なのでいったん他の言語(phpとか)で試してからgolangに書き下すといいかんじ。

サンプル

  • base.jpg の上に
  • overlay.png100x100 にリサイズして
  • ど真ん中に乗せて
  • 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!!")
}