iOS中兩種壓縮圖片的方法
UIImageJPEGRepresentation. UIImagePNGRepresentation
JPEG圖片只支持白底且保存時(shí)是有損壓縮,占用空間較小,PNG可以支持透明背景且使用無(wú)損壓縮算法,但由于壓縮比高,所以占用空間跟JPEG沒(méi)有太大差別
執(zhí)行完之后會(huì)有一個(gè)最小值 即使系數(shù)為0.000001。所以需要改變圖片的大小
#pragma mark - 壓縮圖片
- (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size
{
UIImage *OriginalImage = image;
// 執(zhí)行這句代碼之后會(huì)有一個(gè)范圍 例如500m 會(huì)是 100m~500k
NSData * data = UIImageJPEGRepresentation(image, 1.0);
CGFloat dataKBytes = data.length/1000.0;
CGFloat maxQuality = 0.9f;
// 執(zhí)行while循環(huán) 如果第一次壓縮不會(huì)小雨100k 那么減小尺寸在重新開(kāi)始?jí)嚎s
while (dataKBytes > size)
{
while (dataKBytes > size && maxQuality > 0.1f)
{
maxQuality = maxQuality - 0.1f;
data = UIImageJPEGRepresentation(image, maxQuality);
dataKBytes = data.length / 1000.0;
if(dataKBytes <= size )
{
return data;
}
}
OriginalImage =[self compressOriginalImage:OriginalImage toWidth:OriginalImage.size.width * 0.8];
image = OriginalImage;
data = UIImageJPEGRepresentation(image, 1.0);
dataKBytes = data.length / 1000.0;
maxQuality = 0.9f;
}
return data;
}
#pragma mark - 改變圖片的大小
-(UIImage *)compressOriginalImage:(UIImage *)image toWidth:(CGFloat)targetWidth
{
CGSize imageSize = image.size;
CGFloat Originalwidth = imageSize.width;
CGFloat Originalheight = imageSize.height;
CGFloat targetHeight = Originalheight / Originalwidth * targetWidth;
UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
[image drawInRect:CGRectMake(0,0,targetWidth, targetHeight)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}