swift-生成二维码(可带图片)
2016-11-25 11:12
543 查看
import UIKit
class ViewController:
UIViewController {
override
func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 不带图片的二维码图片
let imageViewIcon1 =
UIImageView(frame: CGRect(x:
20, y: 20, width:
150, height: 150))
imageViewIcon1.image =
createQRForString("MR.G", qrImageName:
"")
self.view.addSubview(imageViewIcon1)
// 带图片的二维码图片
let imageViewIcon2 =
UIImageView(frame: CGRect(x:
200, y: 20, width:
150, height: 150))
imageViewIcon2.image =
createQRForString("MR.G", qrImageName:
"2")
self.view.addSubview(imageViewIcon2)
}
override
func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createQRForString(qrString:
String?, qrImageName: String?) ->
UIImage? {
if
let sureQRString = qrString {
let stringData = sureQRString.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)
// 创建一个二维码的滤镜
let qrFilter =
CIFilter(name: "CIQRCodeGenerator")
qrFilter?.setValue(stringData, forKey:
"inputMessage")
qrFilter?.setValue("H", forKey:
"inputCorrectionLevel")
let qrCIImage = qrFilter?.outputImage
// 创建一个颜色滤镜,黑白色
let colorFilter =
CIFilter(name: "CIFalseColor")
colorFilter?.setDefaults()
colorFilter?.setValue(qrCIImage, forKey:
"inputImage")
// 二维码颜色
colorFilter?.setValue(CIColor(red:
1, green: 1, blue:
1), forKey: "inputColor0")
// 二维码背景色
colorFilter?.setValue(CIColor(red:
0, green: 0, blue:
0), forKey: "inputColor1")
// 返回二维码image
let codeImage =
UIImage(CIImage: colorFilter!.outputImage!.imageByApplyingTransform(CGAffineTransformMakeScale(5,
5)))
// 通常,二维码都是定制的,中间的都会放想要表达意思的图片
if
let iconImage = UIImage(named: qrImageName!) {
let rect =
CGRect(x: 0, y:
0, width: codeImage.size.width, height: codeImage.size.height)
UIGraphicsBeginImageContext(rect.size)
codeImage.drawInRect(rect)
let avatarSize =
CGSize(width: rect.size.width *
0.25, height: rect.size.height
* 0.25)
let x = (rect.size.width - avatarSize.width)
* 0.5
let y = (rect.size.height - avatarSize.height)
* 0.5
iconImage.drawInRect(CGRect(x: x, y: y, width: avatarSize.width, height:
avatarSize.height))
let resultImage =
UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage
}
return codeImage
}
return
nil
}
}
class ViewController:
UIViewController {
override
func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 不带图片的二维码图片
let imageViewIcon1 =
UIImageView(frame: CGRect(x:
20, y: 20, width:
150, height: 150))
imageViewIcon1.image =
createQRForString("MR.G", qrImageName:
"")
self.view.addSubview(imageViewIcon1)
// 带图片的二维码图片
let imageViewIcon2 =
UIImageView(frame: CGRect(x:
200, y: 20, width:
150, height: 150))
imageViewIcon2.image =
createQRForString("MR.G", qrImageName:
"2")
self.view.addSubview(imageViewIcon2)
}
override
func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createQRForString(qrString:
String?, qrImageName: String?) ->
UIImage? {
if
let sureQRString = qrString {
let stringData = sureQRString.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)
// 创建一个二维码的滤镜
let qrFilter =
CIFilter(name: "CIQRCodeGenerator")
qrFilter?.setValue(stringData, forKey:
"inputMessage")
qrFilter?.setValue("H", forKey:
"inputCorrectionLevel")
let qrCIImage = qrFilter?.outputImage
// 创建一个颜色滤镜,黑白色
let colorFilter =
CIFilter(name: "CIFalseColor")
colorFilter?.setDefaults()
colorFilter?.setValue(qrCIImage, forKey:
"inputImage")
// 二维码颜色
colorFilter?.setValue(CIColor(red:
1, green: 1, blue:
1), forKey: "inputColor0")
// 二维码背景色
colorFilter?.setValue(CIColor(red:
0, green: 0, blue:
0), forKey: "inputColor1")
// 返回二维码image
let codeImage =
UIImage(CIImage: colorFilter!.outputImage!.imageByApplyingTransform(CGAffineTransformMakeScale(5,
5)))
// 通常,二维码都是定制的,中间的都会放想要表达意思的图片
if
let iconImage = UIImage(named: qrImageName!) {
let rect =
CGRect(x: 0, y:
0, width: codeImage.size.width, height: codeImage.size.height)
UIGraphicsBeginImageContext(rect.size)
codeImage.drawInRect(rect)
let avatarSize =
CGSize(width: rect.size.width *
0.25, height: rect.size.height
* 0.25)
let x = (rect.size.width - avatarSize.width)
* 0.5
let y = (rect.size.height - avatarSize.height)
* 0.5
iconImage.drawInRect(CGRect(x: x, y: y, width: avatarSize.width, height:
avatarSize.height))
let resultImage =
UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage
}
return codeImage
}
return
nil
}
}
相关文章推荐
- Swift 3.0 生成二维码图片
- Swift 生成高清二维码 这个没有前景图片只是简单的生成普通的高清二维码
- iOS生成二维码(中间包含图片),长按识别二维码(Swift)
- 二维码的生成(Swift)保证生成的图片清晰
- 二维码在线生成图片PHP源代码
- java zxing 生成带图片的二维码
- OpenJWeb平台提供免费的二维码图片生成的在线工具
- Python下使用qrcode模块生成vCard电子名片二维码图片
- 生成彩色二维码(渐变色、插入图片和文字)
- JAVA生成二维码图片
- 在线生成二维码(可以包含图片LOGO)
- Android平台利用ZXING生成二维码图片
- 生成二维码图片代码+加图片水印+导出
- asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像
- C# 利用QRCode生成二维码图片
- asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像
- 生成二维码的webservice(可以加logo图片)
- android 生成二维码图片
- java生成二维码,二维码中间可带图片
- [Asp.Net]QRCode生成二维码(续)-在二维码图片中心加Logo或图像