UIImage图片处理,旋转、截取、平铺、缩放等操作
来源: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图片处理,旋转、截取、平铺、缩放等操作的更多相关文章
- 在xml中使用图片资源时,设置重复图片而不是拉伸平铺
直接把图片放入xml中时,默认会拉伸图片填充.而用下面的方法则可以实现重复图片 <?xml version="1.0" encoding="utf-8"? ...
- LODOP中设置设置图片平铺水印,超文本透明
之前的博文:LODOP中平铺图片 文本项Repeat. 该博文中是平铺的图片,上面是文本.如果是图片add_print_image和add_print_text纯文本,这两个打印项设计的,可以直接通过 ...
- ios 缩放图片(平铺)
//缩放图片(平铺) - (UIImage *)resizeImage:(NSString *)imgName { UIImage *bgImage = [UIImage imageNamed:im ...
- android实现图片平铺效果&WebView多点触控实现缩放
1.图片平铺效果实现非常简单,只要在xml中添加一个 android:tileMode的属性就可以了.首先在drawable文件夹中添加自己的my.xml文件.代码: Java代码 <?xml ...
- [ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]
场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateC ...
- iOS UIButton 设置图片平铺
UIImage *image2 = [UIImage imageNamed:imgName]; CGFloat top = ; // 顶端盖高度 CGFloat bottom = ; // 底端盖高度 ...
- Duilib技巧:背景图片平铺
贴图的描述 方式有两种 // 1.aaa.jpg // 2.file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0 ...
- 69、Android 布局中轻松实现图片的全屏、居中、平铺
public void paint() { if (item.laying_mode != 1)//平铺或者充满 { new AsyncTask<Void, Void, Void>() { ...
- QPainter绘制图片填充方式(正常大小、剪切大小、自适应大小、平铺)
Qt中QPainter提供了绘制图像的API,极大地方便了我们对图像的绘制. Qt中提供了QPixmap, QBitmap,QBitMapQImage,QPicture等图像绘图设备,它们的类关系如下 ...
随机推荐
- hip-hop初探
啥都不说了,上两张图片先 1.使用hiphop的 2.不使用这玩意的 都是前端部署nginx,转发的后面php的 hhvm的配置文件 /etc/hhvm.hdf 目前结论:facebook的这玩意可能 ...
- 移动端rem布局
手机页面——分辨率特别乱: 1.定宽320px——优点:简单,缺点:不能适应 2.百分比——优点:能适应各种分辨率,缺点:太麻烦 3.rem——优点:方便.适应各种分辨率(首先定义一个“根大小”htm ...
- 第三百三十一天 how can I 坚持
今天加了一天班,好累,还没吃晚饭,回来只吃了个泡面. 晚上回来的路上,在群里聊的倒是很happy,快笑死我了,仲宫二少,哈哈. 弟弟过两天要去见面,多聊聊,该结婚来. 还有,中午吃的肯德基,不好吃,可 ...
- Codeforces Round #367 (Div. 2) C. Hard problem(DP)
Hard problem 题目链接: http://codeforces.com/contest/706/problem/C Description Vasiliy is fond of solvin ...
- 开发资源列表【Worldsing分享】
ucGUI(emWin)类: ucGui 汉字库生成(汉字库提取工具):ucGuiFont点击下载 ucGui v3.98 VC模拟工程源代码(VS2008):ucGUI3.98 VS2008 点 ...
- HDU1001
求和 #include<stdio.h> int main() { long n; while(scanf("%ld",&n)!=EOF){ long i; ; ...
- StructLayout特性
StructLayout特性 公共语言运行库利用 StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列.如果要将类传递 ...
- php 将字符串中的连续多个空格转换为一个空格
转载自:http://www.phpernote.com/php-function/633.html /** * 多个连续空格只保留一个 * * @param string $string 待转换的字 ...
- PHP发送邮件。
第三方类库: ①.email.class.php. ②.phpmailer:https://github.com/PHPMailer/PHPMailer. PHPMailer发送邮件”SMTP 错误: ...
- 转载:div和flash层级关系问题
转自:http://sin581.blog.163.com/blog/static/860578932012813112334404/ 问题: ie下默认好像div层级没有flash层级高,也 ...