iOS开发探索-图片压缩处理

来源:互联网 发布:软件工程项目选题 编辑:程序博客网 时间:2024/06/06 15:44
介绍:

压: 指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降。
缩: 指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体积同样会减小。

应用:

在实际开发中,我们经常会对图片进行处理,满足开发需求,以下介绍三种图片压缩处理:

1.压缩图片质量(图片体积减小,像素不变)

两种读取图片数据的简单方法:
(1).UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数,压缩体积不是随压缩系数比例变化的。
(2).UIImagePNGRepresentation只需要图片引用作为参数。
注意:
UIImagePNGRepresentation(image) 要比UIImageJPEGRepresentation(image, 1.0) 返回的图片数据量大很多
建议优先使用 UIImageJPEGRepresentation ,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小。 

+(UIImage *)reduceImage:(UIImage *)image percent:(float)percent{   NSData *imageData = UIImageJPEGRepresentation(image, percent);   UIImage *newImage = [UIImage imageWithData:imageData];   return newImage;}

2.图片压缩到指定尺寸

+ (UIImage *) scaleImage:(UIImage *) image withNewSize:(CGSize) newSize{    UIGraphicsBeginImageContext(newSize);    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return newImage;}

3.压缩到指定尺寸等比例压缩

 -(UIImage *) imageCompressForSize:(UIImage *)sourceImage targetSize:(CGSize)size{    UIImage *newImage = nil;    CGSize imageSize = sourceImage.size;    CGFloat width = imageSize.width;    CGFloat height = imageSize.height;    CGFloat targetWidth = size.width;    CGFloat targetHeight = size.height;    CGFloat scaleFactor = 0.0;    CGFloat scaledWidth = targetWidth;    CGFloat scaledHeight = targetHeight;    CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);    if(CGSizeEqualToSize(imageSize, size) == NO){        CGFloat widthFactor = targetWidth / width;        CGFloat heightFactor = targetHeight / height;        if(widthFactor > heightFactor){            scaleFactor = widthFactor;        }        else{            scaleFactor = heightFactor;        }        scaledWidth = width * scaleFactor;        scaledHeight = height * scaleFactor;        if(widthFactor > heightFactor){            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;        }else if(widthFactor < heightFactor){        thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;        }    }    UIGraphicsBeginImageContext(size);    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;}-(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{    UIImage *newImage = nil;    CGSize imageSize = sourceImage.size;    CGFloat width = imageSize.width;    CGFloat height = imageSize.height;    CGFloat targetWidth = defineWidth;    CGFloat targetHeight = height / (width / targetWidth);    CGSize size = CGSizeMake(targetWidth, targetHeight);    CGFloat scaleFactor = 0.0;    CGFloat scaledWidth = targetWidth;    CGFloat scaledHeight = targetHeight;    CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);    if(CGSizeEqualToSize(imageSize, size) == NO){        CGFloat widthFactor = targetWidth / width;        CGFloat heightFactor = targetHeight / height;    if(widthFactor > heightFactor){        scaleFactor = widthFactor;    }    else{        scaleFactor = heightFactor;    }    scaledWidth = width * scaleFactor;    scaledHeight = height * scaleFactor;    if(widthFactor > heightFactor){        thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;     }else if(widthFactor < heightFactor){        thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;        }    }    UIGraphicsBeginImageContext(size);    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;}
原创粉丝点击