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