在我的应用程序中,我在UIImageView中设置了一个图像,UIImageView的大小为320 x 170.但是原始图像的大小是320 x 460.所以如何裁剪这个图像并在UIImageView中显示。
答案 0 :(得分:10)
以下是将图像裁剪为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;
}
或另一种方式:
- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
来自http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/。
答案 1 :(得分:3)
您可以调用此功能来裁剪图像 -
- (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;
}
此函数返回UIImage
。
答案 2 :(得分:0)
也许某人对@tirth给出的答案的Swift版本感兴趣。它被写为UIImage
扩展名。作为一个例子,我添加了另一种方法来将图像裁剪为中心方形版本。
// 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))
}
}
}