UIImage+Placeholder.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // UIImage+Placeholder.swift
  3. // SwiftBilibili
  4. //
  5. // Created by 罗文 on 2021/1/19.
  6. // Copyright © 2021年 罗文. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftyImage
  10. extension UIImage {
  11. class func placeholderImage(bgColor:UIColor = .db_gray,bgSize:CGSize) -> UIImage? {
  12. if bgSize == .zero {
  13. return nil
  14. }
  15. let bgImage = UIImage.size(bgSize).color(bgColor).image
  16. let centerImage = NYImage.Home.default_img!
  17. let placeholderImage = bgImage + centerImage
  18. return placeholderImage
  19. }
  20. class func resizeImage(image:UIImage?,newSize:CGSize) -> UIImage? {
  21. guard let image = image else {
  22. return nil
  23. }
  24. UIGraphicsBeginImageContext(newSize)
  25. image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
  26. let newImage = UIGraphicsGetImageFromCurrentImageContext()
  27. UIGraphicsEndImageContext()
  28. return newImage
  29. }
  30. class func generateQRCode(from jsonString: String, size: CGSize) -> UIImage? {
  31. // 将 JSON 字符串转换为二进制数据
  32. guard let jsonData = jsonString.data(using: .utf8) else {
  33. return nil
  34. }
  35. // 创建 CIFilter 对象,使用 "CIQRCodeGenerator" 过滤器生成二维码
  36. guard let filter = CIFilter(name: "CIQRCodeGenerator") else {
  37. return nil
  38. }
  39. // 设置输入数据
  40. filter.setValue(jsonData, forKey: "inputMessage")
  41. // 设置纠错级别,默认为 "L" (低)
  42. filter.setValue("M", forKey: "inputCorrectionLevel")
  43. // 获取生成的 CIImage
  44. guard let ciImage = filter.outputImage else {
  45. return nil
  46. }
  47. // 对 CIImage 进行缩放,以适应目标大小
  48. let scaleX = size.width / ciImage.extent.size.width
  49. let scaleY = size.height / ciImage.extent.size.height
  50. let transformedImage = ciImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))
  51. // 将 CIImage 转换为 UIImage
  52. let context = CIContext()
  53. guard let cgImage = context.createCGImage(transformedImage, from: transformedImage.extent) else {
  54. return nil
  55. }
  56. let qrCodeImage = UIImage(cgImage: cgImage)
  57. return qrCodeImage
  58. }
  59. }