之前写过一篇有关更换图片背景色的文章,今天遇到一块儿了,就干脆重新整理一下了。iOS开发中常用的对图片的处理操作:


一.更换图片的背景颜色

/**
*   改变图片背景为白色
*
*  @param image 图片源
*
*  @return 返回更改过背景后的图片
*/
+ (UIImage*) imageToTransparent:(UIImage*) image
{// 分配内存const int imageWidth = image.size.width;const int imageHeight = image.size.height;size_t bytesPerRow = imageWidth * 4;uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);// 创建contextCGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);// 遍历像素int pixelNum = imageWidth * imageHeight;uint32_t* pCurPtr = rgbImageBuf;for (int i = 0; i < pixelNum; i++, pCurPtr++){if ((*pCurPtr & 0xFFFFFF00) == 0xffffff00) {// 此处把白色背景颜色给变为透明uint8_t* ptr = (uint8_t*)pCurPtr;ptr[0] = 0;}else{// 改成下面的代码,会将图片转成想要的颜色uint8_t* ptr = (uint8_t*)pCurPtr;ptr[3] = 0; //0~255ptr[2] = 0;ptr[1] = 0;}}// 将内存转成imageCGDataProviderRef dataProvider =CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData);CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight,8, 32, bytesPerRow, colorSpace,kCGImageAlphaLast |kCGBitmapByteOrder32Little, dataProvider,NULL, true,kCGRenderingIntentDefault);CGDataProviderRelease(dataProvider);UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];// 释放CGImageRelease(imageRef);CGContextRelease(context);CGColorSpaceRelease(colorSpace);return resultUIImage;
}void ProviderReleaseData (void *info, const void *data, size_t size)
{free((void*)data);
}

二.改变图片的透明度

/***  改变图片的透明度**  @param alpha 透明度*  @param image 图片源**  @return 返回透明度变化后的图片*/
+ (UIImage *)changeAlphaOfImageWith:(CGFloat)alpha withImage:(UIImage*)image
{UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0f);CGContextRef ctx = UIGraphicsGetCurrentContext();CGRect area = CGRectMake(0, 0, image.size.width, image.size.height);CGContextScaleCTM(ctx, 1, -1);CGContextTranslateCTM(ctx, 0, -area.size.height);CGContextSetBlendMode(ctx, kCGBlendModeMultiply);CGContextSetAlpha(ctx, alpha);CGContextDrawImage(ctx, area, image.CGImage);UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;
}

三.图片的合成

/***  图片合成**  @param image1 源图片*  @param image2 目标图片**  @return 返回合成后的图片*/
+ (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2 {UIGraphicsBeginImageContext(image2.size);// Draw image1[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];// Draw image2[image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return resultingImage;
}

四.压缩图片到指定大小

/***  压缩图片到指定大小**  @param img  图片源*  @param size 指定的大小**  @return 返回压缩后的图片*/+ (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{// 创建一个bitmap的context// 并把它设置成为当前正在使用的contextUIGraphicsBeginImageContext(size);// 绘制改变大小的图片[img drawInRect:CGRectMake(0, 0, size.width, size.height)];// 从当前context中创建一个改变大小后的图片UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();// 使当前的context出堆栈UIGraphicsEndImageContext();// 返回新的改变大小后的图片return scaledImage;
}

iOS开发中图片的一些处理操作(背景色,透明度,合成,大小)相关推荐

  1. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  2. iOS开发中拉伸图片的几种方式

    在iOS开发中,经常会遇到控件尺寸和图片大小不匹配的情况. 一些情况下, 我们需要对图片进行拉伸, 以满足美观需求. 总的来说, 图片的拉伸方式可以分为两种, 一种是通过Xcode自带的Show Sl ...

  3. iOS开发中,通过URL地址获取网络上的图片

    在iOS开发中,我们有时会通过图片的URL地址来获取网上的图片,下面是一个方法实现: /** 通过URL地址从网上获取图片 */ -(UIImage *) getImageFromURL:(NSStr ...

  4. iOS开发UI篇—iOS开发中三种简单的动画设置

    [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要"参与到"动画中 [UIView beginAnimations: ...

  5. iOS开发中经常用的实用代码合集

    iOS开发中经常用的实用代码合集 本文整理了,在iOS开发中我们所遇到一些开发问题的技巧类的代码,让你在开发过程中避免了很多弯路,希望能给你的开发带来帮助和启发. 1.判断邮箱格式是否正确的代码: / ...

  6. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  7. iOS开发中的Web应用概述

    为了更好的阅读体验,建议阅读原文 插播广告 -- 几十行代码完成资讯类App多种形式内容页 HybridPageKit :一个针对资讯类App高性能.易扩展.组件化的通用内容页实现框架. 想和我一起全 ...

  8. iOS开发中一些有用的小代码

    1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @&quo ...

  9. iOS开发中的神兵利器 [实战系列]-李发展-专题视频课程

    iOS开发中的神兵利器 [实战系列]-11758人已学习 课程介绍         - 140节课程讲解GitHub中近百个过千star的iOS热门开源项目 - 市面上唯一大规模讲解热门的iOS开源项 ...

最新文章

  1. 通信中dBFS、dBm、dBV、dBW、0dB、-3dB的定义
  2. 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿
  3. 7.MongoDB java CRUD
  4. xxl-job源码分析
  5. docker Harbor2.3.4 http 搭建镜像仓库
  6. 计算机没有设置无线临时网络,如何创建临时无线网络
  7. 移动硬盘提示由于IO设备错误,无法运行此项请求要怎么办啊
  8. Linux系统提高编辑效率的vim工具重要知识
  9. php ctype xdigit,PHP ctype_xdigit()用法及代码示例
  10. IEEEtran模板使用Bibtex插入DOI不显示问题
  11. 【Endnote X9服务器运行失败】
  12. 批流融合系统-SparkV2/Beam
  13. rendered使用效果
  14. 南阳OJ题目33---蛇形填数
  15. 基于vue-grid-layout的自定义布局桌面
  16. 配置jdbc遇到的问题
  17. 服务器系统如何截图,电脑截图的快捷键是什么,小编告诉你电脑怎么截图
  18. 使用matlab画信号的频域图
  19. html保留数据库文本格式,以html格式显示数据库中的格式化文本(FLASK应用程序)...
  20. 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)

热门文章

  1. 金三银四已消失?如何快速斩获春招offer
  2. __attribute__ 用法
  3. 计算机三级 信息安全技术 题库 前言
  4. [数值计算-14]:拉格朗日插值与Python代码实现
  5. Rabbitmq--vhost may be inaccessible虚主机无法访问问题
  6. 基于Python的Solidworks二次开发方法
  7. matlab抽样定理的仿真,基于MATLAB的抽样定理仿真研究
  8. LeetCode 题集:排序
  9. 工厂模式与代理工厂模式
  10. 自学UI设计和培训学UI设计的区别?