UnifiedBlurHash

基于 Wolt 的 Swift (iOS) 实现,扩展了 UIImageNSImage 以编码和解码模糊哈希。

基于 Mortenjust 的 macOS 实现

截图

Screenshot

关于 BlurHash

BlurHash 是一种图像占位符的紧凑表示形式。

BlurHash Repo 了解更多信息

为什么要使用它?

每当您加载他们精心设计的屏幕时,您的设计师是否会哭泣,因为它充满了空盒子,因为所有图像尚未加载? 当您想通过尝试将小缩略图图像塞入您的数据以显示为占位符来解决此问题时,您的数据库工程师是否会哭泣?

BlurHash 将解决您的问题! 怎么样? 像这样

WhyBlurHash

您还可以在 blurha.sh 上看到漂亮的示例并亲自尝试! 从 BlurHash Repo 了解更多信息

用法

您可以通过两种方式使用此软件包

  1. 使用异步助手
// Encoding
let blurHashStr = await UnifiedBlurHash.getBlurHashString(from: image)

// Decoding
let image = await UnifiedBlurHash.getUnifiedImage(from: imageString)
  1. 直接使用方法
// scale down for performance then encode
let blurHashStr = unifiedImage.small?.blurHash(numberOfComponents: (4,4))
    
// Decoding. Use small size and resize in UI for performance
let image = UnifiedImage(blurHash: blurHashString, size: .init(width: 32, height: 32))
    

SwiftUI 示例

import SwiftUI
import UnifiedBlurHash

struct ContentView: View {
    @State private var imageString = "LVN^Odxa?WNa-;WB£,WBs;baR*af"
    @State private var image: UnifiedImage? = nil
    
    var body: some View {
        VStack(spacing: 20) {
            
            Button("Encode", action: encode)

            Button("Decode", action: decode)

            if image != nil {
                Image(unifiedImage: image!)
                    .resizable()
            }
        }
        .padding(.horizontal)
    }

    private func encode() {
        Task {
            let image = UnifiedImage(named: "sunflower")
            guard let image = image else {
                return
            }
            let str = await UnifiedBlurHash.getBlurHashString(from: image)
            guard let str = str else {
                return
            }
            DispatchQueue.main.async {
                self.imageString = str
            }
        }
    }

    private func decode() {
        Task {
            let image = await UnifiedBlurHash.getUnifiedImage(from: imageString)
            guard let image = image else {
                return
            }
            DispatchQueue.main.async {
                self.image = image
            }
        }
    }
}

import SwiftUI
import UnifiedBlurHash

struct ContentView: View {
    var blurHash: String = "LVN^Odxa?WNa-;WB£,WBs;baR*af"

    var body: some View {
        Image(blurHash: blurHash)?
            .resizable()
    }
}

在底层,UnifiedImage 只是 UIImageNSImage,具体取决于平台。

许可证

MIT