最近項目完成的差不多了音诫,也想記錄一寫東西。從開始慢慢整理吧雪位。
先記錄一下項目中記憶點最深的一個地方 竭钝。先上效果圖。
這個需求看起來簡單吧雹洗?當(dāng)時搞到了12點多香罐。完成思路兩點:
1、生成透明底的二維碼image时肿;
//生成二維碼
class func creatQRCodeImage(text: String, WH: CGFloat) -> UIImage{?? ? ? ?? ? ? ?
????//創(chuàng)建濾鏡? ? ? ?
????let filter = CIFilter(name: "CIQRCodeGenerator")? ? ? ?
????//還原濾鏡的默認(rèn)屬性? ? ? ?
????filter?.setDefaults()? ? ? ?
????//設(shè)置需要生成二維碼的數(shù)據(jù)? ? ? ?
????filter?.setValue(text.data(using: String.Encoding.utf8), forKey: "inputMessage")? ? ? ?
????//從濾鏡中取出生成的圖片? ? ? ?
????let ciImage = filter?.outputImage? ? ? ?
????//這個清晰度好? ? ? ?
????let bgImage = createNonInterpolatedUIImageFormCIImage(image: ciImage!, size: WH)? ? ? ? ? ? ? ? ? ?
????return bgImage? ??
}
class func createNonInterpolatedUIImageFormCIImage(image: CIImage, size: CGFloat) -> UIImage {
? ? ? ? let extent: CGRect = image.extent.integral
? ? ? ? let scale: CGFloat = min(size/extent.width * 2, size/extent.height * 2)
? ? ? ? let width = extent.width * scale? ? ? ?
????????let height = extent.height * scale? ? ? ?
????????let cs: CGColorSpace = CGColorSpaceCreateDeviceGray()?? ? ? ?? ? ? ?
????????let bitmapRef = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: 0)!?? ? ? ?? ? ? ?
????????let context = CIContext(options: nil)? ? ? ?
????????let bitmapImage: CGImage = context.createCGImage(image, from: extent)!? ? ? ?
????????bitmapRef.interpolationQuality = CGInterpolationQuality.none? ? ? ?
????????bitmapRef.scaleBy(x: scale, y: scale)? ? ? ?
????????bitmapRef.draw(bitmapImage, in: extent)? ? ? ?
????????let scaledImage: CGImage = bitmapRef.makeImage()!? ? ? ?
????????return UIImage(cgImage: scaledImage)? ?
}
extension UIImage {
? ??//返回一個將白色背景變透明的UIImage? ?
func imageByRemoveWhiteBg() -> UIImage? {
? ? ? ? let colorMasking: [CGFloat] = [222, 255, 222, 255, 222, 255]
? ? ? ? return transparentColor(colorMasking: colorMasking)? ?
}?? ?? ?
func transparentColor(colorMasking:[CGFloat]) -> UIImage? {
? ? ? ? if let rawImageRef = self.cgImage {
? ? ? ? ? ? UIGraphicsBeginImageContext(self.size)
? ? ? ? ? ? if let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking) {
? ? ? ? ? ? ? ? let context: CGContext = UIGraphicsGetCurrentContext()!
? ? ? ? ? ? ? ? context.translateBy(x: 0.0, y: self.size.height)
? ? ? ? ? ? ? ? context.scaleBy(x: 1.0, y: -1.0)
? ? ? ? ? ? ? ? context.draw(maskedImageRef, in: CGRect(x:0, y:0, width:self.size.width,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????height:self.size.height))
? ? ? ? ? ? ? ? let result = UIGraphicsGetImageFromCurrentImageContext()
? ? ? ? ? ? ? ? UIGraphicsEndImageContext()
? ? ? ? ? ? ? ? return result
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return nil? ?
}
}
2庇茫、將imageView旋轉(zhuǎn)壓縮;
壓縮這里的思路是將QRImageView先截圖再旋轉(zhuǎn)再上下壓縮height為1/2就好,這里貼上將view->UIImage就好螃成;
extension UIView {
? ? //將當(dāng)前視圖轉(zhuǎn)為UIImage
? ? func asImage() -> UIImage {
? ? ? ? let renderer = UIGraphicsImageRenderer(bounds: bounds)
? ? ? ? return renderer.image { rendererContext in layer.render(in: rendererContext.cgContext)
? ? ? ?}
? ? }
}