如何使用SDWebImage下载和保存CGImage

卡拉

我正在尝试使用SDWebImage从外部URL下载图像并返回它。我不想在视图上设置它。这是我正在使用的代码,但是没有用。我要归零。但是我知道我要传递的网址有效,因为我可以在浏览器中看到它。我究竟做错了什么?

func downloadImage() -> CGImage {
   var myImage: CGImage?
   let myUrl = URL(string: "my-url-here.com")

   SDWebImageDownloader.shared.downloadImage(with: myUrl, completed: { (image, data, error, true) in
       print("Completed")
       if image != nil {
           myImage = image?.cgImage
       }
   })

   return myImage!
}

我也尝试过这个版本,也没有运气:

func downloadImage() -> CGImage {
    var myImage: CGImage?
    let myUrl = URL(string: "my-url-here.com")

    SDWebImageManager.shared.loadImage(with: myUrl, options: .continueInBackground, progress: { (received, expected, nil) in
        print(received, expected)
    }, completed: { (downloadedImage, data, error, SDImageCacheType, true, imageUrlString) in
        DispatchQueue.main.async {
            if downloadedImage != nil {
                myImage = downloadedImage?.cgImage
            }
        }
    })

    return myImage!
}

SDWebImage是一个异步库。您不能只是return结果。通常,将使用@escaping闭包将结果提供给调用方。例如

func downloadImage(completion: @escaping(CGImage?) -> Void) {
    let url = URL(string: "https://my-url-here.com")!

    SDWebImageDownloader.shared.downloadImage(with: url) { image, _, _, _ in
        completion(image?.cgImage)
    }
}

而且您可以像这样使用它:

downloadImage { image in
    guard let image = image else { return }

    // use image here
}

// but not here

但是,让我们退后一步,看看整个模式。您说您想“保存”结果。如果您要谈论将其保存到持久性存储中,则根本不想使用CGImageUIImage或任何其他方式)。这在计算上效率低下(将资产转换为图像,然后再转换回Data以便可以保存),空间效率低下(必须将整个资产同时加载到内存中),并且可能会带来问题(例如,如果您下载JPG,转换到CGImage,然后尝试重新建立一个JPG,将所得的资产会略有不同,更大,和/或与新JPG伪影)。如果您只是预下载资产,请使用简单的网络库(例如Alamofire或)URLSession

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Java从Internet下载和保存文件?

SDWebImage 4 - 如何取消下载请求?

如何在SDwebimage中使用成功和失败块

使用SDWebimage下载并缓存MKMapSnapshotter图像

如何下载和使用jface

如何在使用 SDWebImage 下载图像后立即做一些事情?

iOS 应用程序:如何使用 kingfisher/sdwebimage 下载 aws s3 映像

如何使用JavaScript下载和保存文件(没有浏览器)

如何使用 JavaScript 或 jQuery 正确保存和下载 div 内容

如何在Android上使用phonegap / cordova下载和保存文件

使用SDWebimage使用网址一一下载图像

如何在Android中下载和保存图像

如何在DBFS中保存和下载本地csv?

使用SDWebImage下载的图像的UIImageView幻灯片显示

使用 java (HomeMade Cloud) 保存和下载文件

如何使用Python下载和重写文件?

如何将CGImage保存到Swift中的数据?

理解SDWebImage下载器

如何保存和使用多行?

如何使用python pptx从powerpoint ppt下载或保存图片

如何使用react保存从服务器下载的文件?

如何使用nodeJS下载保存在gridFS中的文件

如何下载/保存我自己的网站供菜鸟使用

如何使用CURL将文件下载并保存到本地路径

如何使用SDWebImage加载webp图像?

使用SDWebImage下载图像,错误-999(或)SDWebImageErrorDomain代码= 0“下载的图像的像素为0

使用SDWebImage并将图像保存到公共画廊

如何使用 R 和 googledrive 包从谷歌驱动器下载多个文件并将其保存到笔记本电脑上的特定文件夹

如何使用Powershell System.Net.WebClient和自定义用户代理字符串保存“浏览器启动的下载”文件?