来源:iOS_小松哥

链接:http://www.jianshu.com/p/9ab1205f5166

有时候我们需要处理图片,比如改变大小,旋转,截取等等,所以今天说一说图片处理相关的一些操作。

本文所说的方法都是写在UIImage的Category中,这样使用起来也方便;由于代码太多,这里就不贴具体实现代码了,大家可以去我的Github查看demo(https://github.com/lisongrc/UIImage-Categories),效果如下:

颜色相关

1.根据颜色生成纯色图片

就是根据制定的颜色生成一张纯色的图片

+ (UIImage *)imageWithColor:(UIColor *)color;

使用方法,比如设置UIImageView的图片为红色纯图片:

self.imageView.image = [UIImage imageWithColor:[UIColor redColor]];

2.取图片上某一像素的颜色

有时候我们需要获取图片上的某一点的颜色,比如画板应用选择画笔颜色的时候,其实是在一张有所有颜色的图片上点击选择实现的。

需要注意的是这里要传的参数point是相对于图片上的点。

- (UIColor *)colorAtPixel:(CGPoint)point;

使用方法,比如我们在图片上加个tap手势,然后在响应方法里面这样写就可以了:

- (void)handleTap:(UITapGestureRecognizer *)tap

{

CGPoint point = [tap locationInView:tap.view];

UIImage *image = self.imageView.image;

CGPoint pointInImage = CGPointMake(point.x * image.size.width / self.imageView.frame.size.width, point.y * image.size.height / self.imageView.frame.size.height);

self.view.backgroundColor = [image colorAtPixel:pointInImage];

}

3.获得灰度图

获取一张彩色图片的黑白图片

- (UIImage *)convertToGrayImage;

使用方法:

self.imageView.image = [image convertToGrayImage];

旋转相关

1.纠正图片的方向

当我们需要读取相册的图片,发现相册里面的方向和展示出来的图片的方向不一样,这时候就要矫正方向了。

- (UIImage *)fixOrientation;

使用:

self.imageView.image = [image fixOrientation];

2.按给定的方向旋转图片

在做图片处理工具的时候,我们可能需要旋转图片。

这个方法的参数是系统枚举UIImageOrientation。

typedef NS_ENUM(NSInteger, UIImageOrientation) {

UIImageOrientationUp,            // default orientation

UIImageOrientationDown,          // 180 deg rotation

UIImageOrientationLeft,          // 90 deg CCW

UIImageOrientationRight,         // 90 deg CW

UIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip

UIImageOrientationDownMirrored,  // horizontal flip

UIImageOrientationLeftMirrored,  // vertical flip

UIImageOrientationRightMirrored, // vertical flip

};

- (UIImage*)rotate:(UIImageOrientation)orient;

使用,比如顺时针旋转180度:

self.imageView.image = [image rotate:UIImageOrientationDown];

3.垂直翻转

其实就是上面的方法传UIImageOrientationDownMirrored参数。

- (UIImage *)flipVertical;

4.水平翻转

其实就是传UIImageOrientationUpMirrored参数。

- (UIImage *)flipHorizontal;

5.将图片旋转degrees角度

传入一个自定义的角度。

- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees;

6.将图片旋转radians弧度

- (UIImage *)imageRotatedByRadians:(CGFloat)radians;

生成图相关

1.截取image对象rect区域内的图像

- (UIImage *)subImageWithRect:(CGRect)rect;

2.压缩图片至指定尺寸

- (UIImage *)rescaleImageToSize:(CGSize)size;

3.压缩图片至指定像素

- (UIImage *)rescaleImageToPX:(CGFloat )toPX;

4.生成一个size大小的平铺图片

- (UIImage *)getTiledImageWithSize:(CGSize)size;

5..UIView转化为UIImage

+ (UIImage *)imageFromView:(UIView *)view;

6.将两个图片生成一张图片

firstImage在下面,secondImage在上面

+ (UIImage*)mergeImage:(UIImage*)firstImage withImage:(UIImage*)secondImage;

Gif相关

将一个Gif直接设置为UIImageView的image就可以显示动态图了。

/** 用一个Gif生成UIImage,传入一个GIFData */

+ (UIImage *)animatedImageWithAnimatedGIFData:(NSData *)theData;

/** 用一个Gif生成UIImage,传入一个GIF路径 */

+ (UIImage *)animatedImageWithAnimatedGIFURL:(NSURL *)theURL;

使用:

NSString *path = [[NSBundle mainBundle] pathForResource:@"gif" ofType:@"gif"];

self.imageView.image = [UIImage animatedImageWithAnimatedGIFURL:[NSURL fileURLWithPath:path]];

//或者

self.imageView.image = [UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfFile:path]];

希望能帮到大家,持续更新中。

UIImage图片处理,旋转、截取、平铺、缩放等操作的更多相关文章

  1. 在xml中使用图片资源时,设置重复图片而不是拉伸平铺

    直接把图片放入xml中时,默认会拉伸图片填充.而用下面的方法则可以实现重复图片 <?xml version="1.0" encoding="utf-8"? ...

  2. LODOP中设置设置图片平铺水印,超文本透明

    之前的博文:LODOP中平铺图片 文本项Repeat. 该博文中是平铺的图片,上面是文本.如果是图片add_print_image和add_print_text纯文本,这两个打印项设计的,可以直接通过 ...

  3. ios 缩放图片(平铺)

    //缩放图片(平铺) - (UIImage *)resizeImage:(NSString *)imgName { UIImage *bgImage =  [UIImage imageNamed:im ...

  4. android实现图片平铺效果&WebView多点触控实现缩放

    1.图片平铺效果实现非常简单,只要在xml中添加一个 android:tileMode的属性就可以了.首先在drawable文件夹中添加自己的my.xml文件.代码: Java代码 <?xml ...

  5. [ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]

    场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateC ...

  6. iOS UIButton 设置图片平铺

    UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...

  7. Duilib技巧:背景图片平铺

    贴图的描述 方式有两种    // 1.aaa.jpg    // 2.file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0 ...

  8. 69、Android 布局中轻松实现图片的全屏、居中、平铺

    public void paint() { if (item.laying_mode != 1)//平铺或者充满 { new AsyncTask<Void, Void, Void>() { ...

  9. QPainter绘制图片填充方式(正常大小、剪切大小、自适应大小、平铺)

    Qt中QPainter提供了绘制图像的API,极大地方便了我们对图像的绘制. Qt中提供了QPixmap, QBitmap,QBitMapQImage,QPicture等图像绘图设备,它们的类关系如下 ...

随机推荐

  1. 轻松学习Linux之认识内存管理机制

    本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  2. jquery获取显示器,屏幕的宽度,和高度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  3. java反射工具类

    package com.yingchao.kgou.core; import java.lang.reflect.Field; import java.lang.reflect.InvocationT ...

  4. JQuery与GridView控件结合示例

    JQuery是一种非常强大的客户端JS编程技术,这里不想过多阐述它的相关背景知识,只想简单演示一下如何与asp.net的控件结合开发. 比如,我们要做一个下面如图所示的功能,效果是状态.编号.数字1. ...

  5. UVa 1617 Laptop (贪心)

    题意:有n个长度为1的线段,确定它们的起点,使得第i个线段在[ri,di]之间,输出空隙数目的最小值. 析:很明显的贪心题,贪心策略是这样的,先把所有的区间排序,原则是按右端点进行排序,如果相等再按左 ...

  6. UVa 10316 - Airline Hub

    题目:给出地球上的n个机场的经度和纬度,想在这里面确定一个HUB使得他到其他机场的最大距离最小. 分析:计算几何.大地坐标系.因为数据不大直接枚举即可,比较时利用圆心角可以提高计算效率,并控制精度. ...

  7. 可以binidng属性的属性【项目】

    1:binding后台bool[]数据以及后台ObservableCollection数据 分别见下面xaml的Visibility和Text的Binding public bool[] Rubber ...

  8. 关于JAVA多线程的那些事__初心者

    前言 其实事情的经过也许会复杂了点,这事还得从两个月前开始说.那天,我果断不干IT支援.那天,我立志要做一个真正的程序猿.那天,我26岁11个月.那天,我开始看Android.那天,我一边叨念着有朋自 ...

  9. 函数WideCharToMultiByte() 详解

    函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, ...

  10. JS瀑布流布局模式(1)

    在实际的项目中,偶尔会用到一种布局——瀑布流布局.瀑布流布局的特点是,在多列布局时,可以保证内容区块在水平方向上不产生大的空隙,类似瀑布的效果.简单的说,在垂直列表里,内容区块是一个挨着一个的.当内容 ...