Ios 如何裁剪图像,使其具有弯曲的不规则边缘?

Ios 如何裁剪图像,使其具有弯曲的不规则边缘?,ios,objective-c,uitableview,uiimageview,Ios,Objective C,Uitableview,Uiimageview,我有一个图像大小合适的UITableViewCell。 这是单元格的外观: 我有背景: 和图像占位符: 我想知道是否有办法使用iOS库裁剪图像?您可以使用CoreGraphics添加带有路径的遮罩或剪辑。遮罩是带有alpha通道的图像,该通道决定图像显示的部分。下面的示例演示如何使用图像遮罩进行剪辑: - (UIImage *)croppedImage:(UIImage *)sourceImage { UIGraphicsBeginImageContextWithOptions(C

我有一个图像大小合适的UITableViewCell。 这是单元格的外观:

我有背景:

和图像占位符:


我想知道是否有办法使用iOS库裁剪图像?

您可以使用CoreGraphics添加带有路径的遮罩或剪辑。遮罩是带有alpha通道的图像,该通道决定图像显示的部分。下面的示例演示如何使用图像遮罩进行剪辑:

- (UIImage *)croppedImage:(UIImage *)sourceImage
{
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, [UIScreen mainScreen].scale);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClipToMask(context, CGRectMake(0, 0, width, height), [UIImage imageNamed:@"mask"].CGImage);

    [sourceImage drawInRect:CGRectMake(0, 0, width, height)];

    UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultImage;
}
然后您可以编写
cell.picture=[self-crappedimage:sourceImage]

是,可能:

UIImage *imageToCrop = ...;
UIGraphicsBeginImageContext();
CGContextRef context = UIGraphicsGetCurrentContext();
[imageToCrop drawAtPoint:CGPointZero];
CGContextAddEllipseInRect(context, CGRectMake(0 ,0, imageToCrop.size.width,  imageToCrop.size.height);
CGContextClip(context);
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

您可以使用图像遮罩技术裁剪此图像 请看一下这个链接

我已经写了一些代码,可能会帮助你

@interface ImageRenderer : NSObject {
UIImage *image_;
}
@property (nonatomic, retain) UIImage * image;
- (void)cropImageinRect:(CGRect)rect;
- (void)maskImageWithMask:(UIImage *)maskImage;
- (void)imageWithAlpha;
@end

@implementation ImageRenderer

@synthesize image = image_;

- (void)cropImageinRect:(CGRect)rect  {
CGImageRef imageRef = CGImageCreateWithImageInRect(image_.CGImage, rect);
image_ = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}

- (void)maskImageWithMask:(UIImage *)maskImage  {

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef maskImageRef = [maskImage CGImage];
// create a bitmap graphics context the size of the image
CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
if (mainViewContentContext == NULL){
    return;
   }

CGFloat ratio = 0;

ratio = maskImage.size.width/ image_.size.width;

if(ratio * image_.size.height < maskImage.size.height) {
    ratio = maskImage.size.height/ image_.size.height;
} 

CGRect rect1  = {{0, 0}, {maskImage.size.width, maskImage.size.height}};
CGRect rect2  = {{-((image_.size.width*ratio)-maskImage.size.width)/2 , -((image_.size.height*ratio)-maskImage.size.height)/2}, {image_.size.width*ratio, image_.size.height*ratio}};

CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);
CGContextDrawImage(mainViewContentContext, rect2, image_.CGImage);
// Create CGImageRef of the main view bitmap content, and then
// release that bitmap context
CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);

image_ = [UIImage imageWithCGImage:newImage];

CGImageRelease(newImage);
}

- (void)imageWithAlpha {
CGImageRef imageRef = image_.CGImage;
CGFloat width = CGImageGetWidth(imageRef);
CGFloat height = CGImageGetHeight(imageRef);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context =  CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);

CGImageRef resultImageRef = CGBitmapContextCreateImage(context);
image_ = [UIImage imageWithCGImage:resultImageRef scale:image_.scale orientation:image_.imageOrientation];

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
CGImageRelease(resultImageRef);
}

@end
@接口图像渲染器:NSObject{
UIImage*image;
}
@属性(非原子,保留)UIImage*image;
-(void)cropImageinRect:(CGRect)rect;
-(void)maskImage with mask:(UIImage*)maskImage;
-(无效)带有Alpha的图像;
@结束
@图像渲染器的实现
@合成图像=图像;
-(void)cropImageinRect:(CGRect)rect{
CGImageRef imageRef=CGImageCreateWithImageInRect(image.CGImage,rect);
image_uz=[UIImage-imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
-(void)maskImage with mask:(UIImage*)maskImage{
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGImageRef MASKIMAGEF=[maskImage CGImage];
//根据图像大小创建位图图形上下文
CGContextRef mainViewContentContext=CGBitmapContextCreate(NULL,maskImage.size.width,maskImage.size.height,8,0,颜色空间,kcGimageAlphaPremultipledLast);
if(mainViewContentContext==NULL){
返回;
}
现金流量比率=0;
比率=maskImage.size.width/图像大小.width;
if(比率*图像大小高度

在此代码中,您可以从较大的图像中裁剪出图像,然后使用遮罩图像完成工作。

将图像占位符内的白色区域变为透明,然后在该图像下找到图像视图。不,没有这样的系统库。附言:这件艺术品看起来不错!你应该问这样的问题:
这是我的问题,这是我尝试的解决方案,我的解决方案出了什么问题
不是
这是我的问题,为我写解决方案
@DavidH,不是这样,有一个核心的图形功能可以做到这一点。还是想看看MTA是怎么做的。请注意,这不是裁剪操作-这是剪切/掩蔽操作。@Wain感谢您提供的信息,我将检查它并发布一个问题,其中包含我在项目中尝试过的代码。不需要新问题,我们这里有一个非常好的问题:)