ZXingObjc 扫描相册二维码

// 点击“相册”按钮

-(void)openAlbum

{

  //打开之前最好判断应用是否拥有打开系统“照片”的权限,同理,扫描之前也最好要判断,此处不赘述

if (!_picker) {

_picker = [[RCImagePickerController alloc] init];

_picker.delegate = self;

_picker.allowsEditing = NO;   // 设置选中相册的图片后,不需要编辑(截取部分),直接解析图片

_picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

}

[self presentViewController:_picker animated:YES completion:nil];

}

#pragma -mark 选中相册中的图片

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

  // toast 提示“正在处理”

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.parentViewController.view animated:YES];

hud.mode = MBProgressHUDModeIndeterminate;

hud.labelText = @"正在处理";

hud.margin = 15.f;

hud.yOffset = 15.f;

hud.removeFromSuperViewOnHide = YES;

self.hudView = hud;

//可选经过编辑还是未经过编辑,此处设置选择图片是不经过编辑的模式

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

// 相册图片对应尺寸需要按比例缩放到屏幕匹配的大小,保证解析的正确率

CGFloat newWidth = image.size.width;

CGFloat newHeight = image.size.height;

if (image.size.height/image.size.width>self.view.bounds.size.height/self.view.bounds.size.width) {

newHeight = newHeight>self.view.bounds.size.height?self.view.bounds.size.height:newHeight;

newWidth = newHeight * image.size.width/image.size.height;

}else{

newWidth = newWidth>self.view.bounds.size.width?self.view.bounds.size.width:newWidth;

newHeight = newWidth * image.size.height/image.size.width;

}

CGSize newSize= CGSizeMake(newWidth, newHeight);

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[self dismissViewControllerAnimated:YES completion:^{

[self getInfoWithImage:newImage];

}];

}

#pragma -mark 照片处理

-(void)getInfoWithImage:(UIImage *)img{

UIImage *loadImage= img;

CGImageRef imageToDecode = loadImage.CGImage;

ZXLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:imageToDecode];

ZXBinaryBitmap *bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]];

NSError *error = nil;

ZXDecodeHints *hints = [ZXDecodeHints hints];

ZXMultiFormatReader *reader = [ZXMultiFormatReader reader];

ZXResult *result = [reader decode:bitmap

hints:hints

error:&error];

if (result) {

[self.hudView hide:YES];

if(!isDisplaingResult){

[MobClick event:Event_QRCodeScanSuccess];

dispatch_async(dispatch_get_main_queue(), ^{

NSString *resultString = [result.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

isDisplaingResult = YES;

[MobClick event:Event_scanPhotoInAlbumSucess];

//相册选取图片,根据扫描结果直接打开页面

if (self.scanType!= RCScanQR||[resultString isURL]||[resultString isBarCode]) {

[self openResult:resultString];

}else{

[self displayForResult:resultString type:self.scanType];

}

});

}

}else{

[self.hudView hide:YES];

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES];

hud.mode = MBProgressHUDModeText;

hud.userInteractionEnabled = NO;

hud.labelText = @"解析失败";

hud.margin = 15.f;

hud.yOffset = 15.0f;

hud.removeFromSuperViewOnHide = YES;

[hud hide:YES afterDelay:1];

}

}

时间: 2024-10-16 16:34:19

ZXingObjc 扫描相册二维码的相关文章

关于《手机扫描电脑二维码登录原理》的学习

技术学习:手机扫描电脑二维码登录原理 通用地实现方式(以登录电脑浏览器网页版微信为例): 1.每打开一次微信(Client)电脑浏览器网页时会随机生成一个含有唯一uid的二维码,每次刷新页面都会不一样(*这个可以保证一个uid只可以绑定一个帐号和密码,如果一个uid可以绑定多个帐号和密码,那么很可能你的电脑会登录别人的微信) ps: 返回uid的目的是识别用户身份,而且实际上打开这个页面时浏览器已经和Server创建了一个长连接等待确认信息.这个页面在加载完毕时,也已经把很多登录后才需要的相关资

HTML5实现扫描识别二维码/生成二维码

扫描识别二维码 思路: 1. 操作摄像头,获取图片.HTML5 WEBRTC的navigator.getUserMedia方法去实时获取摄像头资源. 2. 利用canvas使用相关算法分析图片识别图片得出结果,可用jquery.qrcode分析二维码 .(技术点:getImageData) 局限性: 移动平台支持getUserMedia/Stream API的浏览器比较少,支持列表http://caniuse.com/#feat=stream (目前没发现有IOS是支持的) 代码实现: 感谢gi

如何在扫描完二维码后, 直接用Facebook App进到粉丝专页而不是网页版

假设我们推广了一枚二维码, 用户扫面二维码就用通过手机浏览器进入点专页,而不是facebook app, 是不是觉得很麻烦呢? 有没有办法解决呢?答案当然是有的! 一.取得Facebook粉丝专页id 代码 首先我们必须取得Facebook id 代码才能完成后面的动作,一般来说如果你的粉丝专页还没有取短网址的话, 你可以直接在网址列中就可以找到你的Facebook粉丝专页的id(如图红框所示) 但如果你已经取了短网址, 那你必须在网址列输入http://graph.facebook.com/{

实现扫描 一/二维码 -- ZBar开源SDK

一.下载ZBarSDK, 加入到工程中. 二.配置TARGETS和PROJECT 三.设置Link Binary With Libraries 四.  .m文件 #import "MQMainViewController.h" #import "ZBarSDK.h" @interface MQMainViewController () @end @implementation MQMainViewController - (void)viewDidLoad { [s

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二) 上一篇解决了ZBarSDK不支持64bit的问题,下面我们就可以使用ZBarSDK了. 导入ZBarSDk.h文件 附上代码: // //  MeViewController.m //  Auditory Blog // //  Created by 寒竹子 on 15/4/28. //  Copyright (c) 2015年 寒竹子. All rights reserved. // #define ScanWidth  2

基于Zxing的二维码、条形码的扫描以及二维码的生成(简洁高效)

效果图: 条形码扫描: 二维码扫描: 二维码生成: 项目结构: 这个项目很简单,就2个类,一个jar包和一些依赖,十分简洁. 主要代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView resultTV; private ImageView resultIV; private EditText strET; @Override protec

android中Zing二维码扫描,二维码生成

Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求的可使用zbar,但目前没有在维护,项目地址:https://github.com/ZBar/ZBar. 1.添加依赖 在根build.gradle中添加maven { url 'https://jitpack.io' } allprojects { repositories { google()

Ireport+JS处理扫描中文二维码

关于JasperReport的基础应用参考: IReport+JasperReport+Applet报表打印 应用IReport+JasperReport处理含中文二维码的思路与过程. 在报表中展现二维条码. 适应扫描器操作处理(中文转义). 结合JS使用条码. 第一部分 在报表中展现二维条码: 参考:iReport中产生二维条码(QR Code) 思路:应用zxing工具包生成二维码的图形,并写入在IReport报表的图像组件中. 步骤1:下载core.jar和javase.jar. 步骤2:

扫描(生成)二维码Demo(转载)

用的是Google提供的ZXing开源项目,它提供二维码和条形码的扫描.扫描条形码就是直接读取条形码的内容,扫描二维码是按照自己指定的二维码格式进行编码和解码. 可以到http://code.google.com/p/zxing/下载ZXing项目的源码,然后按照官方文档进行开发,我这里使用的ZXing是经过简化版的,去除了一些一般使用不必要的文件,项目工程截图如下: 其中encoding包是我在它的基础上自己加上去的,功能是根据传入的字符串来生成二维码图片,返回一个Bitmap,其余的包是ZX