从存储中检索图像时调整图像大小以加快加载速度

时间:2017-02-19 02:38:44

标签: ios swift3

我正在从缩略图中检索图片,但图片太大,所以当放在桌子上时,加载所有内容需要很长时间。有没有人有关于如何将图像大小调整为大约50 * 50的建议,以便tableView加载更快? Swift3代码示例将不胜感激,因为我不熟悉编码。

 databaseRef.child(text).child("profit").observe(.value, with: { (snapshot) in
                if snapshot.value is NSNull{
                }else{
                    let equal = snapshot.value

                    /*friendsCell.profilePicture.loadImageUsingCacheWithUrlString(urlString: databaseProfilePic as! String )*/
                    self.imageLoader.startAnimating()
                   !
                    let data = NSData(contentsOf: NSURL(string: wow as! String)! as URL)

                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {

                        profit.sd_setImage(with: NSURL(string: profit as! String)! as URL, placeholderImage: UIImage(data: data! as Data))

                        self.imageLoader.stopAnimating()
                    }

                }
            })

3 个答案:

答案 0 :(得分:0)

  

我正在从FirebaseStorage中检索图片以获取缩略图,但图片太大

我认为您应首先重新考虑缩略图图像如何存储在您的Firebase上,因为从理论上讲,在我看来,缩略图是原始图像的轻量级(低质量)图像,它们不应该像您提到的那么大。最好的选择是将Firebase上的图像调整为在前端卸载。

如果您现在别无选择需要调整图像大小,可以使用一些技术对其进行存档。我建议你阅读这篇文章http://nshipster.com/image-resizing/,其中作者提供了很多方法来调整图像和性能基准。阅读完毕后,您一定可以自己编写代码。

就用户体验而言,我们应该如何减少阻止用户进行交互的时间。我建议你按照以下步骤进行操作

  1. 在加载缩略图时显示占位符图像和加载指示符。
  2. 下载图像任务和调整大小应该在后台线程中运行。
  3. 调整大小后缩略图图像的缓存机制。强烈建议阅读此https://github.com/path/FastImageCache以了解如何存储和检索图像效率。
  4. 图像渲染动画,我们可以考虑如何显示图像,例如在图像视图上立即或部分显示。
  5. 我希望这会有所帮助,我们可以在您真正开展工作时进行进一步讨论。

答案 1 :(得分:-1)

我会在后台线程上下载图像。

  DispatchQueue.global().async {
        // load image here
let data = NSData(contentsOf: NSURL(string: databaseProfilePic as! String)! as URL)

  DispatchQueue.main.async {

    // set the cell data 

   }

    }

答案 2 :(得分:-1)

您应该在服务器中调整图片大小,例如Firebase。您仍将在客户端应用(iOS)中下载相同的图像大小。您可以执行以下操作以进行改进和优化:

  1. 缓存已加载的图像以供将来提取。
  2. 加载数据并异步提取图像 - 这样可以让您看到其他数据,然后下载图像。
  3. 为您的tableView添加分页。
  4. 在Firebase中为您的数据源添加多个属性,例如hq_photolq_photo,以便您可以在tableView中显示低质量照片时获取低质量照片,并在获取高质量照片时获取高质量照片在你的其他屏幕中需要。