Есть ли какой-либо API обрезки изображений для объектива C, который динамически обрабатывает изображения в проекте Xcode? Предоставьте несколько трюков или методов, как я могу обрезать изображения с камеры на iPhone.
API обрезания изображений для iOS
Ответ 1
Вы можете использовать ниже простой код для обрезки изображения. Вы должны передать изображение и CGRect, который является областью обрезки. Здесь я обрезаю изображение, чтобы получить центральную часть исходного изображения, а возвращаемое изображение квадратное.
// Returns largest possible centered cropped image.
- (UIImage *)centerCropImage:(UIImage *)image
{
// Use smallest side length as crop square length
CGFloat squareLength = MIN(image.size.width, image.size.height);
// Center the crop area
CGRect clippedRect = CGRectMake((image.size.width - squareLength) / 2, (image.size.height - squareLength) / 2, squareLength, squareLength);
// Crop logic
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect);
UIImage * croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
Ответ 2
РЕДАКТИРОВАТЬ - Быстрая версия
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
Все эти решения кажутся довольно сложными, и многие из них фактически ухудшают качество изображения.
Вы можете сделать гораздо проще, используя методы UIImageView
из коробки.
Objective-C
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
[self.imageView setClipsToBounds:YES];
[self.imageView setImage:img];
Это обрезает ваше изображение на основе размеров, которые вы установили для своего UIImageView
(здесь я назвал my imageView
).
Это так просто и работает намного лучше, чем другие решения.
Ответ 3
Вы можете использовать среду CoreGraphics для обрезки изображения динамически. Вот пример части кода для динамического изображения. Надеюсь, это будет полезно для вас.
- (void)drawMaskLineSegmentTo:(CGPoint)ptTo withMaskWidth:(CGFloat)maskWidth inContext:(NXMaskDrawContext)context{
if (context == nil)
return;
if (context.count <= 0){
[context addObject:[NSValue valueWithCGPoint:ptTo]];
return;
}
CGPoint ptFrom = [context.lastObject CGPointValue];
UIGraphicsBeginImageContext(self.maskImage.size);
[self.maskImage drawInRect:CGRectMake(0, 0, self.maskImage.size.width, self.maskImage.size.height)];
CGContextRef graphicsContext = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(graphicsContext, kCGBlendModeCopy);
CGContextSetRGBStrokeColor(graphicsContext, 1, 1, 1, 1);
CGContextSetLineWidth(graphicsContext, maskWidth);
CGContextSetLineCap(graphicsContext, kCGLineCapRound);
CGContextMoveToPoint(graphicsContext, ptFrom.x, ptFrom.y);
CGContextAddLineToPoint(graphicsContext, ptTo.x, ptTo.y);
CGContextStrokePath(graphicsContext);
self.maskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(self.displayableMaskImage.size);
[self.displayableMaskImage drawInRect:CGRectMake(0, 0, self.displayableMaskImage.size.width, self.displayableMaskImage.size.height)];
graphicsContext = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(graphicsContext, kCGBlendModeCopy);
CGContextSetStrokeColorWithColor(graphicsContext, self.displayableMaskColor.CGColor);
CGContextSetLineWidth(graphicsContext, maskWidth);
CGContextSetLineCap(graphicsContext, kCGLineCapRound);
CGContextMoveToPoint(graphicsContext, ptFrom.x, ptFrom.y);
CGContextAddLineToPoint(graphicsContext, ptTo.x, ptTo.y);
CGContextStrokePath(graphicsContext);
self.displayableMaskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[context addObject:[NSValue valueWithCGPoint:ptTo]];
}
Ответ 4
Пример Xcode 5, iOS 7 и 4-дюймовый экран: Вот пример с открытым исходным кодом SimpleImageCropEditor (Пример Zip и исходный код проекта). Вы можете загрузить редактор изображений в качестве Modal View Controller и повторно использовать. Посмотрите на код и, пожалуйста, оставьте конструктивные комментарии относительно того, что этот примерный код отвечает на вопрос "API обрезания изображений для iOS" .
Демонстрирует, пример исходного кода Objective-C, использование UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController и UIGestureRecognizer.