Xcodeプロジェクトで動的に画像をトリミングするObjective Cのトリミング画像APIはありますか? iPhoneでカメラ画像をトリミングする方法やテクニックを教えてください。
以下の簡単なコードを使用して、画像をトリミングできます。画像とトリミング領域であるCGRectを渡す必要があります。ここでは、元の画像の中央部分を取得し、返される画像が正方形になるように画像をトリミングします。
// 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;
}
編集-Swiftバージョン
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
これらすべてのソリューションは非常に複雑に見え、それらの多くは実際に画像の品質を低下させます。 UIImageView
の標準のメソッドを使用すると、はるかに簡単に行うことができます。
Objective-C
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
[self.imageView setClipsToBounds:YES];
[self.imageView setImage:img];
これにより、UIImageView
に設定したサイズに基づいて画像がトリミングされます(ここではimageView
と呼びます)。
非常にシンプルで、他のソリューションよりも優れています。
Xcode 5、iOS 7、および4インチ画面の例: SimpleImageCropEditor(プロジェクトZipおよびソースコードの例 のオープンソースの例を次に示します。イメージクロップエディターをモーダルビューコントローラーとしてロードして、コードを見て、このサンプルコードが「iOS用Image Cropping API」の質問に答えるかどうかに関する建設的なコメントを残してください。
ソースObjective-Cコードの例、UIImagePickerController、@ protocol、UIActionSheet、UIScrollView、UINavigationController、MFMailComposeViewController、およびUIGestureRecognizerの使用を示します。
CoreGraphicsフレームワークを使用して、画像を動的にトリミングできます。動的な画像の切り抜きのコード部分の例を次に示します。これがお役に立てば幸いです。
- (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]];
}