How to crop image on iPhone

I want to do the same as in this matter. In my application, I want to crop the image, how do we crop the images in FaceBook, can someone direct me to a good tutorial link or with any code sample. The link I provided will fully describe my requirement.

+4
source share
2 answers

You can create a new image with any properties. Here is my function, because it is. you just need to use your own settings for the new image. In my case, the image is not cropped, I just do some kind of effect, moving the pixels from there with the original place to another. But if you initialize a new image with a different height and width, you can simply copy from any pixel range the old image that you need into a new one:

-(UIImage *)Color:(UIImage *)img
{
    int R;
    float m_width = img.size.width;
    float m_height = img.size.height;
    if (m_width>m_height) R = m_height*0.9;
    else R = m_width*0.9;
    int m_wint = (int)m_width;      //later,  we will need this parameters in float and int. you may just use "(int)" and "(float)" before variables later, and do not implement another ones
    int m_hint = (int)m_height;

    CGRect imageRect;
    //cheking image orientation. we will work with image pixel-by-pixel, so we need to make top side at the top.
    if(img.imageOrientation==UIImageOrientationUp 
       || img.imageOrientation==UIImageOrientationDown) 
    {
        imageRect = CGRectMake(0, 0, m_wint, m_hint); 
    }
    else 
    {
        imageRect = CGRectMake(0, 0, m_hint, m_wint); 
    }
    uint32_t *rgbImage = (uint32_t *) malloc(m_wint * m_hint * sizeof(uint32_t));
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(rgbImage, m_wint, m_hint, 8, m_wint *sizeof(uint32_t), colorSpace,   kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextTranslateCTM(context, 0, m_hint);
    CGContextScaleCTM(context, 1.0, -1.0);
    switch (img.imageOrientation) {
        case UIImageOrientationRight:
        {
            CGContextRotateCTM(context, M_PI / 2);
            CGContextTranslateCTM(context, 0, -m_wint);            
        }break;
        case UIImageOrientationLeft:
        {
            CGContextRotateCTM(context, - M_PI / 2);
            CGContextTranslateCTM(context, -m_hint, 0);            
        }break;
        case UIImageOrientationUp:
        {
            CGContextTranslateCTM(context, m_wint, m_hint);
            CGContextRotateCTM(context, M_PI);
        }
        default:
            break;
    }

    CGContextDrawImage(context, imageRect, img.CGImage);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    //here is new image. you can change m_wint and m_hint as you whant
    uint8_t *result = (uint8_t *) calloc(m_wint * m_hint * sizeof(uint32_t), 1);
    for(int y = 0; y < m_hint; y++) //new m_hint here
    {
        float fy=y;
        double yy =    (m_height*(  asinf(m_height/(2*R))-asin(((m_height/2)-fy)/R)   )) /
        (2*asin(m_height/(2*R))); // (xx, yy) - coordinates of pixel of OLD image
        for(int x =  0; x < m_wint; x++) //new m_wint here
        {
            float fx=x;
            double xx =    (m_width*(  asin(m_width/(2*R))-asin(((m_width/2)-fx)/R)   )) /
            (2*asin(m_width/(2*R)));
            uint32_t rgbPixel=rgbImage[(int)yy * m_wint + (int)xx];
            int intRedSource = (rgbPixel>>24)&255;
            int intGreenSource = (rgbPixel>>16)&255;
            int intBlueSource = (rgbPixel>>8)&255;
            result[(y * (int)m_wint + x) * 4] = 0;
            result[(y * (int)m_wint + x) * 4 + 1] = intBlueSource;
            result[(y * (int)m_wint + x) * 4 + 2] = intGreenSource;
            result[(y * (int)m_wint + x) * 4 + 3] = intRedSource;

        }
    }

    free(rgbImage);

    colorSpace = CGColorSpaceCreateDeviceRGB();
    context = CGBitmapContextCreate(result, m_wint, m_hint, 8, m_wint * sizeof(uint32_t), colorSpace,   kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast  ); //new m_wint and m_hint as well


    CGImageRef image1 = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    UIImage *resultUIImage = [UIImage imageWithCGImage:image1];
    CGImageRelease(image1);


    @try {
        free(result);
    }
    @catch (NSException * e) {
        NSLog(@"proc. Exception: %@", e);
    }

    return resultUIImage;
}
+4
source

CGRect rectImage = CGRectMake (p1.x, p1.y, p2.x - p1.x, p4.y - p1.y);

//Create bitmap image from original image data,
//using rectangle to specify desired crop area

CGImageRef imageRef = CGImageCreateWithImageInRect([imageForCropping CGImage], rectImage); 
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(p1.x, p1.y,p2.x-p1.x p4.y-p1.y)];
imageView1.image = croppedImage;
[self.view addSubview:imageView1];
CGImageRelease(imageRef);
+3
source

All Articles