首页 > 其他分享 >iOS 裁剪图片

iOS 裁剪图片

时间:2023-05-24 13:06:50浏览次数:28  
标签:image 裁剪 iOS UIColor width context UIImage 图片 size



//
//  ViewController.m
//  test_btn_image_01
//
//  Created by cdd on 16/7/4.
//  Copyright © 2016年 jeffasd. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
//    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//    
//    
//    
//    button.frame = CGRectMake(100, 200, 200, 80);
//    button.backgroundColor = [UIColor cyanColor];
//    
//    UIImage *btnImage = [UIImage imageNamed:@"right"];
//    
//    [button setImage:[UIImage imageNamed:@"right"] forState:UIControlStateNormal];
//    
//    [button setTitle:@"发布" forState:UIControlStateNormal];
//    
//    
    [button setImageEdgeInsets:UIEdgeInsetsMake(0, btnImage.size.width, 0, btnImage.size.width)];
//    
//    [button setImageEdgeInsets:UIEdgeInsetsMake(0, btnImage.size.width, 0, -btnImage.size.width)];
//    
//    [self.view addSubview:button];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    
//    [self cropImage:50 Image:[self imageWithColor:[UIColor cyanColor]]];
    
    [self cropImage:50 UIColor:[UIColor cyanColor]];
    
}

- (UIImage *)cropImage:(CGFloat)width UIColor:(UIColor *)color {

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, width), NO, 0.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
//    CGContextSaveGState(context);
    CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
    CGContextFillRect(context, CGRectMake(0, 0, width, width));
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, width), NO, 0.0);
    CGContextRef ctx=UIGraphicsGetCurrentContext();
//    CGContextRestoreGState(context);
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, width, width));
    CGContextClip(ctx);
//    [image drawAtPoint:CGPointMake(0, 0)];
    CGContextDrawImage(ctx, CGRectMake(0, 0, width, width), image.CGImage);
    UIImage *newimage = UIGraphicsGetImageFromCurrentImageContext();
    
    
    return newimage;
    
    
    
#if 0
    
    CGFloat borderW = 0;
//    1.开启一个和原始图片一样大小的位图上下文.
    CGSize size = CGSizeMake(image.size.width + 2 *borderW, image.size.height + 2 * borderW);
    UIGraphicsBeginImageContextWithOptions(size,NO,0);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    
//    2.绘制一个大圆,填充
//    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];
//    [[UIColor blueColor] set];
//    [path fill];
//    3.添加一个裁剪区域.
//    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
//    [path addClip];
    
    
    CGContextAddEllipseInRect(context, CGRectMake(borderW, borderW, image.size.width, image.size.height));
    //
    //
    CGContextClip(context);
    
    
//    4.把图片绘制到裁剪区域当中.
    [image drawAtPoint:CGPointMake(borderW, borderW)];
//    5.生成一张新图片.
    UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();
//    6.关闭上下文.
    UIGraphicsEndImageContext();
    
    return clipImage;
#endif
    
}

- (UIImage *)imageWithColor:(UIColor *)color{
    
    CGFloat width = 50;
    
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, width), NO, 0.0);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
    
    CGContextFillRect(context, CGRectMake(0, 0, width, width));
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    return image;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end




标签:image,裁剪,iOS,UIColor,width,context,UIImage,图片,size
From: https://blog.51cto.com/u_16124099/6338559

相关文章

  • iOS OpenGL ES FBO 帧缓存区 渲染缓存区详解
    原文地址:https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW6绘制到其他渲染目的地Framebuffer对象是渲染命令的目标。......
  • img圆角图片
    Bootstrap 对图片的支持。Bootstrap 提供了三个可对图片应用简单样式的class:.img-rounded:添加style="border-radius:6px"来获得图片圆角。.img-circle:添加border-radius:500px来让整个图片变成圆形。.img-thumbnail:添加一些内边距(padding)和一个灰色的边框。<img>类以下......
  • 多线程下载图片并压缩
    从ftp服务器下载文件,文件里是多张图片的name和uri,格式是name||uri,根据uri下载图片并压缩存储到本地服务器主要流程:1 从ftp服务器下载文件,2 将文件格式解析后的地址存入map容器内,3 计算每个线程需要下载的url,并循环调用threadPool.execute(mythead),子线程根据uri下......
  • iOS mask 层 UIBezierPath path 放大
    iOSmask层UIBezierPathpath放大////ViewController.m//test_shapeLayer_02////Createdbyadminon3/4/16.//Copyright©2016jeffasd.Allrightsreserved.//#import"ViewController.h"@interfaceViewController()@property(nonatomic......
  • iOS 获取图像的方式与坑点
    请求图像(这里有巨坑)-requestImageForAsset:targetSize:contentMode:options:resultHandler:你不应该生成该类的实例,而应该使用该类的提供的单例对象。该方法提供指定的尺寸的图像,与ALAssetsLibrary库相比,没有了方便的缩略图提供。不过要吐槽的是,需要注意的是,该方法在默认情况下是......
  • iOS UIView如何管理它的子视图
    didMoveToWindow 通知接收者它一斤给添加到窗口中 -(void)didMoveToWindow 讨论 默认实现不做任何事情;子类可以重写这个方法来做特殊的实现 窗口的属性有可能是nil当这个方法调用的时候,这表明接收者并不属于当然任何一个窗口。这个只发生在接收者从它的父视图上移......
  • iOS8 Self Sizing UITableView Cells iOS8Tableview Cells 自适应高度
    UITableViewUITableViewTheoldwayUITableView inheritsfrom UIScrollView).Iftherowswere allequalthiswas justasimpleoperation.Butiftheywere different,ithad toknow theheightsofalltherowsandsumthem.Itaskedusfortheheightofeve......
  • 将dom转化为图片和批量下载
    利用html2canvas和jszip第三方库importhtml2canvasfrom'html2canvas'importjszipfrom'jszip'具体实现:downloadAll(){this.loading=truelet_this=thisconststations=document.getElementsByClassName('station_b......
  • vueh5实现双指操作图片或者内容放大缩小拖动 (hammerjs插件)
    可在mounted钩子直接使用通过使用Hammer.js库来实现手势操作,包括缩放、拖动和双击重置功能1.在模板中添加了一个<div>元素,并为其设置了ref属性,以便在代码中引用该元素。2.在mounted生命周期钩子函数中,通过this.$refs.main获取之前设置的<div>元素。3.创建了一个新的Hammer实例,传入......
  • 进行图片识别后传入接口问题提出与解决
    首先,对于Android内的代码进行带入,可以实现,后来,进行数据格式输出的筛选,目前人工智能给出的答案格式不同,利用正则表达式提取不全,但可以提取,另外,在查找可以语法格式来针chatgpt,以实现结果的规范输出。还有一个很悲伤的事,接口被停了,看看博主进行维护的怎么样,可以的化这个项目还是可......