我想用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!!")
}
广告
将在 10 秒后关闭
bannerAds