Swift 生成高清二维码 这个没有前景图片只是简单的生成普通的高清二维码

Swift 生成高清二维码 这个没有前景图片只是简单的生成普通的高清二维码

  /// 二维码容器
@IBOutlet weak var customImageVivew: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // 1.创建滤镜
    let filter = CIFilter(name: "CIQRCodeGenerator")
    // 2.还原滤镜默认属性
    filter?.setDefaults()
    // 3.设置需要生成二维码的数据到滤镜中
    // OC中要求设置的是一个二进制数据
    filter?.setValue("WD".dataUsingEncoding(NSUTF8StringEncoding), forKeyPath: "InputMessage")
    // 4.从滤镜从取出生成好的二维码图片
    guard let ciImage = filter?.outputImage else
    {
        return
    }

 //   customImageVivew.image = UIImage(CIImage: ciImage)
    customImageVivew.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)
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值