2011-08-17 12 views
26

¿Hay alguna API de recorte de imágenes para el objetivo C que coseche dinámicamente imágenes en el proyecto de Xcode? Proporcione algunos trucos o técnicas sobre cómo puedo recortar las imágenes de la cámara en el iPhone.API de recortes de imágenes para iOS

Respuesta

1

Puede usar la infraestructura CoreGraphics para recortar imágenes dinámicamente. Aquí hay un código de ejemplo como parte del recorte dinámico de la imagen. Espero que esto sea útil para ti.

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

Puede utilizar el siguiente código simple para recortar una imagen. Tienes que pasar la imagen y el CGRect que es el área de recorte. Aquí, recorte la imagen para que obtenga la parte central de la imagen original y la imagen devuelta sea cuadrada.

// 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; 
} 
+0

Brilliant! Funciona como una brisa en iOS 7. ¡Gracias! –

1

Xcode 5, iOS 7, y el ejemplo pantalla de 4 pulgadas: Aquí se presenta un ejemplo de código abierto de un SimpleImageCropEditor (Project Zip and Source Code Example. Puede cargar el editor de cultivos de imágenes como un controlador de vista modal y volver a utilizarlo. Mire el código y deje comentarios constructivos sobre si este código de ejemplo responde a la pregunta "Image Cropping API for iOS".

Demuestra, es el código Objective-C fuente de ejemplo, el uso de UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController y UIGestureRecognizer.

10

Edición - Versión Swift

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

Todas estas soluciones parece bastante complicado y muchos de ellos realmente una degradación de la calidad de la imagen. Puede hacer mucho más simple usando los métodos de UIImageView listos para usar.

Objective-C

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

Esto recortar la imagen en función de las dimensiones que se ha fijado para su UIImageView (He llamado a la mina imageView aquí).
Es así de simple y funciona mucho mejor que las otras soluciones.

+0

Creo que su respuesta simplemente cambia el tamaño de la imagen temporalmente dentro de los límites de 'UIImageView'. Si solo le preocupa mostrar la imagen, esto funcionará. Sin embargo, si, por ejemplo, necesita modificar la imagen antes de cargarla en un servidor, este enfoque no funcionaría en ese caso. – Andrew

+0

Es cierto, pero ella/él está buscando una manera que "coseche imágenes dinámicamente", por lo que mi sugerencia es perfectamente correcta aquí. – sf89

Cuestiones relacionadas