如何在下载时在UIImageView中显示渐进式JPEG?

时间:2011-01-19 22:22:16

标签: ios uiimageview png jpeg progressive-download

从网上下载图像并在UIImageView中显示它是相当容易的。但是,这需要在向用户显示图像之前完全下载图像,从而完全击败渐进式JPEG(和PNG)图像。

如何在传输过程中渲染部分下载的图像?我会想象SDK有一些回调函数可以更新图像,但我找不到这样的功能。是否可以使用当前的iOS SDK?

3 个答案:

答案 0 :(得分:10)

我知道这篇文章大约有1年的时间,但是如果有人在寻找它,那么有一个名为NYXImagesKit的项目可以满足您的需求。

它有一个名为NYXProgressiveImageView的类,它是UIImageView的子类。

您所要做的就是:

NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init];
imgv.frame = CGRectMake(0, 0, 320, 480);
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]];
[self.view addSubview:imgv];
[imgv release];

另外,一个不错的选择是将图像保存为interlaced,以便以低质量加载并通过下载进行改进。如果图像没有隔行扫描,则会从上到下加载。

答案 1 :(得分:1)

现在libjpeg-turbo上有一个小型开源库,可以轻松解码和显示渐进式JPEG:

let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
    imageView.load(url)
}

请参阅https://github.com/contentful-labs/Concorde

答案 2 :(得分:0)

您是否尝试部分渲染UIImage,因为didReceiveData被调用...?有点像...

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    //TODO: add some error handling in case the image could not be created
    UIImage *img=[UIImage imageWithData:data];
    if (img) {
        self.imageView.image=img;
    }
}