加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift系统自带二维码的生成

发布时间:2020-12-14 07:07:26 所属栏目:百科 来源:网络整理
导读://MARK: - 传进去字符串 , 生成二维码图片 private func creatQRCodeImage(text: String) - UIImage{ // 创建滤镜 let filter = CIFilter(name: "CIQRCodeGenerator") // 还原滤镜的默认属性 filter?.setDefaults() // 设置需要生成二维码的数据 filter?.set

//MARK: -传进去字符串,生成二维码图片

private func creatQRCodeImage(text: String) -> UIImage{

//创建滤镜

let filter = CIFilter(name: "CIQRCodeGenerator")

//还原滤镜的默认属性

filter?.setDefaults()

//设置需要生成二维码的数据

filter?.setValue(text.dataUsingEncoding(NSUTF8StringEncoding),forKey: "inputMessage")

//从滤镜中取出生成的图片

let ciImage = filter?.outputImage

//这个清晰度不好

//let bgImage = UIImage(CIImage: ciImage!)

//这个清晰度好

let bgImage = createNonInterpolatedUIImageFormCIImage(ciImage!,size: 300)

//创建一个头像

let icon = UIImage(named: "navigationbar_pop_highlighted")

//合成图片(把二维码和头像合并)

let newImage = creatImage(bgImage,iconImage: icon!)

//返回生成好的二维码

return newImage

}

//MARK: - 根据背景图片和头像合成头像二维码

private func creatImage(bgImage: UIImage,iconImage:UIImage) -> UIImage{

//开启图片上下文

UIGraphicsBeginImageContext(bgImage.size)

//绘制背景图片

bgImage.drawInRect(CGRect(origin: CGPointZero,size: bgImage.size))

//绘制头像

let width: CGFloat = 50

let height: CGFloat = width

let x = (bgImage.size.width - width) * 0.5

let y = (bgImage.size.height - height) * 0.5

iconImage.drawInRect(CGRect(x: x,y: y,width: width,height: height))

//取出绘制好的图片

let newImage = UIGraphicsGetImageFromCurrentImageContext()

//关闭上下文

UIGraphicsEndImageContext()

//返回合成好的图片

return newImage

}

//MARK: -根据CIImage生成指定大小的高清UIImage

private func createNonInterpolatedUIImageFormCIImage(image: CIImage,size: CGFloat) -> UIImage {

let extent: CGRect = CGRectIntegral(image.extent)

let scale: CGFloat = min(size/CGRectGetWidth(extent),size/CGRectGetHeight(extent))

let width = CGRectGetWidth(extent) * scale

let height = CGRectGetHeight(extent) * scale

let cs: CGColorSpaceRef = CGColorSpaceCreateDeviceGray()!

let bitmapRef = CGBitmapContextCreate(nil,Int(width),Int(height),8,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);

let scaledImage: CGImageRef = CGBitmapContextCreateImage(bitmapRef)!

return UIImage(CGImage: scaledImage)

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读