注册 登录
主题 : 加载大长图问题
级别: 侠客
UID: 578040
精华: 0
发帖: 87
可可豆: 411 CB
威望: 411 点
在线时间: 291(时)
注册时间: 2016-08-16
最后登录: 2018-11-17
0 楼:  发表于: 2018-11-01 11:00    发自: Web Page
来源于 一般提问 分类

加载大长图问题   

服务器返回一张 150M 左右的大图??用sdwebimage加载 直接内存暴涨崩溃?? 于是用了下列方法?? 不过感觉画质变低了??显示的时候也要等个4、5秒才显示这张图片出来
//大图用于横向滑动
-(UIImage *)imageCompressForSize:(UIImage *)sourceImage height:(CGFloat)viewheight
{
????UIImage *newImage = nil;
????//原图大小
????CGSize imageSize = sourceImage.size;
????CGFloat width = imageSize.width;
????CGFloat height = imageSize.height;

????//希望图片大小
????CGFloat targetHeight = viewheight;
????CGFloat scaleFactor = 0.0;
????CGFloat scaledWidth ;
????CGFloat scaledHeight = targetHeight;
????CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);

????CGFloat heightFactor = targetHeight / height;//希望图片高度/原图高度
????scaleFactor = heightFactor;
????scaledWidth = width * scaleFactor;
????scaledHeight = height * scaleFactor;
????thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;

????CGSize newimgsize = CGSizeZero ;
????newimgsize.height = viewheight;
????newimgsize.width = scaledWidth;
????UIGraphicsBeginImageContext(newimgsize);

????CGRect thumbnailRect = CGRectZero;
????thumbnailRect.origin = thumbnailPoint;
????thumbnailRect.size.width = scaledWidth;
????thumbnailRect.size.height = scaledHeight;
????[sourceImage drawInRect:thumbnailRect];
????newImage = UIGraphicsGetImageFromCurrentImageContext();
????if(newImage == nil){
????????NSLog(@"scale image fail");
????}
????UIGraphicsEndImageContext();
????return newImage;
}
各位大佬 , 有没有好方法推荐,或者第三方????求加载大长图的方法!!!
关键词: ios 开发 问题
级别: 圣骑士
UID: 566785
精华: 0
发帖: 681
可可豆: 708 CB
威望: 708 点
在线时间: 682(时)
注册时间: 2016-06-03
最后登录: 2018-11-06
1 楼:  发表于: 2018-11-01 11:23    发自: Web Page
yywebimage
级别: 侠客
UID: 534609
精华: 0
发帖: 123
可可豆: 132 CB
威望: 132 点
在线时间: 339(时)
注册时间: 2015-12-28
最后登录: 2018-11-16
2 楼:  发表于: 2018-11-01 15:00    发自: Web Page
666加载150M的图片
级别: 侠客
UID: 578040
精华: 0
发帖: 87
可可豆: 411 CB
威望: 411 点
在线时间: 291(时)
注册时间: 2016-08-16
最后登录: 2018-11-17
3 楼:  发表于: 2018-11-01 15:11    发自: Web Page
回 1楼(aitazzd) 的帖子
试了一下,内存爆了几百M  图片显示不出来! 小图片才加载得出来
级别: 侠客
UID: 578040
精华: 0
发帖: 87
可可豆: 411 CB
威望: 411 点
在线时间: 291(时)
注册时间: 2016-08-16
最后登录: 2018-11-17
4 楼:  发表于: 2018-11-01 15:18    发自: Web Page
回 2楼(xzwstudy) 的帖子
高清图一张一两百M  我也很无奈! 就算先下载到本地,从本地读取也是一样慢
级别: 侠客
UID: 534609
精华: 0
发帖: 123
可可豆: 132 CB
威望: 132 点
在线时间: 339(时)
注册时间: 2015-12-28
最后登录: 2018-11-16
5 楼:  发表于: 2018-11-01 15:23    发自: Web Page
回 4楼(源于舞客) 的帖子
感觉需求不合理
级别: 新手上路
UID: 631263
精华: 0
发帖: 9
可可豆: 18 CB
威望: 18 点
在线时间: 11(时)
注册时间: 2017-12-26
最后登录: 2018-11-07
6 楼:  发表于: 2018-11-01 16:13    发自: Web Page
对图片在本地进行切割  可以切割为 m * n 个 格子,然后用多个imageview 展示,     在显示区域外的不做加载,  只展示用户可以看到的部分 ,  你这150m真特么变态

注意处理好多个imageview的拼接,共同放大 缩小等问题  
级别: 侠客
UID: 578040
精华: 0
发帖: 87
可可豆: 411 CB
威望: 411 点
在线时间: 291(时)
注册时间: 2016-08-16
最后登录: 2018-11-17
7 楼:  发表于: 2018-11-01 17:03    发自: Web Page
回 6楼(love00wanggang) 的帖子
-(void)set_UI
{
    self.scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT-64)];
    self.scroll.contentSize = CGSizeMake(9514, 6388);
    self.scroll.maximumZoomScale = 10.0;
    self.scroll.minimumZoomScale = 0.5;
    self.scroll.bouncesZoom = false;
    self.scroll.bounces = false;
    self.scroll.delegate = self;
    [self.view addSubview:self.scroll];
    
    self.ImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 9514, 6388)];
//    [self.ImageView yy_setImageWithURL:[NSURL URLWithString:@"http://a8c99246-bdb0-4f1b-99c0-bc78489eb341.jpg"] placeholder:[UIImage imageNamed:@""]];
    self.ImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a8c99246-bdb0-4f1b-99c0-bc78489eb341.jpg"]]];
    [self.scroll addSubview:self.ImageView];
    
    //拆分成小图片的张数
    for (int i = 0; i < 54; i++)
    {
        UIImageView * smallimag = [[UIImageView alloc]initWithFrame:CGRectMake((i%6)*1057, (i/9)*1065, 1057, 1065)];
        smallimag.tag = i+1;
        [self.ImageView addSubview:smallimag];
    }
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.ImageView;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSArray * views = self.ImageView.subviews;
    for (UIView * view in views)
    {
        if ([view isKindOfClass:[UIImageView class]])
        {
            NSLog(@"view是图片类型");
            BOOL contain = [self calculateFrame:view];
            UIImageView * imageV = (UIImageView *)view;
            if (contain == YES)
            {
                NSLog(@"contain == YES");
                [self imageOfFile:imageV.tag imageV:imageV];
            }
            else
            {
                NSLog(@"contain == NO");
                imageV.image = nil;
            }
            
        }else
        {
            NSLog(@"view不是图片类型");
        }
    }
}
-(void)imageOfFile:(NSInteger)tag imageV:(UIImageView *)imageV
{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //进入另一个线程
        NSString *filePath = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"image_%ld",(long)tag] ofType:@"jpg"];
        dispatch_async(dispatch_get_main_queue(),^{
            //返回主线程
            imageV.image = [UIImage imageWithContentsOfFile:filePath];
        });
    });
}
//判断该view是否在scrollView的可视范围内
-(BOOL)calculateFrame:(UIView *)view
{
    CGFloat scrollX = self.scroll.contentOffset.x;
    CGFloat scrollY = self.scroll.contentOffset.y;
    //scrollView当前的缩放系数
    CGFloat scale = self.scroll.zoomScale;
    
    if (fabs(((scrollX+SCREEN_WIDTH/2)-view.center.x*scale)) <= (view.frame.size.width/2*scale + SCREEN_WIDTH/2) && fabs(((scrollY+SCREEN_HEIGHT/2)-view.center.y*scale)) <= (view.frame.size.height/2*scale + SCREEN_HEIGHT/2)) {
        return YES;
    }
    return NO;
}
给self.imgview 赋值网络图片效果一样 内存一直增长  还是我加载方式不对
级别: 骑士
UID: 661077
精华: 0
发帖: 267
可可豆: 356 CB
威望: 356 点
在线时间: 125(时)
注册时间: 2018-09-07
最后登录: 2018-11-18
8 楼:  发表于: 2018-11-01 17:37    发自: Web Page
这么大的图片,普通电脑显示都费劲,居然要在手机上显示??
级别: 新手上路
UID: 596256
精华: 0
发帖: 56
可可豆: 110 CB
威望: 110 点
在线时间: 157(时)
注册时间: 2016-11-03
最后登录: 2018-11-14
9 楼:  发表于: 2018-11-01 17:43    发自: Web Page
你控制器要把图全部下下来再切割imageView 换汤不换药       我觉得让你们后台一部分一部分传   一次传显示区域再稍微多一点这样 会不会好点

本站内容均为本站转发,已尽可能注明出处。因未能核实来源或转发内容图片有权利瑕疵的,请及时联系本站,本站会第一时间进行修改或删除。 QQ : 3442093904

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部