next-blurhash-previews 0.0.3-beta52 → 0.0.3-beta53
Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,9 @@
|
|
1
|
-
import { decode } from "blurhash/dist/esm";
|
1
|
+
//import { decode } from "blurhash/dist/esm";
|
2
2
|
|
3
3
|
type blurhash = { w: number; h: number; blurhash: string };
|
4
4
|
|
5
|
-
declare function __blurhashDecode(blurhash: string, width: number, height: any);
|
6
|
-
(window as any).__blurhashDecode = decode;
|
5
|
+
//declare function __blurhashDecode(blurhash: string, width: number, height: any);
|
6
|
+
//(window as any).__blurhashDecode = decode;
|
7
7
|
|
8
8
|
class ImageWithPreview extends HTMLElement {
|
9
9
|
sd: ShadowRoot;
|
@@ -98,6 +98,7 @@ function updateBlurHashPreview(canvasEl: HTMLCanvasElement, preview: blurhash) {
|
|
98
98
|
}
|
99
99
|
|
100
100
|
return;
|
101
|
+
// @ts-ignore
|
101
102
|
const pixels = decode(blurhash, width, height);
|
102
103
|
const ctx = canvasEl.getContext("2d")!;
|
103
104
|
const imageData = ctx.createImageData(width, height);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
import { decode } from "blurhash/dist/esm";
|
2
2
|
|
3
3
|
addEventListener("message", evt => {
|
4
4
|
console.log(evt);
|
@@ -9,7 +9,7 @@ addEventListener("message", evt => {
|
|
9
9
|
Promise.resolve(p).then(() => {
|
10
10
|
console.log("Encoding", blurhash);
|
11
11
|
const start = +new Date();
|
12
|
-
const pixels =
|
12
|
+
const pixels = decode(blurhash, width, height);
|
13
13
|
const ctx = canvas.getContext("2d");
|
14
14
|
const imageData = ctx.createImageData(width, height);
|
15
15
|
imageData.data.set(pixels);
|
package/imagePreviewBootstrap.js
CHANGED
@@ -4,11 +4,11 @@ export const imagePreviewBootstrap = createElement(
|
|
4
4
|
Fragment,
|
5
5
|
{},
|
6
6
|
createElement("script", {
|
7
|
-
dangerouslySetInnerHTML: { __html: `(() => { "use strict";
|
7
|
+
dangerouslySetInnerHTML: { __html: `(() => { "use strict";class a extends HTMLElement{sd;mo;static observedAttributes=["preview"];#s=!1;get#e(){return this.querySelector("img")}get#t(){return this.querySelector("canvas")}constructor(){super(),this.sd=this.attachShadow({mode:"open"}),this.sd.innerHTML='<slot name="preview"></slot>'}#i=()=>{if(this.#e&&this.#t)return this.mo?.disconnect(),this.#e.complete?this.#r():(this.#h(),this.#e.addEventListener("load",this.#r)),!0};connectedCallback(){this.#s=!0,this.#i()||(this.mo=new MutationObserver(this.#i),this.mo.observe(this,{subtree:!0,childList:!0,attributes:!1}))}#r=()=>{setTimeout(()=>{this.sd.innerHTML='<slot name="image"></slot>'},19e3)};attributeChangedCallback(e){this.#t&&e==="preview"&&this.#h()}#h(){if(!this.#s||!this.getAttribute("preview"))return;const e=JSON.parse(this.getAttribute("preview"));c(this.#t,e)}}customElements.get("blurhash-image")||customElements.define("blurhash-image",a);function c(t,e){const{w:s,h:i,blurhash:h}=e;t.width=s,t.height=i;{const n=new Blob([document.querySelector("#next-blurhash-worker-script").textContent],{type:"text/javascript"}),o=new Worker(window.URL.createObjectURL(n)),r=t.transferControlToOffscreen();o.postMessage({canvas:r,width:s,height:i,blurhash:h},[r])}} })();` },
|
8
8
|
}),
|
9
9
|
createElement("script", {
|
10
10
|
id: "next-blurhash-worker-script",
|
11
11
|
type: "javascript/worker",
|
12
|
-
dangerouslySetInnerHTML: { __html: `(() => { "use strict";
|
12
|
+
dangerouslySetInnerHTML: { __html: `(() => { "use strict";const v=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],u=t=>{let n=0;for(let e=0;e<t.length;e++){const o=t[e],c=v.indexOf(o);n=n*83+c}return n},x=t=>{let n=t/255;return n<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)},p=t=>{let n=Math.max(0,Math.min(1,t));return n<=.0031308?Math.round(n*12.92*255+.5):Math.round((1.055*Math.pow(n,.4166666666666667)-.055)*255+.5)},y=t=>t<0?-1:1,D=(t,n)=>y(t)*Math.pow(Math.abs(t),n);class R extends Error{constructor(n){super(n),this.name="ValidationError",this.message=n}}const I=t=>{if(!t||t.length<6)throw new R("The blurhash string must be at least 6 characters");const n=u(t[0]),e=Math.floor(n/9)+1,o=n%9+1;if(t.length!==4+2*o*e)throw new R(\`blurhash length mismatch: length is \${t.length} but it should be \${4+2*o*e}\`)},T=t=>{const n=t>>16,e=t>>8&255,o=t&255;return[x(n),x(e),x(o)]},A=(t,n)=>{const e=Math.floor(t/361),o=Math.floor(t/19)%19,c=t%19;return[D((e-9)/9,2)*n,D((o-9)/9,2)*n,D((c-9)/9,2)*n]},V=(t,n,e,o)=>{I(t),o=o|1;const c=u(t[0]),d=Math.floor(c/9)+1,r=c%9+1,h=(u(t[1])+1)/166,i=new Array(r*d);for(let s=0;s<i.length;s++)if(s===0){const a=u(t.substring(2,6));i[s]=T(a)}else{const a=u(t.substring(4+s*2,6+s*2));i[s]=A(a,h*o)}const l=n*4,g=new Uint8ClampedArray(l*e);for(let s=0;s<e;s++)for(let a=0;a<n;a++){let B=0,E=0,P=0;for(let m=0;m<d;m++)for(let M=0;M<r;M++){const f=Math.cos(Math.PI*a*M/n)*Math.cos(Math.PI*s*m/e);let w=i[M+m*r];B+=w[0]*f,E+=w[1]*f,P+=w[2]*f}let q=p(B),C=p(E),G=p(P);g[4*a+0+s*l]=q,g[4*a+1+s*l]=C,g[4*a+2+s*l]=G,g[4*a+3+s*l]=255}return g};var $=V;addEventListener("message",t=>{console.log(t);const{canvas:n,width:e,height:o,blurhash:c}=t.data,d=new Promise(r=>setTimeout(r,5e3));Promise.resolve(d).then(()=>{console.log("Encoding",c);const r=+new Date,b=$(c,e,o),h=n.getContext("2d"),i=h.createImageData(e,o);i.data.set(b),h.putImageData(i,0,0);const l=+new Date;console.log("Done Encoding",c,l-r)})}); })();` },
|
13
13
|
})
|
14
14
|
);
|