注意点:注意绘制的逻辑和顺序,切记,千万要注意创建的CF资源必须手动释放,否则,系统可能会认为你有可能将会继续使用该资源,而不会将它绘制到指定文件,特别是PDF上下文,之前我一直没有出来效果,就是因为没有释放!

如果发现绘制的结果是图片大小为0KB,格式损坏,如果主要逻辑对了的话,建议查看资源释放是否正确!

        NSString *newStr = [NSString stringWithFormat:@"/Users/Will/Desktop/Image/%@",imageName]; // imageName图片的名字,带尾缀名NSData *data = [NSData dataWithContentsOfFile:newStr];if (!data.length) {continue;} //如果图片出错,data的大小会为0,然后后面会有内存crashNSString *pdfName = [NSString stringWithFormat:@"/Users/Will/Desktop/Image1/%@",destImageName]; // i 你要保存的图片的名字UIImage *image = [UIImage imageWithData:data]; //还是要生成一张图片,为了获得图片的尺寸CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); //想要生成的PDF尺寸CFStringRef cfstring = CFStringCreateWithCString(NULL, pdfName.UTF8String, kCFStringEncodingUTF8);//为了下面的url做准备,生成路径的CFStringCFURLRef url = CFURLCreateWithFileSystemPath(NULL, cfstring, kCFURLPOSIXPathStyle, 0); //生成图片的路径URL,CF框架CFRelease(cfstring); //使用完了记得手动释放CFMutableDictionaryRef cdr = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); //生成PDF环境属性设置字典CFDictionarySetValue(cdr, kCGPDFContextTitle, CFSTR("Photo from iPrivate Album")); //PDF文档的题目,可选的CFDictionarySetValue(cdr, kCGPDFContextCreator, CFSTR("iPrivate Album"));//用来创建PDF文档的源数据的应用的名字CGContextRef ctx = CGPDFContextCreateWithURL(url, &rect, cdr); // 我们首先要创建PDF环境,这个时候系统会在目的文件夹生成一个0kb的PDFCFRelease(cdr); //使用完了记得手动释放CFRelease(url); //使用完了记得手动释放,注意释放顺序CFMutableDictionaryRef pageDic = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); //打开页面过程属性CFDataRef boxData = CFDataCreate(NULL, (const UInt8 *)&rect, sizeof(CGRect)); //创建一个图片容器CFDictionarySetValue(pageDic, kCGPDFContextMediaBox, boxData); // kCGPDFContextMediaBox 媒体容器,可选的,但是要生成PDF一定要设置一个CFDataRef给它CGPDFContextBeginPage(ctx, pageDic); //打开PDF页面// 开始绘制图片CFDataRef data1 = (__bridge CFDataRef)(data); //获取图片数据CGDataProviderRef cpr = CGDataProviderCreateWithCFData(data1);  //为下面的CIImage提供数据CGImageRef cir = CGImageCreateWithJPEGDataProvider(cpr, NULL, NO, kCGRenderingIntentDefault); //创建一个CIImageCGContextDrawImage(ctx, rect, cir); //在打开的PDF上绘图CFRelease(data1); //使用完后释放CGDataProviderRelease(cpr); //使用完后释放CGImageRelease(cir);//使用完后释放CGPDFContextEndPage(ctx);//绘制完成后记得关闭页面 CFRelease(ctx); //千万记得释放PDF环境CFRelease(pageDic);//使用完后释放CFRelease(boxData);//使用完后释放

本来我是为了从网上抓取图片,一时间懒得找抓图软件,所以自己写了个demo!

如果想要自己抓图,可以对网址进行请求,将获得的data转为字符串,针对其中的img标签进行截取,然后再截取里面的http协议字符串,这样就能获取图片的URL

之后就是普通的网络请求图片,这只是一种不成熟的思路,如果大家有好的思路,欢迎指教!

- (void)getImageWithURL:(NSString *)urlString type:(ImageType)type andToFileName:(NSString *)fileName wantPDF:(BOOL)wantPDF{NSString *typeString = nil;switch (type) {case GIF:typeString = @"gif";break;case JPG:typeString = @"jpeg";break;case PNG:typeString = @"png";default:return;break;}NSURL *url = [NSURL URLWithString:urlString];NSURLRequest *request = [NSURLRequest requestWithURL:url];NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];webView.delegate = self;NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {@autoreleasepool {int i = 0;if (error) {NSLog(@"error:%@",error);}else{NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSArray *array = [string componentsSeparatedByString:@"data-src:"];NSString *string1 = array[0];NSArray *array1 = [string1 componentsSeparatedByString:@"img"];for (NSString *str in array1) {NSLog(@"%@-----------------------------\n",str);if(str && str.length > 0){NSRange http = [str rangeOfString:@"http:"];NSRange jpeg = [str rangeOfString:[NSString stringWithFormat:@"=%@",typeString]];if (jpeg.location < INT_MAX/2) { //有时候截取会出问题,会出现不是同种格式的图片,那样的jpeg.location将会是最大值NSRange range = NSMakeRange(http.location, jpeg.location + jpeg.length - http.location);NSString *string2 = [str substringWithRange:range];NSURL *url = [NSURL URLWithString:string2];// 此处应该用多线程,个人偷懒未处理NSData *data = [NSData dataWithContentsOfURL:url];if (wantPDF) {[ViewController WQCreatePDFFileWithSrc:data toDestFile:fileName withPassword:nil];}else{[data writeToFile:[NSString stringWithFormat:@"%@/%d.%@",fileName,i,typeString] atomically:YES];}
          i++;
 } } } [webView loadHTMLString:string baseURL:nil]; } } }]; [self.view addSubview:webView]; [task resume];}
												

iOS怎么制作PDF图片和网络抓取图片相关推荐

  1. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

  2. iOS开发——使用Charles进行http网络抓包详解

    我在之前一篇博客<网络抓包工具Charles的介绍与使用>中简单介绍了Charles的安装破解,以及进行简单的Charles抓包配置的介绍.今天我们来详细介绍下使用Charles进行htt ...

  3. iOS系统网络抓包方法

    转自:http://www.cnblogs.com/ydhliphonedev/archive/2011/10/27/2226935.html 在进行iOS开发过程中,经常会遇到各种各样的网络访问问题 ...

  4. PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版

    PDF 补丁丁 0.3.0.8 正式版 新版本已经发布,请到博客首页下载. 软件简介 PDF补丁丁是一个用于修改PDF文件信息的工具.它具有以下功能: ■ 修改文档(带"*"号部分 ...

  5. Java制作PDF转图片小工具

    背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...

  6. java完整的利用itext5制作pdf、二维码图片插入pdf,并解析pdf中的二维码信息

    利用itext5.zxing.QRCore制作pdf.二维码图片插入pdf,并解析pdf中的二维码信息,手机可以实现扫描获取二维码的信息,并进行验证你的解析是否正确. 先是生成二维码图片并插入pdf中 ...

  7. iOS制作圆形图片头像

    iOS制作圆形图片头像,两行代码就行了,很简单. self.aImage.layer.masksToBounds = YES; self.aImage.layer.cornerRadius = 40; ...

  8. python docx 合并文档 图片_使用python抓取大量简历文档内数据(word:docx;pdf;图片等)输出表格文件...

    1. 文章背景描述: 近期公司有员工离职了,技术岗位的. 让HR招人,招聘进度也太慢了,实在等不及,就撸起袖子自己上.(之前从来没招聘过) 自己在某招聘网站注册后,花了若干人民币,短时间收到大量求职者 ...

  9. canvas导出图片python_python的reportlab库介绍、制作pdf和作图

    1 说明 1.1 reportlab模块是用python语言生成pdf文件的模块,也可以作图. 1.2 已经亲测,拿来就可以使用,适合收藏,万一自己需要就可以直接使用. 1.3 环境:python3. ...

最新文章

  1. linux free 命令
  2. JDK动态代理实现原理--转载
  3. GIT项目管理工具(part6)--放弃工作区文件修改及从仓库区恢复文件
  4. 真正释放Maven和Java EE的强大功能
  5. vue-cli@4安装Element-ui
  6. 分子动力学aimd_研究人员在沸石分子筛活性调控研究方面取得新进展
  7. 高并发推荐系统架构设计实践
  8. C++实验课任务(多态--容器--算法)
  9. 微软联合创始人保罗·艾伦去世,曾说服比尔·盖茨辍学
  10. MIT App Inventor使用与入门教程
  11. eclipse 中System.out快捷键设定
  12. 软件工程师与码农的区别
  13. 匆匆的一瞥,错过了一份正确的BIOS……,安装X64系统时错刷BIOS的彻底死机过程以及解决方法...
  14. linux中pak命令,Linux下Flatpak的安装与使用超详细教程
  15. windows使用Apple的Trackpad
  16. 利用scrapy爬取美图录网站图集按模特姓名存储到本地(三)
  17. 项目管理——如何制定生产计划控制生产进度
  18. OLED显示图像和波形
  19. java ieee_Java IEEE754 工具类
  20. C语言中strstr函数功能及用法

热门文章

  1. PWN ret2shellcode
  2. qt撤销与回退_Git版本控制教程 - Git查阅、撤销修改和版本回退
  3. Atlas200I DK A2开发者套件,究竟为何方神圣?
  4. 最新成果展示:利用缺陷信息数据库探索界面工程,助力GaN基肖特基势垒二极管的研究
  5. 分子共价对接(Covalent Docking)
  6. hdu1372 dfs搜索之国际象棋的马
  7. 手机4g信号强的服务器,5G网络来了,5G手机信号会比4G手机信号强?你也是这么误解的吧...
  8. MT5直接调用C++ Dll库
  9. 类与对象:求长方体的体积C++
  10. 自动排产软件如何规划配送中心