• Swift中自动生成中间带小头像的二维码


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

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

            //text是二维码要带入的信息,sizeH是二维码的高度

            //创建滤镜

            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: sizeH)

            //创建一个头像

            let icon = UIImage(named: "icon")

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

            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 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, 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, 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);

            let scaledImage: CGImageRef = CGBitmapContextCreateImage(bitmapRef)!

            return UIImage(CGImage: scaledImage)

        }

  • 相关阅读:
    IBM openblockchain学习(五)--consensus源码分析
    Linux内核抢占机制
    IBM openblockchain学习(四)--crypto源码分析
    IBM openblockchain学习(三)--Ledger源码分析
    IBM openblockchain学习(二)--chaincode源码分析
    瞎谈“认知计算”
    IBM openblockchain学习(一)--obc-peer环境搭建
    10G数据不用框架快速去重
    Spark学习笔记(一)--Spark架构
    HDU2255 【模板】KM算法
  • 原文地址:https://www.cnblogs.com/YhhMzl/p/5825153.html
Copyright © 2020-2023  润新知