ios中图像进行压缩方法汇总
方法一:
-(UIImage*)scaleFromImage:(UIImage*)imagescaledToSize:(CGSize)newSize { CGSizeimageSize=image.size; CGFloatwidth=imageSize.width; CGFloatheight=imageSize.height; if(width<=newSize.width&&height<=newSize.height){ returnimage; } if(width==0||height==0){ returnimage; } CGFloatwidthFactor=newSize.width/width; CGFloatheightFactor=newSize.height/height; CGFloatscaleFactor=(widthFactor<heightFactor?widthFactor:heightFactor); CGFloatscaledWidth=width*scaleFactor; CGFloatscaledHeight=height*scaleFactor; CGSizetargetSize=CGSizeMake(scaledWidth,scaledHeight); UIGraphicsBeginImageContext(targetSize); [imagedrawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)]; UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); returnnewImage; }
方法二:
.h具体code
#import<Foundation/Foundation.h> @interfaceUIImage(UIImageExt) -(UIImage*)scaleToSize:(UIImage*)imgsize:(CGSize)size; -(UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize; @end
.m具体code
#import"UIImageExt.h" @implementationUIImage(UIImageExt) -(UIImage*)scaleToSize:(UIImage*)imgsize:(CGSize)size{ //创建一个bitmap的context //并把它设置成为当前正在使用的context UIGraphicsBeginImageContext(size); //绘制改变大小的图片 [imgdrawInRect:CGRectMake(0,0,size.width,size.height)]; //从当前context中创建一个改变大小后的图片 UIImage*scaledImage=UIGraphicsGetImageFromCurrentImageContext(); //使当前的context出堆栈 UIGraphicsEndImageContext(); //返回新的改变大小后的图片 returnscaledImage; } -(UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize { UIImage*sourceImage=self; UIImage*newImage=nil; CGSizeimageSize=sourceImage.size; CGFloatwidth=imageSize.width; CGFloatheight=imageSize.height; CGFloattargetWidth=targetSize.width; CGFloattargetHeight=targetSize.height; CGFloatscaleFactor=0.0; CGFloatscaledWidth=targetWidth; CGFloatscaledHeight=targetHeight; CGPointthumbnailPoint=CGPointMake(0.0,0.0); if(CGSizeEqualToSize(imageSize,targetSize)==NO) { CGFloatwidthFactor=targetWidth/width; CGFloatheightFactor=targetHeight/height; if(widthFactor>heightFactor) scaleFactor=widthFactor;//scaletofitheight else scaleFactor=heightFactor;//scaletofitwidth scaledWidth =width*scaleFactor; scaledHeight=height*scaleFactor; //centertheimage if(widthFactor>heightFactor) { thumbnailPoint.y=(targetHeight-scaledHeight)*0.5; } else if(widthFactor<heightFactor) { thumbnailPoint.x=(targetWidth-scaledWidth)*0.5; } } UIGraphicsBeginImageContext(targetSize);//thiswillcrop CGRectthumbnailRect=CGRectZero; thumbnailRect.origin=thumbnailPoint; thumbnailRect.size.width =scaledWidth; thumbnailRect.size.height=scaledHeight; [sourceImagedrawInRect:thumbnailRect]; newImage=UIGraphicsGetImageFromCurrentImageContext(); if(newImage==nil) NSLog(@"couldnotscaleimage"); //popthecontexttogetbacktothedefault UIGraphicsEndImageContext(); returnnewImage; } @end
方法三:(本人项目中使用的方法)
-(UIImage*)imageCompressForWidth:(UIImage*)sourceImagetargetWidth:(CGFloat)defineWidth { CGSizeimageSize=sourceImage.size; CGFloatwidth=imageSize.width; CGFloatheight=imageSize.height; CGFloattargetWidth=defineWidth; CGFloattargetHeight=(targetWidth/width)*height; UIGraphicsBeginImageContext(CGSizeMake(targetWidth,targetHeight)); [sourceImagedrawInRect:CGRectMake(0,0,targetWidth, targetHeight)]; UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); returnnewImage; }
以上所述就是本文的全部内容了,希望大家能够喜欢。