iOS如何等比例去压缩图片大小

我们在项目当中,有时候需要一些图片,美工不能够及时给我们的时候,这时候哥们程序员也要想办法去应对(这两天怼美工有点凶了哈)

如何由上面这张图--》下面这张

(下面这张小图放在image里面,选用的填充模式UIViewContentModeScaleAspectFill,这个模式保证图示等比例的,多余的部分会被裁剪掉,其实是等比例的)

imageView.contentMode = UIViewContentModeScaleAspectFill;
iOS如何等比例去压缩图片大小_第1张图片
![Uploading 0AF39BAA-3EDB-4C4A-8FC0-2EECFB9BE7D2_363154.png . . .]
iOS如何等比例去压缩图片大小_第2张图片
0AF39BAA-3EDB-4C4A-8FC0-2EECFB9BE7D2.png

当看到这张图片有几m的时候,内心肯定很崩溃,我们如何去得到一张等比例,而且占用内存小的图片呢?

  我给封装了一个UIImage的分类提供大家
#import 

@interface UIImage (Extension)


- (UIImage *)scaleToWidth:(CGFloat)width;

@end

#import "UIImage+Extension.h"

@implementation UIImage (Extension)


#pragma mark -按照你想要的比例去缩放图片
- (UIImage *)scaleToWidth:(CGFloat)width{
    
    // 如果传入的宽度比当前宽度还要大,就直接返回
    
    if (width > self.size.width) {
        return  self;
    }
    
    // 计算缩放之后的高度
    CGFloat height = (width / self.size.width) * self.size.height;
    
    // 初始化要画的大小
    CGRect  rect = CGRectMake(0, 0, width, height);

    // 1. 开启图形上下文
    UIGraphicsBeginImageContext(rect.size);
    
    // 2. 画到上下文中 (会把当前image里面的所有内容都画到上下文)
    [self drawInRect:rect];
    
    // 3. 取到图片
    
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 4. 关闭上下文
    UIGraphicsEndImageContext();
    // 5. 返回
    return image;
}

@end

计算出比例,然后通过图形上下文将图片画出来,分类具有很好的移植性,兄弟们直接拿出用就行

    //使用
    UIImage * demoImg = [UIImage imageNamed:@"123"];;
    
    demoImg =[demoImg scaleToWidth:600];
最后彩蛋

如何获取屏幕的图

.h
//直接加入到上面那个分类去即可
+ (UIImage *)getScreenImage;
.m

+ (UIImage *)getScreenImage{

    //获取主窗口
    UIWindow * window = [UIApplication sharedApplication].keyWindow;
    
   // 1. 开启图形上下文
    UIGraphicsBeginImageContext(window.frame.size);

    // 2. 将 window 里面的内容画到上下文中
    [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:NO];
    
    // 3. 取出图片
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

    // 4. 关闭上下文
    UIGraphicsEndImageContext();
    // 5. 返回数据
    return image;
}

你可能感兴趣的:(iOS如何等比例去压缩图片大小)