在 go lang 中创建一个返回类型为 image magick 对象的函数

我想创建与 S3 中的图像对应的图像魔法对象。所以,我正在编写一个函数,它将接受必要的参数并返回图像魔法对象。但是,没有运气。这是我正在使用的Imagick 库。


     func main() {

        mw := imagick.NewMagickWand()

        defer mw.Destroy()

        mw = ObjImagick(bucketName, keyName, region)

    }




  func ObjImagick(bktName string, kName string, region string) ( ) {


    s3Client := s3.New(session.New(), &aws.Config{Region: aws.String(region)})

        params := &s3.GetObjectInput{

        Bucket: aws.String(bktName),

        Key: aws.String(kName),

        }


    out, err := s3Client.GetObject(params)

    if err != nil {

        log.Fatal(err)

    }


    img, err := ioutil.ReadAll(out.Body)

    if err != nil {

        log.Fatal(err)

    }      


    mw := imagick.NewMagickWand()

    defer mw.Destroy()


    err = mw.ReadImageBlob(img)

    if err != nil {

        log.Fatal(err)

    }


       return mw

}


小怪兽爱吃肉
浏览 169回答 1
1回答

沧海一幻觉

好吧,NewMagickWand()返回 a *MagickWand,因此您可以创建您的函数,例如:func ObjImagick(bktName string, kName string, region string) *imagick.MagickWand {    .......................    mw := imagick.NewMagickWand()    // defer mw.Destroy() this destroys the wand when ObjMagick returns.    // so you can't do this here, your func caller needs to handle destroying the object.    err = mw.ReadImageBlob(img)    if err != nil {        log.Fatal(err)    }    return mw}然后调用者必须调用.Destroy(),例如:func main() {    mw := ObjImagick(bucketName, keyName, region)    defer mw.Destroy()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go