2011-08-17 8 views
26

के लिए छवि क्रॉपिंग एपीआई क्या उद्देश्य सी के लिए कोई फसल छवि एपीआई है जो Xcode प्रोजेक्ट में छवियों को गतिशील रूप से फसल करता है? कृपया कुछ चाल या तकनीक प्रदान करें मैं आईफोन में कैमरा छवियों को कैसे फसल कर सकता हूं।आईओएस

उत्तर

1

आप छवि को गतिशील रूप से क्रॉप करने के लिए कोरग्राफिक्स फ्रेमवर्क का उपयोग कर सकते हैं। यहां गतिशील छवि फसल का एक उदाहरण कोड भाग है। मुझे आशा है कि यह आपके लिए सहायक होगा।

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

आप छवि को फसल करने के लिए नीचे सरल कोड का उपयोग कर सकते हैं। आपको छवि और सीजीआरईटी पास करना होगा जो फसल क्षेत्र है। यहां, मैं छवि को फसल करता हूं ताकि मुझे मूल छवि का केंद्र भाग मिल सके और लौटाई गई छवि वर्ग हो।

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

शानदार! आईओएस 7 पर एक हवा की तरह काम करता है। धन्यवाद! –

1

Xcode 5, आईओएस 7, और 4 इंच की स्क्रीन उदाहरण: यहाँ एक SimpleImageCropEditor (Project Zip and Source Code Example का एक खुला स्रोत उदाहरण है। आप छवि क्रॉप संपादक को मॉडल व्यू कंट्रोलर के रूप में लोड कर सकते हैं और पुन: उपयोग कर सकते हैं। कोड को देखें और कृपया इस विषय कोड "आईओएस के लिए छवि क्रॉपिंग एपीआई" प्रश्न का उत्तर देने के बारे में रचनात्मक टिप्पणियां छोड़ दें।

दिखाता है, उदाहरण स्रोत उद्देश्य-सी कोड है, UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController, और UIGestureRecognizer का उपयोग।

10

संपादित करें - स्विफ्ट संस्करण

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

इन सभी समाधान काफी जटिल और उनमें से कई लगता है वास्तव में गुणवत्ता छवि नीचा। आप बॉक्स विधियों से UIImageView का उपयोग कर अधिक सरल कर सकते हैं।

ऑब्जेक्टिव-सी

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

इस आयाम आप के लिए अपने UIImageView (मैं मेरा यहाँ imageView कहा जाता है) निर्धारित किया है के आधार पर अपना चित्र काटने होंगे।
यह इतना आसान है और अन्य समाधानों की तुलना में काफी बेहतर काम करता है।

+0

मुझे लगता है कि आपका उत्तर केवल 'UIImageView' की सीमाओं के भीतर अस्थायी रूप से छवि का आकार बदलता है। यदि आप केवल छवि प्रदर्शित करने के लिए चिंतित हैं, तो यह काम करेगा। हालांकि, अगर, उदाहरण के लिए, आपको सर्वर पर अपलोड करने से पहले छवि को संशोधित करने की आवश्यकता है, तो यह दृष्टिकोण उस मामले में काम नहीं करेगा। – Andrew

+0

सच है लेकिन वह एक तरीका तलाश रही है कि "छवियों को गतिशील रूप से फसल करें", इसलिए मेरा सुझाव यहां बिल्कुल ठीक है। – sf89