我想创建与 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
}
好吧,NewMagickWand()
返回一个*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()
}