2011-08-17 11 views
26

C'è qualche immagine di ritaglio API per l'obiettivo C che ritaglia le immagini dinamicamente nel progetto Xcode? Si prega di fornire alcuni trucchi o tecniche come potrei ritagliare le immagini della fotocamera in iPhone.Image Cropping per iOS

risposta

1

È possibile utilizzare il framework CoreGraphics per ritagliare l'immagine in modo dinamico. Ecco una parte di codice di esempio del ritaglio di immagine dinamico. Spero che questo ti sia d'aiuto.

- (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

È possibile utilizzare sotto semplice codice per ritagliare un'immagine. Devi passare l'immagine e il CGRect che è l'area di ritaglio. Qui, ritagliamo l'immagine in modo da ottenere una parte centrale dell'immagine originale e l'immagine restituita è quadrata.

// 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

Brillante! Funziona come un gioco da ragazzi su iOS 7. Grazie! –

1

Xcode 5, IOS 7, e l'esempio 4 pollici: Segue un esempio open source di un SimpleImageCropEditor (Project Zip and Source Code Example. È possibile caricare l'editor di ritaglio di immagini come controller di visualizzazione modale e riutilizzarlo. Guarda il codice e lascia commenti costruttivi riguardo se questo codice di esempio risponde alla domanda "Image Cropping API per iOS".

dimostra è esempio codice sorgente Objective-C, l'uso di UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController e UIGestureRecognizer.

10

EDIT - Swift versione

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

Tutte queste soluzioni sembra piuttosto complicato e molti di loro in realtà degradare la qualità dell'immagine. Si può fare molto più semplice usando i metodi originali UIImageView.

Objective-C

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

Ciò ritagliare l'immagine in base alle dimensioni che hai impostato per il tuo UIImageView (ho chiamato il mio imageView qui).
È semplice e funziona molto meglio delle altre soluzioni.

+0

Penso che la tua risposta ridimensioni semplicemente l'immagine temporaneamente entro i limiti di 'UIImageView'. Se si è interessati solo alla visualizzazione dell'immagine, funzionerà. Tuttavia, se, ad esempio, è necessario modificare l'immagine prima di caricarla su un server, questo approccio non funzionerebbe in quel caso. – Andrew

+0

Vero ma lui/lei sta cercando un modo per "ritagliare le immagini in modo dinamico", quindi il mio suggerimento sta perfettamente bene qui. – sf89