重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
因公司业务需求,在扫描二维码基础的前提下,也需要满足用户点击相册按妞,从相册获取本地保存二维码实现签到功能,在网上查阅相关资料后,整理了下,有以下几种方式:
为美兰等地区用户提供了全套网页设计制作服务,及美兰网站建设行业解决方案。主营业务为网站建设、成都网站制作、美兰网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
ios8.0以后可以通过使用系统原生的框架实现该功能,即CIDetector,直接上代码,但是通过验证发现,大部分二维码都能够识别,但是对于通过拍照保存的二维码,则出现很大概率无法识别,故此方法限制性比较大,不建议推荐使用,如想使用,可以直接照搬网上相关的代码;
使用先阶段比较流行的zxingObjC框架来扫描相册的二维码,但该框架不好用的一点就是对拍照的二维码识别度不是很高,而且对于截图保存的二维码也有很强的限制;因该框架对只有在280X280状态下识别度会增大很多,故需要对本地选择的二维码图片进行压缩
NSInteger xx = ceil( img.size.width );
if(xx > 280){
img = [img TransformtoSize:CGSizeMake(280, 280)];
}
这样压缩之后识别度提升很多,但是还会出现部分二维码无法识别的状态,所以这样处理还不够,后经测试,发现把图片压缩成256像素左右,这样基本上能够保证保存在本地的二维码图片能够进行识别,在此粘贴部分代码,供大家参考借鉴:
UIImage* bigImage = img;
float actualHeight = bigImage.size.height;
float actualWidth = bigImage.size.width;
float newWidth =0;
float newHeight =0;
if(actualWidth > actualHeight) {
//宽图
newHeight =256.0f;
newWidth = actualWidth / actualHeight * newHeight;
}else{
//长图
newWidth =256.0f;
newHeight = actualHeight / actualWidth * newWidth;
}
CGRect rect =CGRectMake(0.0,0.0, newWidth, newHeight);
UIGraphicsBeginImageContext(rect.size);
[bigImage drawInRect:rect];// scales p_w_picpath to rect
img =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
把进行压缩处理的图片通过zxingObjC进行识别,就能获取二维码里的内容