How to crop the UIImage in iPhone?

前端 未结 3 1603
渐次进展
渐次进展 2020-12-17 08:23

In my application, I have set one image in UIImageView and the size of UIImageView is 320 x 170. but the size of original image is 320 x 460. so how to crop this image and d

相关标签:
3条回答
  • 2020-12-17 08:30

    You can call this function for cropping the image -

    - (UIImage *)resizeImage:(UIImage *)oldImage width:(float)imageWidth height:(float)imageHeight {
        UIImage *newImage = oldImage;
    
        CGSize itemSize = CGSizeMake(imageWidth, imageHeight);
        UIGraphicsBeginImageContext(itemSize);
        CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
        [oldImage drawInRect:imageRect];
    
        newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return newImage;
    }
    

    this function returns the UIImage.

    0 讨论(0)
  • 2020-12-17 08:39

    Here is a good way to crop an image to a CGRect:

    - (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(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,
                                    imageToCrop.size.width,
                                    imageToCrop.size.height);
    
       //draw the image to our clipped context using our offset rect
    
       CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage);
    
       //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;
    
    }
    

    Or another way:

    - (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
     
    
    {
      CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
    
    
      UIImage *cropped = [UIImage imageWithCGImage:imageRef];
    
      CGImageRelease(imageRef);
    
    
      return cropped;
    
    
    }
    

    From http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/.

    0 讨论(0)
  • 2020-12-17 08:52

    Maybe someone is interested in the Swift version of the answer @tirth gave. It is written as a UIImage extension. As an example I added another method to crop the image to be a center square version.

        // MARK: - UIImage extension providing function to crop an image to a rect
        extension UIImage {
            /**
             Return a cropped image from an existing image
    
             - parameter toRect: a rectangular region for a new image
    
             - returns: new image instance
             */
            func croppedImage(toRect: CGRect) -> UIImage {
                // create new CGImage reference
                let imageRef = CGImageCreateWithImageInRect(self.CGImage, toRect)
                // create and return new UIImage
                return UIImage(CGImage: imageRef!)
            }
    
            /**
             Crop center rect from possibly rectangular image
    
             - returns: return self in case image is already square, new center rect otherwise
             */
            func cropCenterRect() -> UIImage {
                // image might already be square
                if self.size.height == self.size.width {
                    return self
                }
                // portrait
                if self.size.height > self.size.width {
                    // calculate offset at top and bottom
                    let offset = (self.size.height - self.size.width) / 2.0
                    // return cropped image
                    return self.croppedImage(CGRect(x: 0.0, y: offset, width: self.size.width, height: self.size.width))
                } else {
                    // landscape
                    // calculate offset left and right
                    let offset = (self.size.width - self.size.height) / 2.0
                    // return cropped image
                    return self.croppedImage(CGRect(x: offset, y: 0.0, width: self.size.height, height: self.size.height))
                }
            }
        }
    
    0 讨论(0)
提交回复
热议问题