diff --git a/package.json b/package.json index 90b3fedda..712b9adbd 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@vue/compat": "3.2.26", "@vueuse/core": "7.3.0", "@vueuse/router": "7.3.0", + "blurhash": "^1.1.4", "bulma-css-variables": "0.9.33", "camel-case": "4.1.2", "codemirror": "5.64.0", diff --git a/src/helpers/getBlobFromBlurHash.ts b/src/helpers/getBlobFromBlurHash.ts new file mode 100644 index 000000000..d8134730f --- /dev/null +++ b/src/helpers/getBlobFromBlurHash.ts @@ -0,0 +1,31 @@ +import {decode} from 'blurhash' + +export async function getBlobFromBlurHash(blurHash: string): Promise { + if (blurHash === '') { + return null + } + + const pixels = decode(blurHash, 32, 32) + const canvas = document.createElement('canvas') + canvas.width = 32 + canvas.height = 32 + const ctx = canvas.getContext('2d') + if (ctx === null) { + return null + } + + const imageData = ctx.createImageData(32, 32) + imageData.data.set(pixels) + ctx.putImageData(imageData, 0, 0) + + return new Promise((resolve, reject) => { + canvas.toBlob(b => { + if (b === null) { + reject(b) + return + } + + resolve(b) + }) + }) +} diff --git a/src/models/backgroundImage.js b/src/models/backgroundImage.js index 78bc29c30..70e441225 100644 --- a/src/models/backgroundImage.js +++ b/src/models/backgroundImage.js @@ -7,6 +7,7 @@ export default class BackgroundImageModel extends AbstractModel { url: '', thumb: '', info: {}, + blurHash: '', } } } \ No newline at end of file diff --git a/src/views/list/settings/background.vue b/src/views/list/settings/background.vue index 197fa0013..69708c92f 100644 --- a/src/views/list/settings/background.vue +++ b/src/views/list/settings/background.vue @@ -35,16 +35,21 @@ v-model="backgroundSearchTerm" />
- + + + + {{ im.info.authorName }} @@ -65,6 +70,9 @@