iOS 图片压缩 和等比压缩 指定缩放比例压缩详解手机开发

- (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 *) imageCompressForSize:(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; 
      
} 
-(UIImage *) imageCompressForWidth:(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; 
}

 //指定缩放比例压缩 
  NSData *thumbImageData = UIImageJPEGRepresentation([UIImage imageWithData:logoData], 0.5);

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/3323.html

(0)
上一篇 2021年7月16日 14:28
下一篇 2021年7月16日 14:28

相关推荐

发表回复

登录后才能评论