重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
因公司業(yè)務(wù)需求,在掃描二維碼基礎(chǔ)的前提下,也需要滿足用戶點擊相冊按妞,從相冊獲取本地保存二維碼實現(xiàn)簽到功能,在網(wǎng)上查閱相關(guān)資料后,整理了下,有以下幾種方式:
ios8.0以后可以通過使用系統(tǒng)原生的框架實現(xiàn)該功能,即CIDetector,直接上代碼,但是通過驗證發(fā)現(xiàn),大部分二維碼都能夠識別,但是對于通過拍照保存的二維碼,則出現(xiàn)很大概率無法識別,故此方法限制性比較大,不建議推薦使用,如想使用,可以直接照搬網(wǎng)上相關(guān)的代碼;
使用先階段比較流行的zxingObjC框架來掃描相冊的二維碼,但該框架不好用的一點就是對拍照的二維碼識別度不是很高,而且對于截圖保存的二維碼也有很強的限制;因該框架對只有在280X280狀態(tài)下識別度會增大很多,故需要對本地選擇的二維碼圖片進行壓縮
NSInteger xx = ceil( img.size.width );
if(xx > 280){
img = [img TransformtoSize:CGSizeMake(280, 280)];
}
這樣壓縮之后識別度提升很多,但是還會出現(xiàn)部分二維碼無法識別的狀態(tài),所以這樣處理還不夠,后經(jīng)測試,發(fā)現(xiàn)把圖片壓縮成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進行識別,就能獲取二維碼里的內(nèi)容
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。