UIBezierPath
에 정의 된 모양이 있습니다. 나도 UIImage
가있다. 이제 UIBezierPath
을 사용하여이 이미지를 잘라내려고합니다. 어떻게해야합니까?UIBezierPath - 초보자를 사용하여 이미지 자르기
let shape = UIBezierPath(rect: imageRect)
let image = UIImage(cgimage: c)
UIBezierPath
에 정의 된 모양이 있습니다. 나도 UIImage
가있다. 이제 UIBezierPath
을 사용하여이 이미지를 잘라내려고합니다. 어떻게해야합니까?UIBezierPath - 초보자를 사용하여 이미지 자르기
let shape = UIBezierPath(rect: imageRect)
let image = UIImage(cgimage: c)
이미지를 UIImageView에 표시하는 경우 mask 속성을 사용할 수 있습니다.
당신은 경로 밖으로있는 UIImage을해야합니다
extension UIBezierPath {
func asMaskImage(fillColor:UIColor = UIColor.black) -> UIImage
{
// Make a graphics context
UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(fillColor.cgColor)
// and fill it!
self.fill()
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
그럼 당신은 마스크로 사용 : 나는 Objective C
코드를 걸었습니다
myImageView.image = image
myImageView.mask = UIImageView(image: shape.asMaskImage())
. 그러나 코드 아래
CAShapeLayer *newLayer = [[CAShapeLayer alloc] init];
newLayer.path = self.shape.CGPath;
[self.view.layer setMask:newLayer];
CGRect rectToCrop = self.shape.bounds;
UIGraphicsBeginImageContext(self.view.frame.size);//, NO, 0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[newLayer removeFromSuperlayer];
newLayer = nil;
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rectToCrop);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.imgVPhoto.image.scale orientation:self.imgVPhoto.image.imageOrientation];
CGImageRelease(imageRef);
시도 그리고
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//saving cut Image
NSData *imgData = UIImagePNGRepresentation(croppedImage);
if (imgData) {
NSString *imagePath =
if([FileUtility fileExistsAtFilePath:imagePath]) {
[FileUtility deleteFile:imagePath];
}
//need to add this task in BG to avoid blocking of main thread
[imgData writeToFile:imagePath atomically:true];
}
}];
는 희망이 도움이 저장하세요
swift3
에 변환 쉽게하는
편집
SWIFT Convert
var newLayer = CAShapeLayer()
newLayer.path = shape.cgPath
view.layer.mask = newLayer
var rectToCrop: CGRect = shape.bounds
UIGraphicsBeginImageContext(view.frame.size)
//, NO, 0);
view.layer.render(inContext: UIGraphicsGetCurrentContext())
var image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
newLayer.removeFromSuperlayer()
newLayer = nil
var imageRef: CGImageRef? = image?.cgImage.cropping(to: rectToCrop)
var croppedImage = UIImage(cgImage: imageRef!, scale: imgVPhoto.image.scale, orientation: imgVPhoto.image.imageOrientation)
CGImageRelease(imageRef)
아직도 운이 없다. 솔루션을 가진 사람이 있습니까? – Illep
은 당신을 위해 Objc 코드입니다. –
내 솔루션이 도움이 되었습니까? 또는 여전히 내 솔루션에 문제가 있습니까? –