iOS 图片处理方法(按比例缩放,指定宽度按比例缩放)

来源:互联网 发布:大庆八一农垦大学淘宝 编辑:程序博客网 时间:2024/05/17 04:15

1.按比例缩放

在这里你传入的cgsize就是你要显示图片的区域,或者就是说设置放大图片的区域部分。

//按比例缩放,size 是你要把图显示到 多大区域   + (UIImage *) imageCompressFitSizeScale:(UIImage *)sourceImage targetSize:(CGSize)size{      UIImage *newImage = nil;      CGSize imageSize = sourceImage.size;      CGFloat width = imageSize.width;      CGFloat height = imageSize.height;      CGFloat targetWidth = size.width;      CGFloat targetHeight = size.height;      CGFloat scaleFactor = 0.0;      CGFloat scaledWidth = targetWidth;      CGFloat scaledHeight = targetHeight;      CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);      if(CGSizeEqualToSize(imageSize, size) == NO){          CGFloat widthFactor = targetWidth / width;          CGFloat heightFactor = targetHeight / height;          if(widthFactor > heightFactor){              scaleFactor = widthFactor;          }          else{              scaleFactor = heightFactor;          }          scaledWidth = width * scaleFactor;          scaledHeight = height * scaleFactor;          if(widthFactor > heightFactor){              thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;          }else if(widthFactor < heightFactor){              thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;          }      }      UIGraphicsBeginImageContext(size);      CGRect thumbnailRect = CGRectZero;      thumbnailRect.origin = thumbnailPoint;      thumbnailRect.size.width = scaledWidth;      thumbnailRect.size.height = scaledHeight;      [sourceImage drawInRect:thumbnailRect];      newImage = UIGraphicsGetImageFromCurrentImageContext();      if(newImage == nil){          NSLog(@"scale image fail");      }      UIGraphicsEndImageContext();      return newImage;  }  

2.指定宽度按比例缩放

//指定宽度按比例缩放  -(UIImage *) imageCompressForWidthScale:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{      UIImage *newImage = nil;      CGSize imageSize = sourceImage.size;      CGFloat width = imageSize.width;      CGFloat height = imageSize.height;      CGFloat targetWidth = defineWidth;      CGFloat targetHeight = height / (width / targetWidth);      CGSize size = CGSizeMake(targetWidth, targetHeight);      CGFloat scaleFactor = 0.0;      CGFloat scaledWidth = targetWidth;      CGFloat scaledHeight = targetHeight;      CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);      if(CGSizeEqualToSize(imageSize, size) == NO){          CGFloat widthFactor = targetWidth / width;          CGFloat heightFactor = targetHeight / height;          if(widthFactor > heightFactor){              scaleFactor = widthFactor;          }          else{              scaleFactor = heightFactor;          }          scaledWidth = width * scaleFactor;          scaledHeight = height * scaleFactor;          if(widthFactor > heightFactor){              thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;          }else if(widthFactor < heightFactor){              thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;          }      }      UIGraphicsBeginImageContext(size);      CGRect thumbnailRect = CGRectZero;      thumbnailRect.origin = thumbnailPoint;      thumbnailRect.size.width = scaledWidth;      thumbnailRect.size.height = scaledHeight;      [sourceImage drawInRect:thumbnailRect];      newImage = UIGraphicsGetImageFromCurrentImageContext();      if(newImage == nil){          NSLog(@"scale image fail");      }      UIGraphicsEndImageContext();      return newImage;  } 

3. 图片压缩

- (NSData *)compressionImageToDataTargetWH:(CGFloat)targetWH maxFileSize:(NSInteger)maxFileSize  {      if (targetWH <= 0) {          targetWH = 1024;      }      //缩      CGSize newSize = CGSizeMake(self.size.width, self.size.height);      CGFloat tempHeight = newSize.height / targetWH;      CGFloat tempWidth = newSize.width / targetWH;      if (tempWidth > 1.0 && tempWidth > tempHeight) {          newSize = CGSizeMake(self.size.width / tempWidth, self.size.height / tempWidth);      }      else if (tempHeight > 1.0 && tempWidth < tempHeight){          newSize = CGSizeMake(self.size.width / tempHeight, self.size.height / tempHeight);      }      UIGraphicsBeginImageContext(newSize);      [self drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];      UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();      UIGraphicsEndImageContext();      //压      CGFloat compression = 0.9f;      CGFloat maxCompression = 0.1f;      NSData *imageData = UIImageJPEGRepresentation(newImage, compression);      while (imageData.length / 1000 > maxFileSize && compression > maxCompression) {          compression -= 0.1;          imageData = UIImageJPEGRepresentation(newImage, compression);      }      return imageData;  }  
0 0
原创粉丝点击