iOS開發-生成二維碼圖片【附中間帶有小圖標二維碼】(QRCode)

来源:http://www.cnblogs.com/wangkejia/archive/2017/10/07/7634884.html
-Advertisement-
Play Games

生成二維碼圖片也是項目中常用到的,二維碼的掃描Git上有很多好用的,這裡主要說下二維碼的生成 1.普通二維碼 1.1 方法 /** 生成二維碼 QRStering:字元串 imageFloat:二維碼圖片大小 */ + (UIImage *)createQRCodeWithString:(NSStr ...


生成二維碼圖片也是項目中常用到的,二維碼的掃描Git上有很多好用的,這裡主要說下二維碼的生成

1.普通二維碼

1.1 方法

/**

 生成二維碼

 QRStering:字元串

 imageFloat:二維碼圖片大小

 */

+ (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat;

1.2 方法實現

/**

 生成二維碼

 QRStering:字元串

 imageFloat:二維碼圖片大小

 */

+ (UIImage *)createQRCodeWithString:(NSString *)QRString withImgSize:(CGFloat)imageFloat{

    CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"];

    [filter setDefaults];

    NSString *getString = QRString;

    NSData *dataString = [getString dataUsingEncoding:NSUTF8StringEncoding];

    [filter setValue:dataString forKey:@"inputMessage"];

    ///獲取濾鏡輸出的圖像

    CIImage *outImage = [filter outputImage];

    UIImage *imageV = [self imageWithImageSize:imageFloat withCIIImage:outImage];

    //返回二維碼圖像

    return imageV;

}

2.中間帶有小圖標的二維碼

2.1 方法

/**

 生成二維碼(中間有小圖片)

 QRStering:字元串

 centerImage:二維碼中間的image對象

 */

+ (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage;

2.2 方法實現

/**

 生成二維碼(中間有小圖片)

 QRStering:所需字元串

 centerImage:二維碼中間的image對象

 */

+ (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage{

    // 創建濾鏡對象

    CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"];

    // 恢復濾鏡的預設屬性

    [filter setDefaults];

    // 將字元串轉換成 NSdata

    NSData *dataString = [QRString dataUsingEncoding:NSUTF8StringEncoding];

    // 設置過濾器的輸入值, KVC賦值

    [filter setValue:dataString forKey:@"inputMessage"];

    // 獲得濾鏡輸出的圖像

    CIImage *outImage = [filter outputImage];

    // 圖片小於(27,27),我們需要放大

    outImage = [outImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)];

    // 將CIImage類型轉成UIImage類型

    UIImage *startImage = [UIImage imageWithCIImage:outImage];

    // 開啟繪圖, 獲取圖形上下文

    UIGraphicsBeginImageContext(startImage.size);

    

    // 把二維碼圖片畫上去 (這裡是以圖形上下文, 左上角為(0,0)點

    [startImage drawInRect:CGRectMake(0, 0, startImage.size.width, startImage.size.height)];

    // 再把小圖片畫上去

    CGFloat icon_imageW = 200;

    CGFloat icon_imageH = icon_imageW;

    CGFloat icon_imageX = (startImage.size.width - icon_imageW) * 0.5;

    CGFloat icon_imageY = (startImage.size.height - icon_imageH) * 0.5;

    [centerImage drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)];

    // 獲取當前畫得的這張圖片

    UIImage *qrImage = UIGraphicsGetImageFromCurrentImageContext();

    // 關閉圖形上下文

    UIGraphicsEndImageContext();

    //返回二維碼圖像

    return qrImage;

}

附加方法

/** 將CIImage轉換成UIImage 並放大(內部轉換使用)*/

+ (UIImage *)imageWithImageSize:(CGFloat)size withCIIImage:(CIImage *)ciiImage{

    CGRect extent = CGRectIntegral(ciiImage.extent);

    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

    // 1.創建bitmap;

    size_t width = CGRectGetWidth(extent) * scale;

    size_t height = CGRectGetHeight(extent) * scale;

    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();

    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);

    CIContext *context = [CIContext contextWithOptions:nil];

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

    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

    CGContextScaleCTM(bitmapRef, scale, scale);

    CGContextDrawImage(bitmapRef, extent, bitmapImage);

    // 2.保存bitmap到圖片

    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

    CGContextRelease(bitmapRef);

    CGImageRelease(bitmapImage);

    return [UIImage imageWithCGImage:scaledImage];

}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端開發工具 1.1、 WebStorm介紹和下載 l 介紹 WebStorm是JetBrains 推出的一款強大的HTML5編輯工具,擁有豐富的代碼快速編輯,可以智能的補全代碼、代碼格式化、html提示以及代碼檢查和快速修複等,支持不同瀏覽器的提示,同時也是一款JavaScript 開發工具,擁有 ...
  • 最近的項目里用上了vue和element-ui。vue這種輕量級漸進式框架的舒適自不必說,但一直困擾著我的,是如何方便又優雅的彈出模態dialog... 對於我這種在jquery出現之前就用document.getElementById敲代碼的老頑固來說,我始終不能完全接受把dialog在編碼期就寫 ...
  • 1.獲取網頁可見區域的寬度:document.body.clientWidth ; 2.獲取網頁可見區域的高度:document.body.clientHeight; 3.獲取 網頁可見區域寬:document.body.offsetWidth; (包括邊線的寬度) 4.獲取網頁可見區域高:docu ...
  • CSS常見佈局方式 以下總結一下CSS中常見的佈局方式。本人才疏學淺,如有錯誤,請留言指出。 如需轉載,請註明出處: "CSS常見佈局方式" 目錄: 1. 使用BFC隱藏屬性 2. float + margin 3. absolute + margin 4. 聖杯佈局 5. 雙飛翼佈局 6. fle ...
  • 前言:最近開始做IOS端的游戲開發,因cocos2d-x更新太過頻繁,使得度娘上一兩年前的博客內容與目前實際情況矛盾很大。本該10分鐘搞定的事情讓我搞了半個十一黃金周。 本次我使用的macOS Sierra 版本10.12.6 (16G29),Xcode 9.0 cocos2d-x版本為3.15.1 ...
  • 陸陸續續做了一個半月左右的「喵嗚天氣」終於在今天下午成功提交到應用商店(騰訊應用寶)。期間遇到兩個小問題,記錄如下: 1、上傳安裝包失敗,提示「無法獲取簽名信息,請上傳有效包(110506)」。 安裝包是通過 Android Studio 中的 Build Generate Signed APK.. ...
  • 這是一個朋友曾經給我的一個文件,這裡我新建了一個基於NSObject對象的一個ChineseToSpell,.m文件內容有點多 .h文件內容 // // ChineseToSpell.h // #import <Foundation/Foundation.h> @interface ChineseT ...
  • 前面提到AFNetworking是一個很強大的網路三方庫,首先你需要引入AFNetworking三方庫;如封裝的有誤還請指出,謝謝! 1.Get請求 /**Get請求 url 伺服器請求地址 success 伺服器響應返回的結果 faile 失敗的信息 */ + (void)getHttpReque ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...