iOS 图片压缩----微信图片处理策略

iOS微信朋友圈图片处理策略

最近看了一篇微信朋友圈图片处理的博客, 我用代码简单的实现了一下,大家如果发现有不对的地方, 还请指正

压缩效果还不错,在保证能看清的前提下,极大的缩小了图片大小

具体算法:

1: 宽高均小于1280的, 不做处理;

2: 宽高均大于1280,

2.1:宽高比大于2  既W > 2H,取 H = 1280, W等比缩放;

2.2:高宽比大于2 既W < 0.5H, 取 W = 1280, H等比缩放;

2.3:宽高比介于 0.5到2之间,取宽或者高 为1280, 另一边等比缩放;

3:宽或者高大于1280;

3.1:宽高比大与2(宽图) 或者小于0.5(长图)  大小不变, 可以做压缩图片质量;

3.2:宽大于高, 取较大值W = 1280, H等比压缩;

3.3:高大于宽, 去较大值H = 1280. W等比压缩;

一般取压缩质量为0.5即可,既

[NSUtil imageWithOriginalImage:image quality:0.5];

注:一下方法都写在NSUtil这个工具类里, 里面还有很多其他的方法,喜欢的同学可以去我的GitHub上下载.在Util那个文件下

原文链接

具体实现代码如下:

#pragma mark   -  图片
/**  压缩图片*/
+ (UIImage *)imageWithOriginalImage:(UIImage *)image{
    // 宽高比
    CGFloat ratio = image.size.width/image.size.height;
    
    // 目标大小
    CGFloat targetW = 1280;
    CGFloat targetH = 1280;
    
    // 宽高均 <= 1280,图片尺寸大小保持不变
    if (image.size.width<1280 && image.size.height<1280) {
        return image;
    }
    // 宽高均 > 1280 && 宽高比 > 2,
    else if (image.size.width>1280 && image.size.height>1280){
        
        // 宽大于高 取较小值(高)等于1280,较大值等比例压缩
        if (ratio>1) {
            targetH = 1280;
            targetW = targetH * ratio;
        }
        // 高大于宽 取较小值(宽)等于1280,较大值等比例压缩 (宽高比在0.5到2之间 )
        else{
            targetW = 1280;
            targetH = targetW / ratio;
        }
        
    }
    // 宽或高 > 1280
    else{
        // 宽图 图片尺寸大小保持不变
        if (ratio>2) {
            targetW = image.size.width;
            targetH = image.size.height;
        }
        // 长图 图片尺寸大小保持不变
        else if (ratio<0.5){
            targetW = image.size.width;
            targetH = image.size.height;
        }
        // 宽大于高 取较大值(宽)等于1280,较小值等比例压缩
        else if (ratio>1){
            targetW = 1280;
            targetH = targetW / ratio;
        }
        // 高大于宽 取较大值(高)等于1280,较小值等比例压缩
        else{
            targetH = 1280;
            targetW = targetH * ratio;
        }
    }
    // 注:这些方法是NSUtil这个工具类里的
    image = [[NSUtil alloc] imageCompressWithImage:image targetHeight:targetH targetWidth:targetW];
    
    
    return image;
}

/**  重绘*/
- (UIImage *)imageCompressWithImage:(UIImage *)sourceImage targetHeight:(CGFloat)targetHeight targetWidth:(CGFloat)targetWidth
{
    //    CGFloat targetHeight = (targetWidth / sourceImage.size.width) * sourceImage.size.height;
    UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
    [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

/**  压缩图片 压缩质量 0 -- 1*/
+ (UIImage *)imageWithOriginalImage:(UIImage *)image quality:(CGFloat)quality{
    
    UIImage *newImage = [self imageWithOriginalImage:image];
    NSData *imageData = UIImageJPEGRepresentation(newImage, quality);
    return [UIImage imageWithData:imageData];
}

/**  压缩图片成Data*/
+ (NSData *)dataWithOriginalImage:(UIImage *)image{
    return UIImageJPEGRepresentation([self imageWithOriginalImage:image], 1);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值