iOS-比例压缩图片

作者: Tr2e | 来源:发表于2016-08-24 16:35 被阅读738次

// 1600 * 1200
-(NSData *)resetSizeOfImageData:(UIImage *)source_image maxSize:(NSInteger)maxSize{

    //调整分辨率
    CGSize newSize = CGSizeMake(source_image.size.width, source_image.size.height);
    
    CGFloat tempHeight = 0.0f;
    CGFloat tempWidth = 0.0f;
    CGFloat rate = newSize.width / newSize.height;
    
    if (rate < 1) {
        tempHeight = newSize.height / 1600;
        tempWidth = newSize.width / 1200;
    } else {
        tempHeight = newSize.height / 1200;
        tempWidth = newSize.width / 1600;
    }
    
    if (tempWidth > 1.0 && tempWidth > tempHeight) {
        newSize = CGSizeMake(source_image.size.width / tempWidth, source_image.size.height / tempWidth);
    }
    else if (tempHeight > 1.0 && tempWidth < tempHeight){
        
        newSize = CGSizeMake(source_image.size.width / tempHeight, source_image.size.height / tempHeight);
        
    }else if (tempWidth > 1.0 && tempWidth == tempHeight){
        
        newSize = CGSizeMake(source_image.size.width / tempWidth, source_image.size.height / tempWidth);
        
    }
    
    UIGraphicsBeginImageContext(newSize);
    [source_image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    NSLog(@"sourceImageW = %f sourceImageH = %f",source_image.size.width, source_image.size.height);
    NSLog(@"newImageW = %f newImageH = %f",newImage.size.width,newImage.size.height);
    
    //调整大小
    NSData *imageData = UIImageJPEGRepresentation(newImage,1.0);
    NSUInteger sizeOrigin = [imageData length];
    NSUInteger sizeOriginKB = sizeOrigin / 1024;
    
    NSLog(@"--->sizeOriginKB:%lu<----",sizeOriginKB);
    
    if (sizeOriginKB > maxSize) {
        
        float kk = 1.0;
        NSUInteger zipSizeKB;
        float aa = 0.1f;// 变化系数
        zipSizeKB = UIImageJPEGRepresentation(newImage, kk).length / 1024;
        
        
        while (zipSizeKB > maxSize) {
            
            @autoreleasepool {
                if (kk>aa) {
                    kk-=aa;
                    if (zipSizeKB == UIImageJPEGRepresentation(newImage, kk).length / 1024) {
                        break;
                    }
                    zipSizeKB = UIImageJPEGRepresentation(newImage, kk).length / 1024 ;
                }
            }
        }
        
        return UIImageJPEGRepresentation(newImage, kk);
    }
    
    return imageData;

}

相关文章

  • iOS-比例压缩图片

  • 图片压缩

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法、比例压缩法(根据路径获取图片并压缩)和比例压缩...

  • android图片压缩的一些方法

    质量压缩法: 图片按比例大小压缩

  • 图片压缩方法

    两种图片压缩方法 压缩图片质量(quality)、压缩图片尺寸(size) 压缩图片质量 或 前者可以控制压缩比例...

  • 图片压缩

    图片压缩质量压缩,比例压缩,采样率压缩,JPEG压缩思路:根据控件的尺寸或图片要放大显示的尺寸作为参数去压缩图片原...

  • 对图片的相关处理

    1、图片等比例压缩 2、把图片等比例压缩到指定宽度 3、截取当前页面生成图片(屏幕外的也包括在内)

  • 说说在 Android 中如何压缩图片

    目前存在两种压缩图片方式: 质量压缩 - 不改变图片尺寸。 按比例压缩 - 相当于是在像素上进行压缩。 而图片有三...

  • 每日一问(二十三)Android 如何加载加载大图长图

    1.展示高分辨率图片的时候,最好先将图片进行压缩2.比例大小压缩3.质量压缩4.使用图片压缩库进行压缩5.如果加载...

  • python

    使用PIL库对图片进行等比例压缩

  • Android 图片压缩

    参考 Android 图片压缩 此篇文章不讨论质量压缩,比例压缩与采样率压缩,只考虑使用libjpeg,绕过and...

网友评论

    本文标题:iOS-比例压缩图片

    本文链接:https://www.haomeiwen.com/subject/fzlosttx.html