1. 程式人生 > >iOS 圖片壓縮----微信圖片處理策略

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);
}