iOS 圖片壓縮 和等比壓縮 指定縮放比例壓縮

jopen 9年前發布 | 2K 次閱讀 Objective-C 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;

}</pre>

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!