我正在使用" SVProgressHUD"装载机。当我想从url加载图像时,我使用异步处理在后台加载图像。完成下载后,我正在更新UI。在那个时间段内,我在imageview上使用了一个占位符,并使用了#34;请等待.."。但我想使用像#" Instagram"这样的装载机。这意味着,当从在线加载图像时,它会加载原始图像的模糊图像,在下载图像时,模糊图像会显示原始图像。
任何人都可以建议我怎么做?
答案 0 :(得分:4)
您正在谈论的内容是渐进式JPEG 。
渐进式JPEG(PJPEG)是一种存储多个的图像格式, 个人“扫描”一张照片,每张都有不断增加的水平 详情。放在一起时,扫描可以创建完整质量的图像。该 第一次扫描给出了非常低质量的图像表示,并且 每次扫描都会进一步提高细节和质量。 使用PJPEG下载图像时,我们可以将图像渲染为 我们有第一次扫描。随后的扫描通过,我们更新 图像并以越来越高的质量重新渲染。
因此,您必须以这种现代渐进格式加载图像。您可以按照一种方法,在保存在服务器上之前将每个图像转换为适当的渐进格式。有几种工具可用于不同类型的服务器。 E.g jpegtran
要检查图片是否为渐进式图片,您可以使用此tool或tool2。您可以搜索许多可用工具的在线工具。
现在 iOS
您可以按照tutorial
进行操作有些图书馆
Concorde
DFImageManager
答案 1 :(得分:0)
假设您可以控制图像的托管,您可以托管较低分辨率的图像并进行2次抓取,一次用于较低分辨率,另一次用于较高分辨率。如果您将较低分辨率图像的文件大小设置得显着缩小,则在获取完整图像之前将完成对其的提取,并使用此图像填充UIImageView
,直到您可以替换它为止。
纯粹的示例代码如下所示:
let imageView = UIImageView()
let lowResOperation = NSBlockOperation {
guard let imageData = NSData(contentsOfURL: NSURL(string: "https://myhost.org/low-res-image")!),
image = UIImage(data: imageData) else { return }
if imageView.image == nil {
imageView.image = image
}
}
let highResOperation = NSBlockOperation {
guard let imageData = NSData(contentsOfURL: NSURL(string: "https://myhost.org/high-res-image")!),
image = UIImage(data: imageData) else { return }
imageView.image = image
}
let backgroundQueue = NSOperationQueue()
backgroundQueue.addOperations([lowResOperation, highResOperation], waitUntilFinished: true)