LoginSignup
22
18

More than 5 years have passed since last update.

golangでImageMagickを触りたい

Last updated at Posted at 2015-11-17

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!!")
}
22
18
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
22
18