对接门禁分享门禁二维码图片报错

  咳咳,很久没更新博客了,身为一个ios程序员,懒成这样,真的是无药可救。这一年遇的坑解决了也没发上博客,真是耻辱啊。可是,今天这个经过友盟分享图片分享不出去的这个坑埋完后必定要发出来,省得后来者又入坑。ios

  1.入坑条件:程序员

  (1)首先你想本身经过字符串生成图片;(本人是经过对接门禁返回的二维码字符串生成图片)微信

  (2)而后你就网上百度了生成图片或二维码的方法,生成CIImage再转成图片;spa

  (3)最后你成功生成图片后沾沾自喜的时候要分享出去。code

  结果:orm

  

  而后你翻友盟开发文档,呵呵,找不到,没这种答案。而后你又去百度,呵呵,仍是找不到。。。。blog

  

  

  2.开始填坑:图片

  一开始我以为多是生成图片过大,分享不出去,而后我就去调用开发

  NSData *data=UIImagePNGRepresentation(myimage);文档

  结果,data = nil;

  what???????

  而后我就点进去看了下UIImagePNGRepresentation的说明,结果发现可靠的信息: 

  百度查了一下那句话的意思是,若是图像没有CGImageRef或者位图格式无效,能够返回nil 。

  恍然大悟。。。。。

  为了验证一下,特意调用了一下image.CGImage,果真不出我所料,image.CGImage = nil;

  

  接下来,个人想法就是看生成图片的方法了。

  我发现,我生成二维码图片时,是这样的:

  //建立二维码滤镜

      CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

      [qrFilter setValue:strData forKey:@"inputMessage"];

      [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];

      CIImage *qrImage = qrFilter.outputImage;

    UIImage *codeImage = [UIImage imageWithCIImage:[qrImage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]];

  有没发现什么?是否是没看到任何有关CGImageRef的?

  而后我查了一下什么是CGImageRef:

  CGImageRef: 位图的基本概念,能够点击看他的源码,是用C语言定义的。

                     能够经过它来建立像素位图,经过操做储存像素位图已达到裁剪图片的目的。

  这不就是咱们大学学的位图吗?而后我又接着去查了一下,如何将经过CIImage去生成CGIamgeRef,果真,

  CGRect extent = CGRectIntegral(image.extent);

  CIContext *context = [CIContext contextWithOptions:nil];

  CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];

   

  到这里就恍然大悟了,直接经过获得的位图去生成image:

  image = [UIImage imageWithCGImage:scaledImage];

  而后验证一下,果真,image.CGImage不为空。

  点击分享,弹出微信,大功告成!!!!

  

  一切就这么简单,欢迎各位大神吐槽。

相关文章
相关标签/搜索