I made this fitImage function below, which accepts UIImage and CGSize . If the input image is larger than the input field, the image will be scaled down to fill it. If the field and the image do not have the same ratio, the image does not completely fill the field, and there will be some visible background. In this case, this background is always white. How can I change this, for example. Black background?
+ (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size { if (image.size.width==size.width && image.size.height==size.height) return image; if (image.size.width<size.width && image.size.height<size.height) return [Util scaleImage:image toSize:size]; float widthFactor = size.width / image.size.width; float heightFactor = size.height / image.size.height; CGSize scaledSize = size; if (widthFactor<heightFactor) { scaledSize.width = size.width; scaledSize.height = image.size.height * widthFactor; } else { scaledSize.width = image.size.width * heightFactor; scaledSize.height = size.height; } UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 ); float marginX = (size.width-scaledSize.width)/2; float marginY = (size.height-scaledSize.height)/2; CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height ); [image drawInRect:scaledImageRect]; UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; }
Please tell me if you need more information.
Decision:
+ (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size withBackground:(UIColor*)color { if (image.size.width==size.width && image.size.height==size.height) return image; if (image.size.width<size.width && image.size.height<size.height) return [Util scaleImage:image toSize:size]; float widthFactor = size.width / image.size.width; float heightFactor = size.height / image.size.height; CGSize scaledSize = size; if (widthFactor<heightFactor) { scaledSize.width = size.width; scaledSize.height = image.size.height * widthFactor; } else { scaledSize.width = image.size.width * heightFactor; scaledSize.height = size.height; } UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 ); float marginX = (size.width-scaledSize.width)/2; float marginY = (size.height-scaledSize.height)/2; CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height ); UIImage* temp = UIGraphicsGetImageFromCurrentImageContext(); [color set]; UIRectFill(CGRectMake(0.0, 0.0, temp.size.width, temp.size.height)); [image drawInRect:scaledImageRect]; UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; }
source share