Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios JPEG优化_Ios_Performance_Optimization_Jpeg - Fatal编程技术网

ios JPEG优化

ios JPEG优化,ios,performance,optimization,jpeg,Ios,Performance,Optimization,Jpeg,UITableView中显示了大量图像(600宽,固定高度),我想实现与instagram类似的视觉效果,如下所示: 平滑滚动 图像滚动回屏幕时没有“空白到图像”效果 最小内存开销 我正在使用SDWebImage来实现这一点,但当SDWebImage下载图像时,它会将解压缩后的图像数据缓存在内存中,这会快速显示多次,但会占用大量内存,当应用程序收到内存不足警告时,SDImageCache将刷新所有缓存的图像,当显示的图像滚动回屏幕时,我们得到“空白到图像” 我修改了一些代码来实现缓存压缩的图像,

UITableView中显示了大量图像(600宽,固定高度),我想实现与instagram类似的视觉效果,如下所示:

  • 平滑滚动

  • 图像滚动回屏幕时没有“空白到图像”效果

  • 最小内存开销

  • 我正在使用SDWebImage来实现这一点,但当SDWebImage下载图像时,它会将解压缩后的图像数据缓存在内存中,这会快速显示多次,但会占用大量内存,当应用程序收到内存不足警告时,SDImageCache将刷新所有缓存的图像,当显示的图像滚动回屏幕时,我们得到“空白到图像”

    我修改了一些代码来实现缓存压缩的图像,而不是缓存解压缩的图像,但新的问题来了:图像解压缩太慢了,这一次虽然我们并没有得到 “空白至图像”,但每当显示图像时,滚动都会延迟

    最后,我发现延迟是由JPEG解压引起的,所以我想我需要使用GPU解压JPEG。但是我不知道怎么做,或者

    用这种方式进行优化是完全错误的。有人可以提供帮助吗?

    我也不知道你尝试过什么。但是根据我以前的项目。我是这样做的: 首先使用延迟加载机制(您可以看到
    LazyTableImages
    demo:)。仅下载或加载可见图像。您必须使用其他线程下载图像

    第二,以合适的大小存储图像,您可以处理图像的大小并使用另一个线程存储图像。不要在主线程中使用,合适大小的图像将为您节省大量加载图像的时间,如果您存储的大小不合适,当您加载图像时,imageView将处理图像的大小

    存储JPEG时,如果要压缩,可以使用以下方法

    UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);  // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
    

    这只是我的经验。

    我最近对大图像(2000*1000)做了很多工作,所以我做了很多研究

    首先,您可以了解有关快速解码jpeg文件的第三部分库:。使用此库的示例如下:


    这里有一些关于解压/渲染图像问题的信息:检查

    @Sjoerd谢谢,这次怎么样?(我写pool english)谢谢你的帮助,我使用SDWebImage做了类似的事情,但是当图像缓存被清除并且imageview滚回屏幕时,这个实现会导致“空白到图像”的效果,我认为如果图像解压缩花费太多时间,异步加载总是会导致这个问题。@DongXu无论你使用LazyTableImages还是SDWebImages,机制都是一样的,比如如果你的imageViews大小是60*60,你应该存储的图像是60*60,也许你下载的图像更大(比如100*100),你应该存储60*60,然后加载一个缓存。当你收到内存警告时,你应该清除缓存(很抱歉,我不能@you)。我对低分辨率图像没有性能问题,但当处理高分辨率图像(如600*1000)时,解压缩会花费大部分时间time@DongXu您应该在另一个线程中处理更高分辨率的图像,而不是在主线程中,我认为这与下载相比是非常短的。你是对的,我也尝试过这样做:在另一个线程中解压高分辨率jpeg,但当图像缓存清除并将imageview滚回屏幕时,我会得到“空白到图像”的效果,而instagram在从缓存加载图像时从未得到过这种效果