feat: blurhash

This commit is contained in:
codytseng 2025-01-08 16:54:10 +08:00
parent 91977d6495
commit dacaa4a75d
15 changed files with 155 additions and 50 deletions

View file

@ -1,3 +1,6 @@
import { TImageInfo } from '@/types'
import { isBlurhashValid } from 'blurhash'
export function tagNameEquals(tagName: string) {
return (tag: string[]) => tag[0] === tagName
}
@ -14,9 +17,28 @@ export function isMentionETag([tagName, , , marker]: string[]) {
return tagName === 'e' && marker === 'mention'
}
export function extractImetaUrlFromTag(tag: string[]) {
export function extractImageInfoFromTag(tag: string[]): TImageInfo | null {
if (tag[0] !== 'imeta') return null
const urlItem = tag.find((item) => item.startsWith('url '))
const url = urlItem?.slice(4)
return url || null
if (!url) return null
const image: TImageInfo = { url }
const blurHashItem = tag.find((item) => item.startsWith('blurhash '))
const blurHash = blurHashItem?.slice(9)
if (blurHash) {
const validRes = isBlurhashValid(blurHash)
if (validRes.result) {
image.blurHash = blurHash
}
}
const dimItem = tag.find((item) => item.startsWith('dim '))
const dim = dimItem?.slice(4)
if (dim) {
const [width, height] = dim.split('x').map(Number)
if (width && height) {
image.dim = { width, height }
}
}
return image
}