2011-08-17 39 views
26

Có bất kỳ API hình ảnh cắt xén nào cho mục tiêu C để cắt hình ảnh động trong dự án Xcode không? Vui lòng cung cấp một số thủ thuật hoặc kỹ thuật làm thế nào tôi có thể cắt hình ảnh camera trong iPhone.API cắt hình ảnh cho iOS

Trả lời

1

Bạn có thể sử dụng khung CoreGraphics để cắt ảnh động. Đây là một phần mã ví dụ về hình ảnh động. Tôi hy vọng điều này sẽ hữu ích cho bạn.

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

Bạn có thể sử dụng bên dưới mã đơn giản để cắt hình ảnh. Bạn phải vượt qua hình ảnh và CGRect là khu vực cắt xén. Ở đây, tôi cắt hình ảnh để tôi lấy phần trung tâm của hình ảnh gốc và hình ảnh trả về là hình vuông.

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

Tuyệt vời! Hoạt động như một khoe trên iOS 7. Cảm ơn! –

1

Xcode 5, iOS 7, và ví dụ màn hình 4-inch: Dưới đây là một ví dụ mã nguồn mở của một SimpleImageCropEditor (Project Zip and Source Code Example. Bạn có thể tải Trình chỉnh sửa Crop hình ảnh dưới dạng Bộ điều khiển chế độ xem và sử dụng lại. Xem mã và vui lòng để lại các nhận xét mang tính xây dựng liên quan nếu mã ví dụ này trả lời câu hỏi "Image Cropping API for iOS".

Chứng minh, ví dụ là mã Mục tiêu-C, sử dụng UIImagePickerController, @protocol, UIActionSheet, UIScrollView, UINavigationController, MFMailComposeViewController và UIGestureRecognizer.

10

EDIT - Swift Version

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

Tất cả các giải pháp này dường như khá phức tạp và nhiều người trong số họ thực sự làm suy giảm chất lượng hình ảnh. Bạn có thể làm đơn giản hơn nhiều bằng cách sử dụng phương thức của hộp.

Objective-C

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

này sẽ cắt hình ảnh của bạn dựa trên các kích thước bạn đã đặt cho UIImageView của bạn (tôi đã gọi tôi imageView đây).
Nó đơn giản và hoạt động tốt hơn nhiều so với các giải pháp khác.

+0

Tôi nghĩ rằng câu trả lời của bạn chỉ đơn giản là thay đổi kích thước hình ảnh tạm thời trong giới hạn của 'UIImageView'. Nếu bạn chỉ quan tâm đến việc hiển thị hình ảnh, điều này sẽ hoạt động. Tuy nhiên, nếu, ví dụ, bạn cần sửa đổi hình ảnh trước khi tải lên máy chủ, cách tiếp cận này sẽ không hoạt động trong trường hợp đó. – Andrew

+0

Đúng, nhưng cô ấy đang tìm kiếm một cách "tạo hình ảnh động", vì vậy đề xuất của tôi là hoàn toàn tốt đẹp ở đây. – sf89

Các vấn đề liên quan