- 浏览: 905987 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
原文:http://blog.csdn.net/xuhuan_wh/article/details/6434055
图片的处理大概分 截图(capture), 缩放(scale), 设定大小(resize), 存储(save)
1.等比率缩放
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{
UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize);
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
2.自定长宽
- (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize
{
UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));
[image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return reSizeImage;
}
3.处理某个特定View
只要是继承UIView的object 都可以处理
必须先import QuzrtzCore.framework
-(UIImage*)captureView:(UIView *)theView
{
CGRect rect = theView.frame;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[theView.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
4.储存图片
储存图片这里分成储存到app的文件里和储存到手机的图片库里
1) 储存到app的文件里
NSString *path = [[NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]stringByAppendingPathComponent:@"image.png"];
[UIImagePNGRepresentation(image) writeToFile:pathatomically:YES];
把要处理的图片, 以image.png名称存到app home下的Documents目录里
2)储存到手机的图片库里(必须在真机使用,模拟器无法使用)
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
UIGetScreenImage(); // 原来是private(私有)api, 用来截取整个画面,不过SDK 4.0后apple就开放了
//====================================================================================
以下代码用到了Quartz Framework 和 Core Graphics Framework. 在workspace的framework目录里添加这两个framework.在UIKit里,图像类UIImage和CGImageRef的画图操作都是通过Graphics Context来完成。Graphics Context封装了变换的参数,使得在不同的坐标系里操作图像非常方便。缺点就是,获取图像的数据不是那么方便。下面会给出获取数据区的代码。
1. 从UIView中获取图像相当于窗口截屏。
(ios提供全局的全屏截屏函数UIGetScreenView(). 如果需要特定区域的图像,可以crop一下)
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
2. 对于特定UIView的截屏。
(可以把当前View的layer,输出到一个ImageContext中,然后利用这个ImageContext得到UIImage)
-(UIImage*)captureView: (UIView *)theView
{
CGRect rect = theView.frame;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context =UIGraphicsGetCurrentContext();
[theView.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
3. 如果需要裁剪指定区域。
(可以path & clip,以下例子是建一个200x200的图像上下文,再截取出左上角)
UIGraphicsBeginImageContext(CGMakeSize(200,200));
CGContextRefcontext=UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
// ...把图写到context中,省略[indent]CGContextBeginPath();
CGContextAddRect(CGMakeRect(0,0,100,100));
CGContextClosePath();[/indent]CGContextDrawPath();
CGContextFlush(); // 强制执行上面定义的操作
UIImage* image = UIGraphicGetImageFromCurrentImageContext();
UIGraphicsPopContext();
4. 存储图像。
(分别存储到home目录文件和图片库文件。)
存储到目录文件是这样
NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"image.png"];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
若要存储到图片库里面
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
5. 互相转换UImage和CGImage。
(UImage封装了CGImage, 互相转换很容易)
UIImage* imUI=nil;
CGImageRef imCG=nil;
imUI = [UIImage initWithCGImage:imCG];
imCG = imUI.CGImage;
6. 从CGImage上获取图像数据区。
(在apple dev上有QA, 不过好像还不支持ios)
下面给出一个在ios上反色的例子
-(id)invertContrast:(UIImage*)img
{
CGImageRef inImage = img.CGImage;
CGContextRef ctx;
CFDataRef m_DataRef;
m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
int width = CGImageGetWidth( inImage );
int height = CGImageGetHeight( inImage );
int bpc = CGImageGetBitsPerComponent(inImage);
int bpp = CGImageGetBitsPerPixel(inImage);
int bpl = CGImageGetBytesPerRow(inImage);
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);
int length = CFDataGetLength(m_DataRef);
NSLog(@"len %d", length);
NSLog(@"width=%d, height=%d", width, height);
NSLog(@"1=%d, 2=%d, 3=%d", bpc, bpp,bpl);
for (int index = 0; index < length; index += 4)
{
m_PixelBuf[index + 0] = 255 - m_PixelBuf[index + 0];// b
m_PixelBuf[index + 1] = 255 - m_PixelBuf[index + 1];// g
m_PixelBuf[index + 2] = 255 - m_PixelBuf[index + 2];// r
}
ctx = CGBitmapContextCreate(m_PixelBuf, width, height, bpb, bpl, CGImageGetColorSpace( inImage ), kCGImageAlphaPremultipliedFirst );
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
return rawImage;
}
7. 显示图像数据区。
(显示图像数据区,也就是unsigned char*转为graphics context或者UIImage或和CGImageRef)
CGContextRef ctx = CGBitmapContextCreate(pixelBuf,width,height, bitsPerComponent,bypesPerLine, colorSpace,kCGImageAlphaPremultipliedLast );
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage* image = [UIImage imageWithCGImage:imageRef];
NSString* path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"ss.png"];
[UIImagePNGRepresentation(self.image) writeToFile:path atomically:YES];
CGContextRelease(ctx);
得到图像数据区后就可以很方便的实现图像处理的算法。
完,欢迎指正!
图片的处理大概分 截图(capture), 缩放(scale), 设定大小(resize), 存储(save)
1.等比率缩放
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{
UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize);
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
2.自定长宽
- (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize
{
UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));
[image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return reSizeImage;
}
3.处理某个特定View
只要是继承UIView的object 都可以处理
必须先import QuzrtzCore.framework
-(UIImage*)captureView:(UIView *)theView
{
CGRect rect = theView.frame;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[theView.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
4.储存图片
储存图片这里分成储存到app的文件里和储存到手机的图片库里
1) 储存到app的文件里
NSString *path = [[NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]stringByAppendingPathComponent:@"image.png"];
[UIImagePNGRepresentation(image) writeToFile:pathatomically:YES];
把要处理的图片, 以image.png名称存到app home下的Documents目录里
2)储存到手机的图片库里(必须在真机使用,模拟器无法使用)
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
UIGetScreenImage(); // 原来是private(私有)api, 用来截取整个画面,不过SDK 4.0后apple就开放了
//====================================================================================
以下代码用到了Quartz Framework 和 Core Graphics Framework. 在workspace的framework目录里添加这两个framework.在UIKit里,图像类UIImage和CGImageRef的画图操作都是通过Graphics Context来完成。Graphics Context封装了变换的参数,使得在不同的坐标系里操作图像非常方便。缺点就是,获取图像的数据不是那么方便。下面会给出获取数据区的代码。
1. 从UIView中获取图像相当于窗口截屏。
(ios提供全局的全屏截屏函数UIGetScreenView(). 如果需要特定区域的图像,可以crop一下)
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
2. 对于特定UIView的截屏。
(可以把当前View的layer,输出到一个ImageContext中,然后利用这个ImageContext得到UIImage)
-(UIImage*)captureView: (UIView *)theView
{
CGRect rect = theView.frame;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context =UIGraphicsGetCurrentContext();
[theView.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
3. 如果需要裁剪指定区域。
(可以path & clip,以下例子是建一个200x200的图像上下文,再截取出左上角)
UIGraphicsBeginImageContext(CGMakeSize(200,200));
CGContextRefcontext=UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
// ...把图写到context中,省略[indent]CGContextBeginPath();
CGContextAddRect(CGMakeRect(0,0,100,100));
CGContextClosePath();[/indent]CGContextDrawPath();
CGContextFlush(); // 强制执行上面定义的操作
UIImage* image = UIGraphicGetImageFromCurrentImageContext();
UIGraphicsPopContext();
4. 存储图像。
(分别存储到home目录文件和图片库文件。)
存储到目录文件是这样
NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"image.png"];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
若要存储到图片库里面
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
5. 互相转换UImage和CGImage。
(UImage封装了CGImage, 互相转换很容易)
UIImage* imUI=nil;
CGImageRef imCG=nil;
imUI = [UIImage initWithCGImage:imCG];
imCG = imUI.CGImage;
6. 从CGImage上获取图像数据区。
(在apple dev上有QA, 不过好像还不支持ios)
下面给出一个在ios上反色的例子
-(id)invertContrast:(UIImage*)img
{
CGImageRef inImage = img.CGImage;
CGContextRef ctx;
CFDataRef m_DataRef;
m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
int width = CGImageGetWidth( inImage );
int height = CGImageGetHeight( inImage );
int bpc = CGImageGetBitsPerComponent(inImage);
int bpp = CGImageGetBitsPerPixel(inImage);
int bpl = CGImageGetBytesPerRow(inImage);
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);
int length = CFDataGetLength(m_DataRef);
NSLog(@"len %d", length);
NSLog(@"width=%d, height=%d", width, height);
NSLog(@"1=%d, 2=%d, 3=%d", bpc, bpp,bpl);
for (int index = 0; index < length; index += 4)
{
m_PixelBuf[index + 0] = 255 - m_PixelBuf[index + 0];// b
m_PixelBuf[index + 1] = 255 - m_PixelBuf[index + 1];// g
m_PixelBuf[index + 2] = 255 - m_PixelBuf[index + 2];// r
}
ctx = CGBitmapContextCreate(m_PixelBuf, width, height, bpb, bpl, CGImageGetColorSpace( inImage ), kCGImageAlphaPremultipliedFirst );
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
return rawImage;
}
7. 显示图像数据区。
(显示图像数据区,也就是unsigned char*转为graphics context或者UIImage或和CGImageRef)
CGContextRef ctx = CGBitmapContextCreate(pixelBuf,width,height, bitsPerComponent,bypesPerLine, colorSpace,kCGImageAlphaPremultipliedLast );
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage* image = [UIImage imageWithCGImage:imageRef];
NSString* path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"ss.png"];
[UIImagePNGRepresentation(self.image) writeToFile:path atomically:YES];
CGContextRelease(ctx);
得到图像数据区后就可以很方便的实现图像处理的算法。
完,欢迎指正!
发表评论
-
UIImage变为NSData并进行压缩
2014-05-19 20:23 1936//sdk中提供了方法可以直接调用 UIImage *im ... -
update cocapods
2014-05-17 22:27 807早上更新cocoapod依赖库,发现更新到32.1版本,早先的 ... -
iOS发送短信息代码实例
2014-05-16 18:15 2689#import <MessageUI/Message ... -
DISPATCH TIMER
2014-05-14 16:12 732/* __block void (^callback) ... -
UITextField左边显示图片
2014-05-13 18:08 1175The overlay view displayed on t ... -
iOS调用系统打电话,发短信功能
2014-05-11 15:48 2088先介绍一种最简单的方法: 调用打电话功能 [[UIAppl ... -
iOS面试题
2014-05-09 16:10 10821.写一下UIButton与UITableView的层级结构 ... -
socket二进制报文
2014-05-09 15:18 1308里面有帧头 字符串UTF-8 中间用0隔开 又一个字符串 ... -
将网站添加到桌面的方法
2014-05-08 14:25 1664<link href="http://www. ... -
iPhone通讯录联系人操作大全
2014-05-07 10:29 14641.需要引入AddressBook.framework框架 2 ... -
sqlite获取最新插入的rowid
2014-05-07 09:59 1531除了 last_insert_rowid select max ... -
号码归属地查询,拨打电话
2014-05-06 15:07 854在程序内调用拨打电话的方法,[[UIApplication s ... -
iOS时间合并
2014-04-28 17:55 1100合并同一时间的课程,同一时间可能有多个课程,比如13:30-1 ... -
vCard通讯录格式说明
2014-04-28 16:47 2562原帖:http://freesoftman.iteye.com ... -
UISearchBar背景色全套解决方案
2014-04-25 09:36 7448os系统升级到7.1后,原来在7.0下显示正常的UISearc ... -
升级XCode5.1.1遇到的奇葩问题NSString,NSObjectRuntime.h报错,Foundation找不到
2014-04-24 11:19 903升级XCode5.1.1遇到的奇葩问题NSString,NSO ... -
将NSString转为NSArray
2014-04-22 16:52 6274// Your JSON data: NSString *c ... -
另外一种NSData转为NSString的方法
2014-04-22 15:40 1216If the data is not null-termina ... -
HTTP,Socket,WebSocket异同
2014-04-18 16:54 1835参考文章: http://abbshr.g ... -
push隐藏UINavigtaionBar和UITabbar
2014-04-17 15:20 1098[self.navigationController setN ...
相关推荐
UIImage 图片处理:截图、缩放、设定大小、存储 UI 图片处理是 iOS 开发中一个非常重要的topic,UIImage 是 iOS 中表示图像的类,它提供了多种方法来处理图像,在这里我们将介绍 UIImage 图片处理的四种方法:截图...
在iOS开发中,图像处理是不...以上是iPhone图像处理的一些基础操作,包括图片缩放、存储、加载、保存到相册以及在图片上绘制文字等。在实际开发中,开发者可能还需要考虑更多细节,如性能优化、内存管理、错误处理等。
10. **第三方库**: 如AlamofireImage、PINRemoteImage等,提供了丰富的功能,包括自动缓存、图片处理、占位符等,简化了图片加载流程。 这个源码示例很可能是展示如何结合上述技术来实现一个图片展示功能,可能包含...
4. **图片处理**:支持图片格式转换、缩放、裁剪等操作。 5. **进度回调**:提供下载进度回调,可以展示下载进度条或者更新进度指示器。 6. **取消加载**:可以随时取消正在进行的图片加载任务。 7. **错误处理**:...
然而,未经过处理的高清图片往往体积较大,如果直接上传至服务器,可能会消耗大量的网络带宽,增加服务器存储负担,甚至可能导致上传失败,特别是当服务器对上传文件大小有限制时。因此,在图片上传至服务器之前进行...
Android的BitmapOptions可以用来设定缩放比例,而iOS的UIImageJPEGRepresentation或UIImagePNGRepresentation可以将图片转换为二进制数据并调整质量进行压缩。 6. UI反馈:在用户进行操作时,提供适当的进度提示和...
- **图片处理**:可自定义图片加载后的处理逻辑,如缩放、裁剪等。 - **占位符**:在图片下载期间显示占位符图片。 - **错误处理**:提供错误回调,便于处理加载失败的情况。 - **URL重试策略**:支持在网络问题...
1. 图片数组:存储要显示的图片URL或UIImage对象。 2. 自动滚动间隔:设定每次自动切换的时间间隔。 3. 缓动效果:设置滚动动画的缓动效果,使滚动更平滑。 4. 指示器:可选地,添加一个UIPageControl来指示当前显示...
大尺寸图片处理可能导致内存问题,因此在实际应用中,通常需要先对图片进行按需缩放,减少处理的像素数量。此外,利用硬件加速和异步处理也是提高裁剪性能的有效手段。 6. **第三方库** 开发者也可以选择使用现成...
在这个过程中,涉及到的主要知识点包括Android或iOS平台的权限管理、图片选择器的实现、图片处理(如压缩)以及内存管理。 1. **权限管理**:在Android 6.0及以上版本,系统引入了运行时权限的概念,调用相册和相机...
4. **图片处理**: SDWebImage支持对下载的图片进行处理,如缩放、裁剪等,通过`transformDownloadedImage:imageWithUrl:`方法可以自定义处理逻辑,比如使用`UIImage+Resize`分类来调整图片尺寸。 5. **占位图与...
在初始化一个UIImageViewAnimator实例时,开发者可以传入一个UIImage数组和对应的duration参数,用于设定每张图片显示的时间。这样,UIImageViewAnimator就能根据这些参数自动创建一个连续播放的动画效果。此外,它...
在iOS开发中,图片处理是一项常见的任务,尤其在设计用户界面和实现图像编辑功能时。本案例"图片裁剪和布局案例"由作者sanzhong538提供,源码名为SZChoosePicture,旨在展示如何在iOS应用中实现图片裁剪、布局计算...
- `LMJAnimatedElement`初始化时需要传入一个`UIImage`对象,这是元素的图片。 - `belongToScreen`属性用于设置元素属于哪个屏幕,便于管理和动画过渡。 - `size`属性定义了元素的尺寸,例如 `(64, 64)`。 - `...