2017-05-08 78 views
1

我有PNG图片,大小从2MB到12MB不等。我加载这些图像中的一个为可经由下面的代码在我viewDidLoad中使用SDWebImage一个ImageView的:iOS快速加载图片的技巧

self.imageView.contentMode = UIViewContentMode.ScaleAspectFit 
self.imageView.sd_setImageWithURL(NSURL(string: imageURL)) 

有时需要花费高达17秒,以这种图像加载到视图。我在这里做错了什么?我只是将这些图像加载到我的视图中,所以我不认为这需要很长时间。还有什么其他的事情可以更快地加载图像?

创建一个较小的图像加载是唯一的选择吗?

+0

你在不同的网络中测试过吗? – user3581248

+0

你可以做的不多。如果图像大小为12MB,即使下载速度为1MB /秒,也需要12秒才能下载图像。 – jokeman

+0

@jokeman感谢您的回复。这些是我从iPhone 6上传的图像,所以没有什么不同寻常的 – JK140

回答

0

压缩图像,并加载它。如果您正在访问该网络通过确保您已启用高速缓存,使加载速度更快

+0

非常感谢您的答案!你能更详细地解释如何在加载之前压缩图像吗?这是我能在Swift或后端任务中做的事吗? SDWebImage默认提供缓存。当我重新加载视图时,它会立即加载图像。这只是最初的负载,可能需要17秒。 – JK140

+0

加载如此大的图像并不是个好主意......它更好地压缩和服务器端并发送给客户端...所以带宽可以保存...服务器端的压缩取决于您在srevr中使用的语言...我相信....语言将有压缩库 – Sharath

0

我们有一些所谓intervention,我们有我们的后端。它为我们提供了我们可以通过URL

后卫让后提供的宽度和高度缩放图像的URL网址= IMAGEURL其他{返回}

VAR smallURL = URL + “/” +“ (20)” +‘/’+‘(20)’

所以,我在这里做的是,我加载具有尺寸(20×20)的图像第一并显示为模糊的图像,并且当与实际图像大小已加载我将其替换为原始图像。

这样,它是一个很好的用户体验,因为用户不必等待图像加载,而是获得图像加载的印象。

,这些东西在图像视图的扩展这样做,你可以直接称呼其为:

imageView.setImage(IMAGEURL: “https://i.stack.imgur.com/GsDIl.jpg”)

extension UIImageView { 
    func setImage(imageURL : String?,size : CGFloat = ScreenSize.width){ 


    guard let url = imageURL else { return } 
     var originalURL = url 
     var smallURL = url + "/" + "\(20)" + "/" + "\(20)" 

    let actualImageUrl = URL(string: name) 
    let smallURL = URL(string: smallName) 
    self.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5) 



    self.yy_setImage(with: smallURL, placeholder: nil, options: .showNetworkActivity) { (image, _, _, _, _) in 

     guard let _ = image else { return } 

     let blurredImg = image?.applyBlurWithRadius(0.5, tintColor: UIColor.black.withAlphaComponent(0.4), saturationDeltaFactor: 1.0) 
     self.image = blurredImg 
     self.yy_setImage(with: actualImageUrl, placeholder: blurredImg, options: .progressiveBlur, completion: { [weak self] (image, url, type, _, _) in 
      self?.image = image 
     }) 
    } 
    } 
} 

相反使用SDWebImage我已经使用YYWebImage它提供了更多的功能,它基于SDWebImage。

希望它有助于!

0

一些其他的建议,如缓存和模糊图像预览是好的,但我建议,另外,你考虑优化图像更好的首先。

看看我的回答大约减少图象缩小的应用程序文件的大小相关的问题,

Reducing iOS App file size

PNG文件是针对iOS的首选图像格式,但你也可以使用JPEG采取小打在加载时间,但文件减少的收益往往超过这个一个数量级或更多。基本上,如果图像包含像照片一样的大片连续色调,那么JPEG可能会更好。你可以在Photoshop中玩,但是7美元(从14开始销售)无损照片压缩器可以毫不费力地完成一项出色的工作。

即使PNG您可以通过删除位深度来节省大小。这是如何损失照片压榨机工程降到8位。如果你不透明,你可以放弃alpha通道,或者如果你需要有限的,你可以使用一个1位的alpha通道从Photoshop中。如果你想去核心,有可能使用8位的alpha通道8位JPEG。见

http://calendar.perfplanet.com/2010/png-that-works/

您也可以与位深度低于8的一些图像播放。

如果你想去真正的硬核考虑使用WebP。有一些开源的iOS实现,如https://github.com/seanooi/iOS-WebP

你可能也想看看分辨率。视网膜图像非常适合文字等细节,但我常常在图像的视网膜显示屏上使用1x分辨率图像。这很好,因为如果你需要阅读文本的解决方案,那么很可能PNG压缩得非常好。

如果您的图像具有适合JPEG的连续色调以及更适合PNG的某些区域(如文本),您可以发疯并将图像分解为JPEG和8位PNG alpha通道并在下载后合并这两个图像。