iOS开发之如何截图and如何合并多张图片等...

   1、UIView截图

  -(UIImage*)captureView:(UIView *)theView{

  CGRect rect = theView.frame;

  if ([theView isKindOfClass:[UIScrollView class]]) {

  rect.size = ((UIScrollView *)theView).contentSize;

  }

  UIGraphicsBeginImageContext(rect.size);

  CGContextRef context = UIGraphicsGetCurrentContext();

  [theView.layer renderInContext:context];

  UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return img;

  }

  2、UIScrollview截图

  - (UIImage *)captureScrollView:(UIScrollView *)scrollView{

  UIImage* image = nil;

  UIGraphicsBeginImageContext(scrollView.contentSize);

  {

  CGPoint savedContentOffset = scrollView.contentOffset;

  CGRect savedFrame = scrollView.frame;

  scrollView.contentOffset = CGPointZero;

  scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);

  [scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];

  image = UIGraphicsGetImageFromCurrentImageContext();

  scrollView.contentOffset = savedContentOffset;

  scrollView.frame = savedFrame;

  }

  UIGraphicsEndImageContext();

  if (image != nil) {

  return image;

  }

  return nil;

  }

  3、合并多张图片

  - (UIImage *)composeWithHeader:(UIImage *)header content:(UIImage *)content footer:(UIImage *)footer{

  CGSize size = CGSizeMake(content.size.width, header.size.height +content.size.height +footer.size.height);

  UIGraphicsBeginImageContext(size);

  [header drawInRect:CGRectMake(0,

  0,

  header.size.width,

  header.size.height)];

  [content drawInRect:CGRectMake(0,

  header.size.height,

  content.size.width,

  content.size.height)];

  [footer drawInRect:CGRectMake(0,

  header.size.height+content.size.height,

  footer.size.width,

  footer.size.height)];

  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return image;

  }

  4、流媒体

  将音频、图片转成base64Binary

  +(NSData *)base64Encoded:(NSData *)data

  {

  //base64binary(流媒体)

  static char encodingTable[64] = {

  'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',

  'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',

  'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',

  'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' };

  const unsigned char *bytes = [data bytes];

  NSMutableString *result = [NSMutableString stringWithCapacity:[data length]];

  unsigned long ixtext = 0;

  unsigned long lentext = [data length];

  long ctremaining = 0;

  unsigned char inbuf[3], outbuf[4];

  unsigned short i = 0;

  unsigned short charsonline = 0, ctcopy = 0;

  unsigned long ix = 0;

  while( YES )

  {

  ctremaining = lentext - ixtext;

  if( ctremaining <= 0 ) break;

  for( i = 0; i < 3; i++ ) {

  ix = ixtext + i;

  if( ix < lentext ) inbuf[i] = bytes[ix];

  else inbuf [i] = 0;

  }

  outbuf [0] = (inbuf [0] & 0xFC) >> 2;

  outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);

  outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);

  outbuf [3] = inbuf [2] & 0x3F;

  ctcopy = 4;

  switch( ctremaining )

  {

  case 1:

  ctcopy = 2;

  break;

  case 2:

  ctcopy = 3;

  break;

  }

  for( i = 0; i < ctcopy; i++ )

  [result appendFormat:@"%c", encodingTable[outbuf[i]]];

  for( i = ctcopy; i < 4; i++ )

  [result appendString:@"="];

  ixtext += 3;

  charsonline += 4;

  }

  return [result dataUsingEncoding:NSUTF8StringEncoding];

  }

  这里调用上面的方法

  +(NSString *)loadingFile:(NSURL *)filepath

  {

  NSData * data = [[NSData alloc]initWithContentsOfURL:filepath];

  NSData * base64Data = [self base64Encoded:data];

  NSString * strBase64 = [[NSString alloc]initWithData:base64Data encoding:NSASCIIStringEncoding];

  return strBase64;

  //you can upload this base64Data to server now

  }

时间: 2024-08-07 13:01:48

iOS开发之如何截图and如何合并多张图片等...的相关文章

IOS开发之视图和视图控制器

        视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一个UIWindow来容纳我们的View.应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类.UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示.窗口是用来显示视图的,下面我们将会结

iOS开发之山寨版新浪微博小结

在之前的博客IOS开发之新浪围脖中获取微博的内容是使用我自己的access_token来请求的数据,那么如何让其他用户也能登陆并获取自己的微博内容呢?接下来就是OAuth和SSO出场的时候啦.OAuth的全称为Open Authorization 开发授权,SSO--单点登陆(Single Sign On).至于其原理是什么,更具体的介绍网上的资料是一抓一大把,在这就不做过多的原理性的概述.当然啦,OAuth和SSO在Web和其他手机终端上应用还是蛮多的,所有这方面的资料也是多的很. 简单的说就

iOS开发:Git流程

 开发:Git流程-"> iOS开发中的Git流程 Git的优点相信已不用我赘述,不是SVN之流能够相提并论的. 以前多人开发的时候我还用过拖文件大发和别人合作的.- -! 我在这里不多说一些基本命令,只教最实用的,多人开发到底怎么用Git. 场景 三人合作开发一个app,老大叫小明,老二叫小强,老三叫小伟. 这时候老大去github开一个repository, 当然,公司项目一般是private repo. 创建好之后呢.老大在这个repo分别开四个分支. 名字叫 xiaoming_gi

iOS开发系列--IOS程序开发概览

概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌握前面的内容,开发过程中多思考,彻底理解程序运行的原理.机制.好了言归正传,不管怎么样正式进入IOS开发还是令人兴奋的,今天的内容虽然说是开发预览,其实

iOS开发之浅谈MVVM的架构设计与团队协作

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说道架构设计和团队

iOS开发系列--无限循环的图片浏览器

概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前很有必要说一下UIView的内容.在上一篇

iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流

上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看<iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调>.UICollectionView之所以强大,是因为其具有自定义功能,这一自定义就不得了啦,自由度非常大,定制的高,所以功能也是灰常强大的.本篇博客就不使用自带的流式布局了,我们要自定义一个瀑布流.自定义的瀑布流可以配置其参数: 每个Cell的边距

iOS开发之使用XMPPFramework实现即时通信(二)

上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测试,当然也少不了Openfire服务器,在这就不详述Openfire的安装过程了(网上的教程还是蛮多的),Openfire的安装仅需要一个数据库的支持,本篇是用的MySql数据库.当然这不是本篇的重点. 废话少说,切入今天的正题.今天要给之前的微信加入登陆,获取好友列表,聊天(发送文字,表情,图片,

iOS开发之使用XMPPFramework实现即时通信(三)

你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q或者评论留言提出一些问题,比如:"楼主,在哪注册?","楼主,你的登录用户名和密码是多少?"之类的问题.在之前的博客中使用的账号和密码,为了方便,是用spark客户端注册的,在今天的博客中将会详细的介绍如何使用代码注册我们新用户,还有在这感谢关注我的小伙伴们,谢谢你们的