iOS

2012-04-09 12 views
25

'daki bir resmi nasıl kırpırsınız Bir bölümde çıkartma yapabileceğiniz bir fotoğraf uygulamasına sahibim. İşiniz bittiğinde, görüntüyü kaydetmek istiyorum. İşte bunu yapmam gereken kod. iOS

if(UIGraphicsBeginImageContextWithOptions != NULL) 
{ 
    UIGraphicsBeginImageContextWithOptions(self.view.frame.size, YES, 2.5); 
} else { 
    UIGraphicsBeginImageContext(self.view.frame.size); 
} 
CGContextRef contextNew=UIGraphicsGetCurrentContext(); 

[self.view.layer renderInContext:contextNew]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Şimdi kaydedilmesini görüntü gayet görüntünün, tam ekran, ama şimdi resmi kırpmak gerekiyor ve nasıl bilmiyorum. Aşağıdaki bağlantıdan görüntüyü görebilirsiniz: http://dl.dropbox.com/u/19130454/Photo%202012-04-09%201%2036%2018%20PM.png

Ben kırpmak gerekiyor: soldan 91px ve sağ 220px Herhangi bir yardım büyük takdir alt

dan. Eğer işleri açık bir şekilde açıklamadıysam, lütfen bana bildirin ve tekrar açıklamak için elimden gelenin en iyisini yapacağım.

+1

almak için bu yöntemi çağırmanız gerekir Bir iOS Uygulamasına Görüntü Kırpma Ekleme Kütüphanesi Hızla] (http://maniacdev.com/2011/10/open-source-library-to-add-image-cropping-into-an-ios-app-quickly/) – Lucien

+0

[iOS için Görüntü Kırpma API'sı] 'nın olası kopyası (http://stackoverflow.com/questions/7087435/image-cropping-api-for-ios) – NAlexN

cevap

34

Bu nasıl

CGRect clippedRect = CGRectMake(self.view.frame.origin.x+91, self.view.frame.origin.y, self.view.frame.size.width-91*2, self.view.frame.size.height-220); 
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect); 
UIImage *newImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 
+0

Yardım için çok teşekkürler. Bu mükemmel çalıştı! – flite3

+3

Bu, UIImage onu desteklediği için resim yönünü göz ardı eder, ancak CGImage, – Dustin

1
- (UIImage*)imageByCropping:(CGRect)rect 
{ 
    //create a context to do our clipping in 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    //create a rect with the size we want to crop the image to 
    //the X and Y here are zero so we start at the beginning of our 
    //newly created context 
    CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height); 
    CGContextClipToRect(currentContext, clippedRect); 

    //create a rect equivalent to the full size of the image 
    //offset the rect by the X and Y we want to start the crop 
    //from in order to cut off anything before them 
    CGRect drawRect = CGRectMake(rect.origin.x * -1, 
           rect.origin.y * -1, 
           self.size.width, 
           self.size.height); 

    //draw the image to our clipped context using our offset rect 
    // CGContextDrawImage(currentContext, drawRect, self.CGImage); 
    [self drawInRect:drawRect]; // This will fix getting inverted image from context. 

    //pull the image from our cropped context 
    UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext(); 

    //pop the context to get back to the default 
    UIGraphicsEndImageContext(); 

    //Note: this is autoreleased 
    return cropped; 
} 
+1

'u değil, self.CGImage nedir? – Dvole

+1

Bu yöntemi kullanıyorum, görüntüm doğru şekilde kırpıldı. Ama otomatik olarak tersine döndü. Bana yardım edebilir misin thankx. – iHulk

+0

@ user2534373 bu kaldırmaya çalışın UIGraphicsEndImageContext(); – Mohit

-1

böyle bir şey size yardımcı olabilecek kod takiben Resmi kırpmak

https://github.com/myang-git/iOS-Image-Crop-View

** How to Use ** 

Very easy! It is created to be a drop-in component, so no static library, no extra dependencies. Just copy ImageCropView.h and ImageCropView.m to your project, and implement ImageCropViewControllerDelegate protocol. 
Use it like UIImagePicker: 
- (void)cropImage:(UIImage *)image{ 
    ImageCropViewController *controller = [[ImageCropViewController alloc] initWithImage:image]; 
    controller.delegate = self; 
    [[self navigationController] pushViewController:controller animated:YES]; 
} 
- (void)ImageCropViewController:(ImageCropViewController *)controller didFinishCroppingImage:(UIImage *)croppedImage{ 
    image = croppedImage; 
    imageView.image = croppedImage; 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 
- (void)ImageCropViewControllerDidCancel:(ImageCropViewController *)controller{ 
    imageView.image = image; 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 
+0

linkinden bazı içerikler ekleyin. – Robert

+0

merhaba benim kendi ramani bir yardım .. benim proje kırpma görüntü gibi yüz şekli görüntü gibi birçok farklı tip şekli kırpma ve kırpma görünümü nesnel c için hareket ve ölçek –

+0

görüntü kırpma için bu demo kullanın https://github.com/gavinbunney/Toucan –

2

için aşağıdaki bağlantıya bakınız. [Açık Kaynak:

aşağıdaki yöntemle doğru cropFrame yumruk almalısınız

-(CGRect)cropRectForFrame:(CGRect)frame 
{ 
    // NSAssert(self.contentMode == UIViewContentModeScaleAspectFit, @"content mode must be aspect fit"); 

    CGFloat widthScale = imageview.superview.bounds.size.width/imageview.image.size.width; 
    CGFloat heightScale = imageview.superview.bounds.size.height/imageview.image.size.height; 

    float x, y, w, h, offset; 
    if (widthScale<heightScale) { 
     offset = (imageview.superview.bounds.size.height - (imageview.image.size.height*widthScale))/2; 
     x = frame.origin.x/widthScale; 
     y = (frame.origin.y-offset)/widthScale; 
     w = frame.size.width/widthScale; 
     h = frame.size.height/widthScale; 
    } else { 
     offset = (imageview.superview.bounds.size.width - (imageview.image.size.width*heightScale))/2; 
     x = (frame.origin.x-offset)/heightScale; 
     y = frame.origin.y/heightScale; 
     w = frame.size.width/heightScale; 
     h = frame.size.height/heightScale; 
    } 
    return CGRectMake(x, y, w, h); 
} 

Sonra bu sizin için iyi bir kaynak olabilir kırpılmış imajını

- (UIImage *)imageByCropping:(UIImage *)image toRect:(CGRect)rect 
{ 
    // you need to update scaling factor value if deice is not retina display 
    UIGraphicsBeginImageContextWithOptions(rect.size, 
              /* your view opaque */ NO, 
              /* scaling factor */ 2.0); 

    // stick to methods on UIImage so that orientation etc. are automatically 
    // dealt with for us 
    [image drawAtPoint:CGPointMake(-rect.origin.x, -rect.origin.y)]; 

    UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return result; 
}