web-dev-qa-db-fra.com

API de rognage d'images pour iOS

Existe-t-il une API de recadrage des images pour Objective C qui recadre les images de manière dynamique dans le projet Xcode? Veuillez fournir des astuces ou des techniques sur la manière de rogner des images d'appareil photo sur un iPhone.

26
Appz Venture

Vous pouvez utiliser ci-dessous un code simple pour rogner une image. Vous devez passer l'image et le CGRect qui est la zone de recadrage. Ici, je recadre l'image de manière à obtenir le centre de l'image d'origine et l'image retournée est carrée.

// 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;
}
18
Geek

EDIT - Version Swift

let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true

Toutes ces solutions semblent assez compliquées et beaucoup d’entre elles dégradent la qualité de l’image . Vous pouvez faire beaucoup plus simplement en utilisant les méthodes UIImageView.

Objectif c

self.imageView.contentMode = UIViewContentModeScaleAspectFill;
[self.imageView setClipsToBounds:YES];
[self.imageView setImage:img];

Cela recadrera votre image en fonction des dimensions que vous avez définies pour votre UIImageView (j'ai appelé le mien imageView ici) .
C’est aussi simple que cela et fonctionne beaucoup mieux que les autres solutions.

10
sf89

Exemple d'écran avec Xcode 5, iOS 7 et 4 pouces: Voici un exemple open source de a SimpleImageCropEditor (Exemple de code source et de code projet . Vous pouvez charger l'éditeur de cultures Image en tant que contrôleur de vue modale et Regardez le code et laissez s'il vous plaît des commentaires constructifs sur la question de savoir si cet exemple de code répond à la question "API de rognage d'images pour iOS".

Il illustre, par exemple, le code source Objective-C, l’utilisation de UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController et UIGestureRecognizer. 

1
Matthew Ferguson

Vous pouvez utiliser le cadre CoreGraphics pour rogner une image dynamiquement. Voici un exemple de code faisant partie d'un recadrage d'image dynamique. J'espère que cela vous sera utile.

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