无法从 URL 获取图像以在 UIImage 中快速更新

Posted

技术标签:

【中文标题】无法从 URL 获取图像以在 UIImage 中快速更新【英文标题】:unable to get image from URL to update in UIImage in swift 【发布时间】:2019-02-04 05:57:06 【问题描述】:

我正在尝试使用来自 web api 的图像更新 tableview 单元格。 根据下面的链接,我试过了,但即使图像存在,它也会在图像中给出 nil。

Update table cell image asynchronously.

下面是我的代码,请让我知道我错过了它。

DispatchQueue.global(qos: .background).async  [weak self] () -> Void in
            if let url = NSURL(string: "https://myantion.eu/data/sol.svg")
                    if let data = NSData(contentsOf: url as URL) 
                        let imageAux = UIImage(data: data as Data)

                        DispatchQueue.main.async 
                                cell.imgFlag.image = imageAux
                        
                    
                
        

即使图像存在,imageAux 也会给我 nil 值

根据以下建议,即使尝试使用 UIWebView 仍然没有结果,下面是代码:

> let fileURL:URL = URL(fileURLWithPath:
> "https://myantion.eu/data/sol.svg")
>             let req = URLRequest(url: fileURL)
>             DispatchQueue.main.async 
>                                             cell.webVw.loadRequest(req)
>                                        
>             
>            

【问题讨论】:

这会将我带到一个带有图像的网站,但似乎不是图像本身的URL 参见***.com/questions/35691839/… 看起来 UIImage 初始化程序采用 png 或 jpeg,但不是 SVG。您需要执行某种转换或使用 webview URL 中的图片类型是 .svg 而不是 UIImage。因此,最好先将 .svg 转换为 .jpg 或 png。 ***.com/questions/32808901/svg-url-to-uiimage-ios github.com/mchoe/SwiftSVG 使用这个插件。 .svg url to UIImage iOS的可能重复 【参考方案1】:

我尝试按照以下参考链接中的说明安装 SVGKit,它对我有用。 How to display .svg image using swift

DispatchQueue.global(qos: .background).async  [weak self] () -> Void in
            if let url = NSURL(string: "https://restcountries.eu/data/est.svg")
                    if let data = NSData(contentsOf: url as URL) 
                        let imageAux = UIImage(data: data as Data)

                        DispatchQueue.main.async 
                    let anSVGImage: SVGKImage = SVGKImage(data: data as Data)
                                cell.imgFlag.image = nSVGImage.uiImage
                        
                    
                
        

在您现有的代码中只需添加一行代码: 让 anSVGImage: SVGKImage = SVGKImage(data: data as Data) 它在我的最后工作。

【讨论】:

【参考方案2】:

我尝试使用WKWebView,对我来说,下面的代码正在运行:

if let svgString =
  try ? String(contentsOf: URL(string: "https://myantion.eu/data/sol.svg") !) 
    self.wkWebView.loadhtmlString(svgString, baseURL: URL(string: "https://myantion.eu/data/sol.svg") !)
  

【讨论】:

以上是关于无法从 URL 获取图像以在 UIImage 中快速更新的主要内容,如果未能解决你的问题,请参考以下文章

无法从 MPMediaItemPropertyArtWork 获取 UIImage

未设置来自 URL 的 UIImage 图像

获取从 UIImagePickerController 中选择的 UIImage 的 URL

使用本地图像 URL 或 UIIMage 获取 PHAsset?

通过 Afnetworking 2.0 从 URL 获取一半大小的 UIImage

无法在第二个视图控制器中更新我的 UIImage