我想创建一个固定大小的图像,例如612乘612.我正在使用图像选择器从我的iphone中选择照片。因此,为了确保所有照片都适合612 x 612大小而不失真,我使用以下方法重新缩放照片,使其符合612到612的大小。但是因此,空白区域可能会在最终图像中创建。 (见下面的例子)
我使用以下代码来缩放我的图像(固定尺寸612乘612)
//Scale the image to fit to imageview
UIImage *image = [self scaleImage:img toRectSize:CGRectMake(0, 0, 612, 612)];
//Method to scale image
- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect
{
UIGraphicsBeginImageContext(screenRect.size);
float hfactor = img.size.width / screenRect.size.width;
float vfactor = img.size.height / screenRect.size.height;
float factor = MAX(hfactor, vfactor);
float newWidth = img.size.width / factor;
float newHeight = img.size.height / factor;
float leftOffset = (screenRect.size.width - newWidth) / 2;
float topOffset = (screenRect.size.height - newHeight) / 2;
CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
[img drawInRect:newRect blendMode:kCGBlendModePlusDarker alpha:1];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
如上所述,由于图像有时不是一个完整的正方形,我得到的结果如下所示:
如何用黑色感觉图像中的空白区域?
答案 0 :(得分:2)
一种方法是将 UIImageView 的backgroundColor
设置为blackColor
。
另一种方法是在缩放图像时用 blackColor 填充矩形。
- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect {
...
CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
// Fill the original rect with black color
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextFillRect(context, screenRect);
[img drawInRect:newRect blendMode:kCGBlendModeNormal alpha:1];
...
}
请注意, drawInRect:blendMode:alpha:方法中的blendMode
设置为kCGBlendModeNormal
。如果您设置其他一些混合模式,您将得到不希望的结果。例如,如果将混合模式设置为 kCGBlendModePlusDarker 并使用 blackColor 填充矩形,则整个图像将变为黑色。
答案 1 :(得分:1)
将UIImageView
上的背景颜色设置为黑色,您将得到您想要的颜色