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;
}
以上所述就是本文的全部内容了,希望大家能够喜欢。