@IBOutlet weak var qrCodeImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// 1.創建濾鏡
let filter = CIFilter(name: "CIQRCodeGenerator")
// 2.還原濾鏡默認屬性
filter?.setDefaults()
// 3.設置需要生成二維碼的數據到濾鏡中
// OC中要求設置的是一個二進制數據
filter?.setValue("我叫王大錘".dataUsingEncoding(NSUTF8StringEncoding), forKeyPath: "InputMessage")
// 4.從濾鏡從取出生成好的二維碼圖片
guard let ciImage = filter?.outputImage else
{
return
}
// customImageVivew.image = UIImage(CIImage: ciImage)
qrCodeImage.image = createNonInterpolatedUIImageFormCIImage(ciImage, size: 500)
}
/**
生成高清二維碼
- parameter image: 需要生成原始圖片
- parameter size: 生成的二維碼的寬高
*/
private func createNonInterpolatedUIImageFormCIImage(image: CIImage, size: CGFloat) -> UIImage {
let extent: CGRect = CGRectIntegral(image.extent)
let scale: CGFloat = min(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent))
// 1.創建bitmap;
let width = CGRectGetWidth(extent) * scale
let height = CGRectGetHeight(extent) * scale
let cs: CGColorSpaceRef = CGColorSpaceCreateDeviceGray()!
let bitmapRef = CGBitmapContextCreate(nil, Int(width), Int(height), 8, 0, cs, 0)!
let context = CIContext(options: nil)
let bitmapImage: CGImageRef = context.createCGImage(image, fromRect: extent)
CGContextSetInterpolationQuality(bitmapRef, CGInterpolationQuality.None)
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);
// 2.保存bitmap到圖片
let scaledImage: CGImageRef = CGBitmapContextCreateImage(bitmapRef)!
return UIImage(CGImage: scaledImage)
}
}
僅為個人在學習過程中的筆記,版權歸原著所有