基于 Wolt 的 Swift (iOS) 实现,扩展了 UIImage
和 NSImage
以编码和解码模糊哈希。
截图
BlurHash 是一种图像占位符的紧凑表示形式。
从 BlurHash Repo 了解更多信息
每当您加载他们精心设计的屏幕时,您的设计师是否会哭泣,因为它充满了空盒子,因为所有图像尚未加载? 当您想通过尝试将小缩略图图像塞入您的数据以显示为占位符来解决此问题时,您的数据库工程师是否会哭泣?
BlurHash 将解决您的问题! 怎么样? 像这样
您还可以在 blurha.sh 上看到漂亮的示例并亲自尝试! 从 BlurHash Repo 了解更多信息
您可以通过两种方式使用此软件包
// Encoding
let blurHashStr = await UnifiedBlurHash.getBlurHashString(from: image)
// Decoding
let image = await UnifiedBlurHash.getUnifiedImage(from: imageString)
// 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))
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
只是 UIImage
或 NSImage
,具体取决于平台。
MIT