在Go语言中创建一个返回Image Magick对象的函数,返回类型为图像魔术对象。

huangapple go评论126阅读模式
英文:

Create a function with return type of image magick object in go lang

问题

我想创建与存储在S3中的图像对应的ImageMagick对象。因此,我正在编写一个函数,该函数将接受必要的参数并返回ImageMagick对象。但是,我没有成功。这是我正在使用的Imagick库

  1. func main() {
  2. mw := imagick.NewMagickWand()
  3. defer mw.Destroy()
  4. mw = ObjImagick(bucketName, keyName, region)
  5. }
  6. func ObjImagick(bktName string, kName string, region string) () {
  7. s3Client := s3.New(session.New(), &aws.Config{Region: aws.String(region)})
  8. params := &s3.GetObjectInput{
  9. Bucket: aws.String(bktName),
  10. Key: aws.String(kName),
  11. }
  12. out, err := s3Client.GetObject(params)
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. img, err := ioutil.ReadAll(out.Body)
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. mw := imagick.NewMagickWand()
  21. defer mw.Destroy()
  22. err = mw.ReadImageBlob(img)
  23. if err != nil {
  24. log.Fatal(err)
  25. }
  26. return mw
  27. }
英文:

I want to create image magick object corresponding to images stroed in S3. So, i was writing a function which will take necessary arguments and return the image magick object. But, no luck with it. This is the Imagick Library which i am using.

  1. func main() {
  2. mw := imagick.NewMagickWand()
  3. defer mw.Destroy()
  4. mw = ObjImagick(bucketName, keyName, region)
  5. }
  6. func ObjImagick(bktName string, kName string, region string) ( ) {
  7. s3Client := s3.New(session.New(), &aws.Config{Region: aws.String(region)})
  8. params := &s3.GetObjectInput{
  9. Bucket: aws.String(bktName),
  10. Key: aws.String(kName),
  11. }
  12. out, err := s3Client.GetObject(params)
  13. if err != nil {
  14. log.Fatal(err)
  15. }
  16. img, err := ioutil.ReadAll(out.Body)
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. mw := imagick.NewMagickWand()
  21. defer mw.Destroy()
  22. err = mw.ReadImageBlob(img)
  23. if err != nil {
  24. log.Fatal(err)
  25. }
  26. return mw
  27. }

答案1

得分: 2

好的,以下是翻译好的内容:

  1. func ObjImagick(bktName string, kName string, region string) *imagick.MagickWand {
  2. .......................
  3. mw := imagick.NewMagickWand()
  4. // defer mw.Destroy() 这会在 ObjMagick 返回时销毁 wand。
  5. // 所以你不能在这里调用它,你的函数调用者需要处理销毁对象的操作。
  6. err = mw.ReadImageBlob(img)
  7. if err != nil {
  8. log.Fatal(err)
  9. }
  10. return mw
  11. }
  12. 然后调用者需要调用 `.Destroy()`例如
  13. func main() {
  14. mw := ObjImagick(bucketName, keyName, region)
  15. defer mw.Destroy()
  16. }

希望对你有帮助!如果还有其他问题,请随时提问。

英文:

Well, NewMagickWand() returns a *MagickWand, so you can create your function like:

  1. func ObjImagick(bktName string, kName string, region string) *imagick.MagickWand {
  2. .......................
  3. mw := imagick.NewMagickWand()
  4. // defer mw.Destroy() this destroys the wand when ObjMagick returns.
  5. // so you can't do this here, your func caller needs to handle destroying the object.
  6. err = mw.ReadImageBlob(img)
  7. if err != nil {
  8. log.Fatal(err)
  9. }
  10. return mw
  11. }

Then the caller has to call .Destroy(), for example:

  1. func main() {
  2. mw := ObjImagick(bucketName, keyName, region)
  3. defer mw.Destroy()
  4. }

huangapple
  • 本文由 发表于 2016年2月3日 14:02:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/35169590.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定