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);