当前位置: 代码迷 >> 综合 >> iOS 调整图片尺寸和大小的两个方法
  详细解决方案

iOS 调整图片尺寸和大小的两个方法

热度:60   发布时间:2024-02-27 01:19:40.0

在开发过程中,我们经常会遇到图片压缩功能,下面是我写的图片压缩的两个方法

首先是第一种,也是我比较推荐的


/// 调整图片尺寸和大小
/// @param sourceImage 原始图片
/// @param maxImageSize 新图片最大尺寸
/// @param maxSize 新图片最大存储大小(kb)
+ (UIImage *)reSizeImageData:(UIImage *)sourceImage maxImageSize:(CGFloat)maxImageSize maxSizeWithKB:(CGFloat) maxSize{if (maxSize <= 0.0) maxSize = 1024.0;if (maxImageSize <= 0.0) maxImageSize = 1024.0;//先调整分辨率CGSize newSize = CGSizeMake(sourceImage.size.width, sourceImage.size.height);CGFloat tempHeight = newSize.height / maxImageSize;CGFloat tempWidth = newSize.width / maxImageSize;if (tempWidth > 1.0 && tempWidth > tempHeight) {newSize = CGSizeMake(sourceImage.size.width / tempWidth, sourceImage.size.height / tempWidth);} else if (tempHeight > 1.0 && tempWidth < tempHeight){newSize = CGSizeMake(sourceImage.size.width / tempHeight, sourceImage.size.height / tempHeight);}UIGraphicsBeginImageContext(newSize);[sourceImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();//调整大小NSData *imageData = UIImageJPEGRepresentation(newImage,1.0);CGFloat sizeOriginKB = imageData.length / 1024.0;CGFloat resizeRate = 0.9;while (sizeOriginKB > maxSize && resizeRate > 0.1) {imageData = UIImageJPEGRepresentation(newImage,resizeRate);sizeOriginKB = imageData.length / 1024.0;resizeRate -= 0.1;}return [UIImage imageWithData: imageData];
}

这种图片内存大小和尺寸都可以限制

第二种就比较简单了,但是有局限性,只是进行压缩但是压缩到指定大小无法限定


/// 调整图片尺寸和大小
/// @param image 原始图片
/// @param width 宽度
/// @param height 高度
+ (UIImage*)resizeImage:(UIImage*)image toWidth:(NSInteger)width height:(NSInteger)height{CGSize size = CGSizeMake(width, height);if (NULL != UIGraphicsBeginImageContextWithOptions)UIGraphicsBeginImageContextWithOptions(size, NO, 0);elseUIGraphicsBeginImageContext(size);CGContextRef context = UIGraphicsGetCurrentContext();CGContextTranslateCTM(context, 0.0, height);CGContextScaleCTM(context, 1.0, -1.0);CGContextSetBlendMode(context, kCGBlendModeCopy);CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), image.CGImage);// Retrieve the UIImage from the current contextUIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return imageOut;
}

以上就是两种常见的图片压缩功能

  相关解决方案