ios中图像进行压缩方法汇总
ios中图像进行压缩方法汇总
发布时间:2015-06-06 来源:查字典编辑
摘要:在Iphone上有两种读取图片数据的简单方法:UIImageJPEGRepresentation和UIImagePNGRepresentat...

在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需要图片引用作为参数.

方法一:

代码如下:

- (UIImage*)scaleFromImage:(UIImage*)image scaledToSize:(CGSize)newSize

{

CGSize imageSize = image.size;

CGFloat width = imageSize.width;

CGFloat height = imageSize.height;

if (width <= newSize.width && height <= newSize.height){

return image;

}

if (width == 0 || height == 0){

return image;

}

CGFloat widthFactor = newSize.width / width;

CGFloat heightFactor = newSize.height / height;

CGFloat scaleFactor = (widthFactor

CGFloat scaledWidth = width * scaleFactor;

CGFloat scaledHeight = height * scaleFactor;

CGSize targetSize = CGSizeMake(scaledWidth,scaledHeight);

UIGraphicsBeginImageContext(targetSize);

[image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

方法二:

.h具体code

代码如下:

#import

@interface UIImage (UIImageExt)

- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;

- (UIImage *)imageByScalingAndCroppingForSize:(CGSize)targetSize;

@end

.m具体code

代码如下:

#import "UIImageExt.h"

@implementation UIImage (UIImageExt)

- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{

// 创建一个bitmap的context

// 并把它设置成为当前正在使用的context

UIGraphicsBeginImageContext(size);

// 绘制改变大小的图片

[img drawInRect:CGRectMake(0, 0, size.width, size.height)];

// 从当前context中创建一个改变大小后的图片

UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

// 使当前的context出堆栈

UIGraphicsEndImageContext();

// 返回新的改变大小后的图片

return scaledImage;

}

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize

{

UIImage *sourceImage = self;

UIImage *newImage = nil;

CGSize imageSize = sourceImage.size;

CGFloat width = imageSize.width;

CGFloat height = imageSize.height;

CGFloat targetWidth = targetSize.width;

CGFloat targetHeight = targetSize.height;

CGFloat scaleFactor = 0.0;

CGFloat scaledWidth = targetWidth;

CGFloat scaledHeight = targetHeight;

CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

if (CGSizeEqualToSize(imageSize, targetSize) == NO)

{

CGFloat widthFactor = targetWidth / width;

CGFloat heightFactor = targetHeight / height;

if (widthFactor > heightFactor)

scaleFactor = widthFactor; // scale to fit height

else

scaleFactor = heightFactor; // scale to fit width

scaledWidth = width * scaleFactor;

scaledHeight = height * scaleFactor;

// center the image

if (widthFactor > heightFactor)

{

thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;

}

else

if (widthFactor < heightFactor)

{

thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;

}

}

UIGraphicsBeginImageContext(targetSize); // this will crop

CGRect thumbnailRect = CGRectZero;

thumbnailRect.origin = thumbnailPoint;

thumbnailRect.size.width = scaledWidth;

thumbnailRect.size.height = scaledHeight;

[sourceImage drawInRect:thumbnailRect];

newImage = UIGraphicsGetImageFromCurrentImageContext();

if(newImage == nil)

NSLog(@"could not scale image");

//pop the context to get back to the default

UIGraphicsEndImageContext();

return newImage;

}

@end

方法三:(本人项目中使用的方法)

代码如下:

-(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth

{

CGSize imageSize = sourceImage.size;

CGFloat width = imageSize.width;

CGFloat height = imageSize.height;

CGFloat targetWidth = defineWidth;

CGFloat targetHeight = (targetWidth / width) * height;

UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));

[sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

以上所述就是本文的全部内容了,希望大家能够喜欢。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新IOS开发学习
热门IOS开发学习
编程开发子分类