1. 程式人生 > >iOS生成三種類型二維碼

iOS生成三種類型二維碼

系統二維碼主要通過CIFilter的物件來完成, 當然首先我們需要先匯入這個類所在的框架:

#import <CoreImage/CoreImage.h>

之後只需要例項化一個CIFilter的物件, 給該物件新增資料後生成二維碼即可。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 1. 建立一個二維碼濾鏡例項(CIFilter)
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    // 濾鏡恢復預設設定
    [filter setDefaults];
    
    // 2. 給濾鏡新增資料
    NSString *string = @"are you ok?"
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    // 使用KVC的方式給filter賦值
    [filter setValue:data forKeyPath:@"inputMessage"];
    
    // 3. 生成二維碼
    CIImage *image = [filter outputImage];
    
    // 4. 顯示二維碼
    self.imageView.image = [UIImage imageWithCIImage:image];
}

二維碼中的資料可以是字串和URL兩種型別, 如果我們想要生成URL的二維碼, 只需要把字串替換為一個URL字串即可:

- (void)createCode:(NSString *)string

{

// 1. 建立一個二維碼濾鏡例項(CIFilter)

CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];

// 濾鏡恢復預設設定

[filter setDefaults];

// 2. 給濾鏡新增資料

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

[filter setValue

:data forKeyPath:@"inputMessage"];

// 3. 生成二維碼

CIImage *ciimage = [filter outputImage];

// 4. 顯示二維碼

self.codeImg.image = [selfcreateNonInterpolatedUIImageFormCIImage:ciimage withSize:180];

}

此外, 我們經常看到中間帶有圖片的二維碼, 其實只需要在二維碼的imageView上再新增一個imageView即可, 當然圖片不能太大, 否則會導致掃描不到二維碼中的資訊

但這時候生成的二維碼會比較模糊, 只需要使用下面的方法來獲得一個清晰的image, 之後只要把image新增到二維碼的imageView上即可:

/**

*根據CIImage生成指定大小的UIImage

*

*@param image CIImage

*@param size圖片寬度以及高度

*/

- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size

{

CGRect extent = CGRectIntegral(image.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 = [CIContextcontextWithOptions:nil];

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

CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

CGContextScaleCTM(bitmapRef, scale, scale);

CGContextDrawImage(bitmapRef, extent, bitmapImage);

//2.儲存bitmap到圖片

CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

CGContextRelease(bitmapRef);

CGImageRelease(bitmapImage);

return [UIImageimageWithCGImage:scaledImage];

}






相關推薦

iOS生成種類

系統二維碼主要通過CIFilter的物件來完成, 當然首先我們需要先匯入這個類所在的框架: #import <CoreImage/CoreImage.h> 之後只需要例項化一個CIFilter的物件, 給該物件新增資料後生成二維碼即可。 - (void

C#公眾平臺()—— 生成帶引數的

遇到了一個需求,就是要生成客戶的專屬二維碼,要求掃碼後能關注訂閱號,並且將每個掃碼的人和這個二維碼所屬客戶繫結,但是系統用的是商戶號,商戶號不能繫結訂閱號,這就存在了怎麼確認是同一個客戶的問題。 生成帶引數的二維碼文件 基礎幫助類 unionid 只有在使用者將公眾號繫結到微信開

QRCode生成方案及其在帶LOGO中的應用(2)

                首先我們來看看二維碼的符號字元區域,然後再看看其編碼流程。QRCode的結構:圖9  QRCode的結構下圖為二維碼的符號字元區域示意:圖10   版本2-M符號的字元區域分佈示意圖11   版本7-H符號的符號字元佈置從上面可知,字元區域分佈中均有糾錯塊與資料塊。再看編碼流程

C# ZXing.Net生成、識別生成帶Logo的(一)

tree bit 字符串 單位 images j2se lba 支付 .net 一.ZXing.Net 源代碼地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如圖: 說明:ZXing是一個開源Java類庫用於解析多種格式的

Java生成帶logo 的

angle orm new ops 步驟 path rotated ade mat 這個工具類主要實現了兩點功能: 1. 生成任意文鏈接的二維碼. 2. 在二維碼的中間加入圖像. 主要實現步驟: 第一步: 導入QR二維碼3.0 版本的core包和一張jpg圖片(logo)。

Java生成並打印

else clas html4 bar output ans utf-8 orm 二維 本次做訂餐系統中,需要用到在Java生成二維碼,並在jsp頁面打印並輸出,其中在action中生成二維碼. 關鍵代碼如下 1 public void reWeiMa() throws

Java生成名片式的分享

on() get close exception ase detail dispose 定義 closeable 世界上25%的人都有拖延癥——但我覺得這統計肯定少了,至少我就是一名拖延癥患者。一直想把“Java生成名片式(帶有背景圖片、

phpqrcode生成帶logo的圖片

don width top files rom mage 出圖 準備 file <?php //include_once(‘lib/QrReader.php‘); //$qrcode = new QrReader(‘201708211144474410.jpg

生成帶logo的

二維 qrc row ack {} trac zxing req onf 一,生成帶log的二維碼   1)生成的二維碼是流返回,或者是直接寫到指定文件夾 二,準備資料   1)引入jar包 <!-- https://mvnrepository.com/artifa

jQuery-qrcode.js 生成帶Logo 的

引入檔案  jQuery-qrcode.js   地址:https://blog-static.cnblogs.com/files/kitty-blog/jquery-qrcode.js https://blog-static.cnblogs.com/files/k

Java自動生成帶log的

我用的是google.zxing的這個外掛來完成生成二維碼的,還是很方便的。 我們需要引入google.zxing的jar包。 地址為:1.  https://mvnrepository.com/artifact/com.google.zxing/core  

微信生成帶引數的,合成海報,掃後推送小程式

背景:公司開發的小程式要實現將產品免費給使用者試用的功能,使用者登入小程式後在產品頁可以將產品以二維碼海報的方式分享給微信好友,好友掃碼後跳轉公眾號,關注後公眾號推送小程式,點選小程式後跳轉到小程式中的相應產品頁面。 如下圖: 這裡涉及到兩個重要的環節: 1.生成帶

zxing生成帶logo的

首先說下,QRCode是日本人開發的,ZXing是google開發,barcode4j也是老美開發的,barcode4j對一維條形碼處理的很好,而且支援的格式很多,當然也可以對二維碼進行處理,效果個人感覺沒有前兩種好;ZXing對j2me,j2se,還有Android等支援也

php 生成帶引數的

$savepath = '/uploads/myqrcode/'; if(!file_exists(ROOT_PATH.'public'.$savepath)){ mkdir(ROOT_PATH.'public'.$savepath,0777,true); } $appletcode = '

無限制生成,個人轉賬的解決方案

無限制生成,個人轉賬二維碼的解決方案 支付寶限制個人收款碼一天只能生成20次,導致眾玩家一片哀號。但很快新的解決方案就出來了,演示請看這裡: http://114.215.199.184:9898/alipay/ ~ 1:動態二維碼 “秒” 生成 2:支援0.01~50000

XPosed外掛自動生成支付寶收款

一、前言 前一段時間才偶然看到這個論壇,並且看了一篇@jiangwei212 大神的《》,這才知道XPosed和VirtualXPosed的存在,覺得這個框架神器非常的有意思,所以繼續學習了框架原理和使用方法,我發現有一些做支付寶微信自動收款提醒的網站,有生成二維碼的功能,但是我沒有找到相關開源的外掛,

動態生成微信支付

實現步驟 一、開發前奏 開發工具:eclipse jar管理:maven 資料庫:oracle 架構:SpringMvc + Spring +Mybatis 微信公眾號:企業號(個人訂閱號和公眾測試號無此許可權) 二、開發步驟 1、開發前請先檢視文件微信掃碼支付流程,統一下單

WIndow下使用QT C++開發生成帶Logo的的程式

現在二維碼很流行,大街小巷大小商品廣告上的二維碼標籤都隨處可見,而且大都不是簡單的純二維碼,而是中間有個性圖示的二維碼。網上比較少介紹基於windows下的C++二維碼編碼實現的文章,最近正好在windows平臺下使用QT開發了一個簡單的生成帶LOGO的二維碼小程式,特

生成帶url的

package com.zpxing.controller; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; i

Python 生成CSDN個人主頁

狗頭護體。 參考部落格:python二維碼操作:QRCode和MyQR入門 (來源作者:不夜貓)。 我使用的環境如下:①Python版本3.6;②64位Win10系統;③IDE:PyCharm。 靜態二維碼: 需要pip好的Python庫有:qrcode。開啟cmd輸入以下