我有UIImageView
大小(0,0,414,471)。大小为(0,0,1236,1242)的图像在UIViewContentModeScaleAspectFit
中以UIImageView
模式显示。因此图像很好地显示。然后我在图像上制作一个矩形(0,0,100,100),我喜欢裁剪它。即使UIImageView
上覆盖的矩形(100,100),实际图像尺寸(100,100)也不会覆盖UIImageView
上显示的尺寸。所以我制作了xratio(实际宽度/显示宽度)和yratio(实际高度/显示高度),然后我将矩形大小乘以矩形的所有x,y,宽度和高度。这种方法看起来像UIImageView
所示,可以尽可能地裁剪区域。但仍然有一点区域偏移和失真。在这种情况下,最好的裁剪方法是什么?
我的代码如下所示
- (void)saveCroppedImage:(UIImage *)image withcroppedRectangle:(CGRect)clippedRect
{
float xratio = image.size.width/displayWidth;
float yratio = image.size.height/displayHeight;
// Crop logic
clippedRect.origin.x *= xratio;
clippedRect.origin.y *= yratio;
clippedRect.size.width *= xratio;
clippedRect.size.height *= yratio;
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect);
UIImage * croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
NSString *imageName =@"Documents/";
imageName = [imageName stringByAppendingString:[CurrentToddlerProfile getUserID]];
imageName = [imageName stringByAppendingString:@".png"];
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:imageName];
// Write image to PNG
[UIImagePNGRepresentation(croppedImage) writeToFile:pngPath atomically:YES];
// Create file manager
// NSFileManager *fileMgr = [NSFileManager defaultManager];
// NSError *error;
// // Point to Document directory
// NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// // Write out the contents of home directory to console
// NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
}
答案 0 :(得分:1)
您确定需要两个比率吗?如果您希望图像具有正确的比例,则应仅使用一个比例。
如果你需要填充一个矩形(即使UIImageView为你做了),那么首先计算x轴上的比率。使用此比率计算缩放高度,如果它小于您需要覆盖的高度,则计算y轴上的比率。
最后,刚刚计算的比率是用于缩放图像的比率。