blog.csdn.net/u010105969/article/details/52609922 最近在底牌项目中公司要求上传的牌谱宽度固定为750像素,首先想到的是改变上传图片的尺寸,下面的方法即可改变UIImage...代码: - (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize{ UIGraphicsBeginImageContext(CGSizeMake...reSize.width, reSize.height)); [image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)]; UIImage
/** color转image */ (UIImage)createImageWithColor: (UIColor)color { CGRect rect=CGRectMake(0.0f, 0.0f...UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); UIImage
需要把H5传递过来的base64保存为PDF文件,经解析,H5是直接把png转base64,保存下来的文件就算是重命名为【xxx.pdf】,依然还是没法在【文件.app】中打开,只能把base64转成UIImage...,再通过绘制PDF来进行保存 解决方案 先把base64Str转成UIImage UIImage * imgForBase64 = [UIImage imageFromBase64ToWithStr:self.base64Data...]; /// base64str->Image + (UIImage *)imageFromBase64ToWithStr:(NSString *)str{ NSString *base64Str...alloc]initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters]; UIImage...*image = [[UIImage alloc]initWithData:decodeData]; return image; } 创建文件名和保存目录 ///文件夹根目录 NSString
需要把H5传递过来的base64保存为PDF文件,经解析,H5是直接把png转base64,保存下来的文件就算是重命名为【xxx.pdf】,依然还是没法在【文件.app】中打开,只能把base64转成UIImage...,再通过绘制PDF来进行保存 解决方案 先把base64Str转成UIImageUIImage * imgForBase64 = [UIImage imageFromBase64ToWithStr:self.base64Data...]; /// base64str->Image + (UIImage *)imageFromBase64ToWithStr:(NSString *)str{ NSString *base64Str...alloc]initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters]; UIImage...*image = [[UIImage alloc]initWithData:decodeData]; return image; }///文件夹根目录 NSString * localFileDirectory
然我们再深入一点儿为什么不直接加载到成二倍的尺寸呢,原因很简单因为我们在界面布局中逻辑坐标系中的(单位是point),而实际的绘制都是在设备坐标系(单位是pixel)进行的,系统会自动帮我们完成从point到pixel...二、UIImage的几种初始化方法的对比 1、imageNamed:方法 imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些。它的加载流程如下: a....我们在日常使用中经常会碰到把iPhone相册中的照片导入到windows中,发现方向不对的问题就是与这个属性有关,因为导出照片的时候,写exif中的方向信息时候没有考虑该方向的原因。...四、UIImage的几个draw方法 UIImage的几个draw方法是用来绘制图像的利器,为什么这样说呢?...由于图像是绘制在当前context中的,它同时还会考虑到当前context的transform的变化。利于这两点我们就可以玩转图像的旋转和翻转了。
*newData = [[NSData alloc] initWithBytes:bytes length:128]; NSLog(@"newData=%@",newData); NSData 与 UIImage...NSData->UIImage UIImage *aimage = [UIImage imageWithData: imageData]; //例:从本地文件沙盒中取图片并转换为NSData NSString...stringByAppendingPathComponent:name]; NSData *imageData = [NSData dataWithContentsOfFile: finalPath]; UIImage...*aimage = [UIImage imageWithData: imageData]; UIImage-> NSData NSData *imageData = UIImagePNGRepresentation
UIImage 相应地增加了新的构造函数支持可变渲染。...lazy var variable: Double = 0 { didSet { // 新的构造函数,支持可变渲染 let image = UIImage...symbolConfig) imageView.image = image } } // 配置图标的渲染颜色 let symbolConfig = UIImage.SymbolConfiguration...in: .common) lazy var imageView: UIImageView = { let imageView = UIImageView(image: UIImage
UIImage 转 OpenCV cvMat: 1 - (cv::Mat)cvMatWithImage:(UIImage *)image 2 { 3 CGColorSpaceRef colorSpace...image.CGImage); 19 CGContextRelease(contextRef); 20 21 return cvMat; 22 } OpenCV cvMat 转 UIImage...: 24 - (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat { 25 NSData *data = [NSData dataWithBytes:cvMat.data...kCGRenderingIntentDefault //intent 55 ); 56 57 // Getting UIImage...from CGImage 58 UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; 59 CGImageRelease
2、像素点的拉伸 - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger...)topCapHeight; 这个函数我们可以用来拉伸类似QQ,微信的聊天气泡背景图,它的两个参数分别leftCapWidth和topCapHeight,这两个参数给定一个坐标,比如: UIImage... * img= [UIImage imageNamed:@"11.png"]; img = [img stretchableImageWithLeftCapWidth:1 topCapHeight...有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸: UIImage * img= [UIImage imageNamed:@"11.png"]; img...确实,能绘图画出来的最细的实心线确实是一像素,但在一个项目中,我们优秀的美工察觉到无论她把线做的多么细,无论我怎样控制拉伸方法,绘制出的登录框总是没有QQ的细,QQ的框线看起来更加干脆利索。
图片的处理大概分 截图(capture), 缩放(scale), 设定大小(resize), 存储(save) 1.等比率缩放 - (UIImage *)scaleImage:(UIImage *)...(分别存储到home目录文件和图片库文件。)...存储到目录文件是这样 NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent...:@"image.png"]; [UIImagePNGRepresentation(image) writeToFile:path atomically:YES]; 若要存储到图片库里面 UIImageWriteToSavedPhotosAlbum...(UImage封装了CGImage, 互相转换很容易) UIImage* imUI=nil; CGImageRef imCG=nil; imUI = [UIImage initWithCGImage:
image 我们的图片是从阿里云那里获取的网络图片,需要把网络图片转化为UIImage,下面就是方法: +(UIImage *) getImageFromURL:(NSString *)fileURL...{ UIImage * result; NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL...]]; result = [UIImage imageWithData:data]; return result; } ?...*)compressImage:(UIImage *)image toByte:(NSUInteger)maxLength { // Compress by quality CGFloat...*resultImage = [UIImage imageWithData:data]; if (data.length < maxLength) return resultImage;
只不过 PNG 图片是无损压缩,并且支持 alpha 通道,而 JPEG 图片则是有损压缩,可以指定 0-100% 的压缩比,因此,在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作...一种是: UIImage imageNamed:imageName 一种是: UIImage imageWithContentsOfFile:path 后面我再解释为什么需要对比这两种加载方式,...1>使用UIImage imageWithContentsOfFile:path image.png 2>使用UIImage imageNamed:imageName image.png 两种方式都实际滑动一分钟..., 可以清晰的看到,两种加载方式一开始都帧数很低,但是使用imageNamed: 的很快帧数就恢复到60帧,但是使用imageWithContentsOfFile:会一直卡顿,那是因为使用imageNamed...再来解释我们使用的两种加载方式,使用 imageWithContentsOfFile: 实际上是模拟网络下载图片到本地后,再从本地加载展示图片的过程,imageNamed:方式则是模拟从Assets.xcassets
源码: /** 普通的截图 该API仅可以在未使用layer和OpenGL渲染的视图上使用 @return 截取的图片 */ - (UIImage *)nomalSnapshotImage...UIGraphicsEndImageContext(); return snapshotImage; } 第二种情形截图 如果一些视图是用OpenGL渲染出来的,那么使用上面的方式就无法截图到OpenGL...渲染的部分,这时候就要用到改进后的截图方案: /** 针对有用过OpenGL渲染过的视图截图 @return 截取的图片 */ - (UIImage *)openglSnapshotImage...,我试过将返回的截图View写入位图再转换成UIImage,但是返回的UIImage 要么为空,要么没有内容。...CGPointMake(0, offsetY + boundsHeight)]; contentHeight -= boundsHeight; } // 8 webView 恢复到之前的显示区域
经历了 WWDC 2020 和 WWDC 2021 之后,SF Symbols 已经到 3.0 了。 那么我们应该如何使用它呢?...SFSafeSymbols A SF Symbol UIImage can now be initialized using the SFSymbol enum....This image is already unwrapped, so you get a UIImage instead of a UIImage?...: UIImage(systemSymbol: .cCircle) UIImage(systemSymbol: SFSymbol.eCircleFill) UIImage(systemSymbol: ....中的 enum 去初始化一个已经解包好的 image,返回的是 UIImage,而不是 UIImage?
18、写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程。 ...19、如果是在iOS上运行,SDImageCache 在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification以及...再看看sd_imageWithData:这个方法: + (UIImage*) sd_imageWithData: (NSData *)data { UIImage *image; NSString...所以,我们只需要在这边做处理即可: UIImage+MultiFormat添加一个方法: + (UIImage *) compressImageWith: (UIImage *)image...(ForceDecode) + (UIImage*) decodedImageWithImage: (UIImage*)image { if (image.images) { /
,且有7个地方会同时显示该图片 如果我们采用imageWithContentsOfFile:这种方式加载图片,那么在上面的场景下,就会占用5*7=35kb内存;而且会涉及到多次的IO操作,这是很耗性能的...可是如果是使用imageNamed:方式加载图片的话,由于全部取自字典缓存中的UIImage,这样无论有几处显示图片,都只会占用5*1=5kb内存;而且同一张图片资源最多只会涉及到一次IO操作。...NSData,当UIImage的引用计数变为0的时候自动销毁UIImage(这就是一次IO操作)。...而一个页面中各种大大小小的图标少则十几、二十个,多则上百个,也就是说,每打开一个页面就会涉及到几十上百次的图片IO操作,这会占用大量的CPU和内存资源,极有可能影响到用户界面流畅度,进而降低用户体验。...(3)增加开发时间 接着上面第(2)点,如果只是简单粗暴使用UIImage(contentsOfFile: "")这种方式来将图片加载出来,那么就会涉及到大量的IO操作,进而影响用户体验。
使用imageNamed这个方法生成的UIImage对象,会在应用的bundle中寻找图片,如果找到,则Cache到系统缓存中,作为内存的cache,而程序员是无法操作cache的,只能由系统自动处理,...由此看来[UIImage imageNamed:]只适合与UI界面中小的贴图的读取,而一些比较大的资源文件应该尽量避免使用这个接口[UIImage imageWithContentsOfFile]解决掉这个问题...for (int i = 0; i < 1000; i++) { UIImage* image = [UIImage imageNamed:@"some_image"]; // 对 image...而在每一次循环结束的时候,UIImage 引用都为0了,不过系统不会把它立即释放掉;循环次数多了内存就爆掉了。...为了解决这个问题,可以改成这样: for (int i = 0; i < 1000; i++) { @autoreleasepool { UIImage* image = [UIImage
https://blog.csdn.net/u010105969/article/details/50920716 之前写了一个小demo,功能是获取相册中的某张图片并将此图片写入到本地,然后再从本地将此图片取出显示出来...原代码: #pragma mark 保存图片到document - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName...,目的是为了进行上传 NSLog(@"fullPathToFile:%@", fullPathToFile); // 二进制的数据就可以进行上传 UIImage * image = [UIImage...imageWithContentsOfFile:fullPathToFile]; _image = image; } 修改后的代码: #pragma mark 保存图片到document -...,目的是为了进行上传 NSLog(@"fullPathToFile:%@", fullPathToFile); // 二进制的数据就可以进行上传 UIImage * image = [UIImage
, assign) NSTimeInterval duration; //初始化方法 + (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull...)image duration:(NSTimeInterval)duration; 3.UIImage的编码与解码 SDWebImageCoder中定义了一个协议,其中约定了方法来对图像数据进行解码与编码...开发者可以使用单例方法来获取默认的SDImageCache实例,也可以使用特殊的Name值来创建缓存实例,常用函数列举如下: //缓存图片到内存和磁盘 - (void)storeImage:(nullable...)completionBlock; //缓存图片到磁盘 - (void)storeImage:(nullable UIImage *)image forKey:(nullable...:(nullable NSString *)key; //获取内存和磁盘缓存数据 - (nullable UIImage *)imageFromCacheForKey:(nullable NSString
:imageName ofType:@"jpg"]; UIImage *image = [UIImage imageWithContentsOfFile:path]; cell.contentImageView.image...一种是: UIImage imageNamed:imageName 一种是: UIImage imageWithContentsOfFile:path 后面我再解释为什么需要对比这两种加载方式,...1>使用UIImage imageWithContentsOfFile:path image.png 2>使用UIImage imageNamed:imageName image.png 两种方式都实际滑动一分钟..., 可以清晰的看到,两种加载方式一开始都帧数很低,但是使用imageNamed: 的很快帧数就恢复到60帧,但是使用imageWithContentsOfFile:会一直卡顿,那是因为使用imageNamed...再来解释我们使用的两种加载方式,使用 imageWithContentsOfFile: 实际上是模拟网络下载图片到本地后,再从本地加载展示图片的过程,imageNamed:方式则是模拟从Assets.xcassets