從相冊讀取本地保存的二維碼並跳轉h5連接

      因公司業務需求,在掃描二維碼基礎的前提下,也須要知足用戶點擊相冊按妞,從相冊獲取本地保存二維碼實現簽到功能,在網上查閱相關資料後,整理了下,有如下幾種方式:ios

  1. ios8.0之後能夠經過使用系統原生的框架實現該功能,即CIDetector,直接上代碼,可是經過驗證發現,大部分二維碼都可以識別,可是對於經過拍照保存的二維碼,則出現很大機率沒法識別,故此方法限制性比較大,不建議推薦使用,如想使用,能夠直接照搬網上相關的代碼;app

  2. 使用先階段比較流行的zxingObjC框架來掃描相冊的二維碼,但該框架很差用的一點就是對拍照的二維碼識別度不是很高,並且對於截圖保存的二維碼也有很強的限制;因該框架對只有在280X280狀態下識別度會增大不少,故須要對本地選擇的二維碼圖片進行壓縮框架

   NSInteger xx = ceil( img.size.width );ide

   if(xx > 280){測試

    img = [img TransformtoSize:CGSizeMake(280, 280)];spa

       }orm

     這樣壓縮以後識別度提高不少,可是還會出現部分二維碼沒法識別的狀態,因此這樣處理還不夠,後經測試,發現把圖片壓縮成256像素左右,這樣基本上可以保證保存在本地的二維碼圖片可以進行識別,在此粘貼部分代碼,供你們參考借鑑:圖片

UIImage* bigImage = img;ci

    float actualHeight = bigImage.size.height;it

    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進行識別,就能獲取二維碼裏的內容

相關文章
相關標籤/搜索