API обрезки изображений для iOS - PullRequest
26 голосов
/ 17 августа 2011

Существует ли какой-либо API для обрезки изображений для объектива C, который динамически обрезает изображения в проекте Xcode? Пожалуйста, предоставьте некоторые приемы или приемы, как я могу обрезать изображения с камеры в iPhone.

Ответы [ 4 ]

18 голосов
/ 18 декабря 2013

Вы можете использовать ниже простой код, чтобы обрезать изображение.Вы должны передать изображение и 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;
}
10 голосов
/ 08 октября 2014

EDIT - Swift Version

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 (я назвал мой imageView здесь).
Это так просто и работает намного лучше, чем другие решения.

1 голос
/ 12 января 2014

Пример Xcode 5, iOS 7 и 4-дюймового экрана: Вот пример с открытым исходным кодом SimpleImageCropEditor (Пример Zip и исходного кода проекта . Вы можете загрузить Редактор кадрирования изображения в качестве контроллера модального представления и использовать его повторно. Посмотрите на код и оставьте конструктивные комментарии относительно того, отвечает ли этот пример кода на вопрос «Обрезка изображения» API для iOS ".

Демонстрирует пример исходного кода Objective-C, использование UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController и UIGestureRecognizer.

1 голос
/ 15 ноября 2013

Вы можете использовать CoreGraphics Framework для динамического кадрирования изображения.Вот пример кода части динамического обрезки изображения.Я надеюсь, что это будет полезно для вас.

- (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]]; 
} 
...