@etu-wiki/sharp-iiif-shims 0.0.44 → 0.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -22
- package/dist/index.js +1 -1
- package/package.json +3 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1 @@
|
|
|
1
|
-
import sharp from 'sharp';
|
|
2
|
-
import IiifImageShims from '@etu-wiki/iiif-image-shims';
|
|
3
|
-
type Dims = {
|
|
4
|
-
width: number;
|
|
5
|
-
height: number;
|
|
6
|
-
};
|
|
7
|
-
export default class SharpIiifImageShims extends IiifImageShims {
|
|
8
|
-
pipeline: sharp.Sharp;
|
|
9
|
-
version: string;
|
|
10
|
-
level: string;
|
|
11
|
-
tileWidth: number;
|
|
12
|
-
tileHeight: number;
|
|
13
|
-
constructor(version: string, level: string, maxArea?: number, maxWidth?: number, maxHeight?: number, tileWidth?: number, tileHeight?: number);
|
|
14
|
-
private regionImpl;
|
|
15
|
-
private sizeImpl;
|
|
16
|
-
private rotationImpl;
|
|
17
|
-
private qualityImpl;
|
|
18
|
-
private formatImpl;
|
|
19
|
-
iiifTransform(path: string, metadata: any): sharp.Sharp | null;
|
|
20
|
-
generateIiifImage(path: string, sourceImage: any, scaleLimit?: number): Promise<any>;
|
|
21
|
-
generateImageInfo(id: string, dims: Dims): any;
|
|
22
|
-
}
|
|
23
1
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ai=Object.create;var x=Object.defineProperty;var hi=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var pi=Object.getPrototypeOf,gi=Object.prototype.hasOwnProperty;var ci=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),mi=(t,e)=>{for(var i in e)x(t,i,{get:e[i],enumerable:!0})},Q=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of li(e))!gi.call(t,s)&&s!==i&&x(t,s,{get:()=>e[s],enumerable:!(r=hi(e,s))||r.enumerable});return t};var U=(t,e,i)=>(i=t!=null?ai(pi(t)):{},Q(e||!t||!t.__esModule?x(i,"default",{value:t,enumerable:!0}):i,t)),ui=t=>Q(x({},"__esModule",{value:!0}),t);var V=ci((Bi,K)=>{"use strict";var O=Object.defineProperty,di=Object.getOwnPropertyDescriptor,fi=Object.getOwnPropertyNames,yi=Object.prototype.hasOwnProperty,zi=(t,e)=>{for(var i in e)O(t,i,{get:e[i],enumerable:!0})},wi=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fi(e))!yi.call(t,s)&&s!==i&&O(t,s,{get:()=>e[s],enumerable:!(r=di(e,s))||r.enumerable});return t},vi=t=>wi(O({},"__esModule",{value:!0}),t),G={};zi(G,{default:()=>bi});K.exports=vi(G);var o="[1-9][0-9]*",Y="[0-9]*",u="(?=.*[1-9])\\d+(\\.\\d+)?",N="\\d+(\\.\\d+)?",H=(t=>(t.jpg="image/jpeg",t.jpeg="image/jpeg",t.png="image/png",t.webp="image/webp",t.tif="image/tiff",t.tiff="image/tiff",t.gif="image/gif",t.jp2="image/jp2",t.pdf="application/pdf",t))(H||{}),z={version:["1.0","1.1","2.0","2.1","3.0"],level:["0","1","2"],region:["full","square",`${Y},${Y},${o},${o}`,`pct:${N},${N},${u},${u}`],rotation:`!?${N}`,quality:["color","gray","bitonal","default","native","grey"],format:["jpg","png","webp","tif","gif","jp2","pdf"],size:[""]},$i={1:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],1.1:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],2:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],2.1:["full","max",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],3:["max",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`,"\\^max",`\\^${o},`,`\\^,${o}`,`\\^pct:${u}`,`\\^${o},${o}`,`\\^!${o},${o}`]},I=/^pct:([\d,]+)/,bi=class{constructor(t,e,i,r,s,a,n){this.version=t,this.level=e,this.maxArea=i,this.maxWidth=r,this.maxHeight=s,this.tileWidth=a,this.tileHeight=n,this.validate("version",t),this.validate("level",e),z.size=$i[Number(t)]}validator(t){var e=z[t];return e instanceof Array&&(e=e.join("|")),new RegExp("^("+e+")$")}validate(t,e){if(!this.validator(t).test(e))throw Error(`invalid IIIF url ${t}: ${e}`);return!0}normalizeRegionParams(t,e){if(this.validate("region",t),t==="full")return null;if(t==="square")return this._regionSquare(e);if(I.test(t))return this._regionPct(t.match(I)[0],e);{let i=t.split(",").map(r=>Number(r));return this._regionXYWH(i,e)}}_regionSquare(t){let e,i,r=t.width,s=t.height;if(r!==s){let a=Math.min(r,s),n=Math.abs(Math.floor((r-s)/2));return r>s?(e=n,i=0):(e=0,i=n),this._regionXYWH([e,i,a,a],t)}return null}_regionPct(t,e){let i=t.split(",").map((r,s)=>{let a=Number(r)/100;return s===0||s===2?Math.round(e.width*a):s===1||s===3?Math.round(e.height*a):null});return this._regionXYWH(i,e)}_regionXYWH(t,e){let i=e.width,r=e.height,[s,a,n,h]=t;return s+n>i&&(n=i-s),a+h>r&&(h=r-a),{x:s,y:a,w:n,h}}normalizeSizeParams(t,e){let i=t,r=e.width,s=e.height;this.validate("size",i);let a=!1;i.charAt(0)==="^"&&(a=!0,i=i.substring(1));let n=null;if(i==="full"||(i==="max"?n=this._sizeMaxScale(e):I.test(i)?n=this._sizePctScale(i.match(I)[0]):i.charAt(0)==="!"&&(i=i.substring(1),n=this._sizeBangScale(i,a,e)),n===1))return null;if(n){let h=Math.round(r*n),l=Math.round(s*n);return this._sizeWH(`${h},${l}`,a,e)}else return this._sizeWH(i,a,e)}_sizeBangScale(t,e,i){let r=i.width,s=i.height,[a,n]=t.split(",").map(l=>l===""?null:Number(l)),h=Math.min(a/r,n/s);if(a>r&&n>s&&!e)throw Error("should not upscale without ^");return h}_sizeMaxScale(t){let e=t.width,i=t.height,r=1;return this.maxArea&&this.maxArea<e*i&&(r=Math.sqrt(this.maxArea/(e*i))),this.maxWidth&&this.maxWidth<e&&(r=Math.min(r,this.maxWidth/e)),this.maxHeight&&this.maxHeight<i&&(r=Math.min(r,this.maxHeight/i)),r}_sizePctScale(t){return Number(t)/100}_sizeWH(t,e,i){let r=i.width,s=i.height,[a,n]=t.split(",").map(h=>h===""?null:Number(h));if(a?n||(n=Math.round(s*a/r)):a=Math.round(r*n/s),(a>r||n>s)&&!e)throw Error("should not upscale without ^");return{width:a,height:n}}normalizeRotationParams(t){this.validate("rotation",t);let e=!1;if(t==="0")return null;t[0]==="!"&&(e=!0);let i=Number(t.replace(/^!/,""));return{isMirror:e,degree:i}}normalizeQualityParams(t){return this.validate("quality",t),t==="native"||t==="default"?null:t}normalizeFormatParams(t,e){if((this.version==="1.0"||this.version==="1.1"||this.version==="2.0"||this.version==="2.1")&&!t)return"png";this.validate("format",t);let i=H[t],r=H[e];return i===r?null:t}getContentType(t){return H[t]}generateImageInfoTemp(t,e){let i={},r={};i.info=r;let s=this.version;return s==="1.0"?(r.identifier=t,r.width=e.width,r.height=e.height,r.scale_factors=this.factors(e),r.tile_width=this.tileWidth,r.tile_height=this.tileHeight,r.formats=z.format,r.qualities=z.quality,r.profile=this.uriPattern("compliance"),i.contentType="application/json",i.body=JSON.stringify(r)):(s==="1.1"?(r["@context"]=this.uriPattern("context"),r["@id"]=t,r.width=e.width,r.height=e.height,r.scale_factors=this.factors(e),r.tile_width=this.tileWidth,r.tile_height=this.tileHeight,r.formats=z.format,r.qualities=z.quality,r.profile=this.uriPattern("compliance")):s==="2.0"||s==="2.1"?(r["@context"]=this.uriPattern("context"),r["@id"]=t,r.protocol="http://iiif.io/api/image",r.width=e.width,r.height=e.height,this.level==="0"?r.sizes=this.sizes(e):r.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],r.profile=[this.uriPattern("compliance")]):s==="3.0"&&(r["@context"]=[this.uriPattern("context")],r.id=t,r.type="ImageService3",r.protocol="http://iiif.io/api/image",r.width=e.width,r.height=e.height,this.level==="0"?r.sizes=this.sizes(e):r.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],r.profile=this.uriPattern("compliance")),i.contentType="application/ld+json"),i}factors(t){let e=1,i=[1],r=t.width,s=t.height;for(;!(this.tileWidth*e>r&&this.tileHeight*e>s);)e*=2,i.push(e);return i}uriPattern(t){let e="",i="";return this.version==="1.0"?e=`http://library.stanford.edu/iiif/image-api/compliance.html#level${this.level}`:this.version==="1.1"?(e=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level${this.level}`,i="http://library.stanford.edu/iiif/image-api/1.1/context.json"):this.version==="2.0"||this.version==="2.1"?(e=`http://iiif.io/api/image/2/level${this.level}.json`,i="http://iiif.io/api/image/2/context.json"):this.version==="3.0"&&(e=`level${this.level}`,i="http://iiif.io/api/image/3/context.json"),t==="compliance"?e:t==="context"?i:""}sizes(t){return[{width:t.width,height:t.height}]}}});var Wi={};mi(Wi,{default:()=>W});module.exports=ui(Wi);var w=U(require("sharp")),ti=U(V()),Pi=1e8,Z=1e4,ii=1e4,xi=512,Ii=512,Hi={2:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByWhListed","sizeByForcedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"],2.1:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByConfinedWh","sizeByDistortedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeByWhListed","sizeByForcedWh"],3:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling"]},W=class extends ti.default{constructor(i,r,s=Pi,a=Z,n=ii,h=xi,l=Ii){super(i,r,s,a,n,h,l)}regionImpl(i){console.log("region: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.extract({left:i.x,top:i.y,width:i.w,height:i.h}))}sizeImpl(i){console.log("size: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.resize({...i,fit:"fill"}))}rotationImpl(i){console.log("rotation: "+JSON.stringify(i)),i&&(i.isMirror&&(this.pipeline=this.pipeline.flop()),this.pipeline=this.pipeline.rotate(i.degree))}qualityImpl(i){console.log("quality: "+JSON.stringify(i)),i&&(i==="color"?this.pipeline=this.pipeline.toColorspace("srgb"):i==="gray"||i==="grey"?this.pipeline=this.pipeline.grayscale():i==="bitonal"&&(this.pipeline=this.pipeline.threshold()))}formatImpl(i){console.log("format: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.toFormat(i))}iiifTransform(i,r){let s={width:r.width,height:r.height},a=(0,w.default)(),n=i.split("/"),h=n.pop(),l=h.split(".")[0],v=h.split(".")[1],M=n.pop(),B=n.pop(),_=n.pop();this.pipeline=a;let p=super.normalizeRegionParams(_,s);this.regionImpl(p);let g=super.normalizeSizeParams(B,{width:p?p.w:s.width,height:p?p.h:s.height});this.sizeImpl(g);let d=super.normalizeRotationParams(M);this.rotationImpl(d);let c=super.normalizeQualityParams(l);this.qualityImpl(c);let m=super.normalizeFormatParams(v,r.format);return this.formatImpl(m),p||g||d||c||m?this.pipeline:(console.log("skip iiif transform"),null)}async generateIiifImage(i,r,s=256){let a=(0,w.default)(r,{limitInputPixels:!1,sequentialRead:!0}),n=i.split("/"),h=n.pop(),l=h.split(".")[0],v=h.split(".")[1],M=n.pop(),B=n.pop(),_=n.pop(),p=await a.metadata(),g={width:p.width,height:p.height},d={};this.pipeline=a;let c=super.normalizeRegionParams(_,g);this.regionImpl(c);let m=super.normalizeSizeParams(B,{width:c?c.w:g.width,height:c?c.h:g.height});this.sizeImpl(m);let{x:ei,y:ri,w:j,h:S}=c||{x:0,y:0,w:g.width,h:g.height},{width:q,height:R}=m||{width:g.width,height:g.height};if(j*S>q*R*s&&q<Z&&R<ii&&p.pages&&p.pages>1){console.log("thumbnail");let f=Math.max(q/j,R/S),[T,A,$,b]=[Math.round(ei*f),Math.round(ri*f),Math.round(j*f),Math.round(S*f)],[E,k]=[Math.round(g.width*f),Math.round(g.height*f)],P=p.pages-1,D=await(0,w.default)(r,{limitInputPixels:!1,page:P,sequentialRead:!0}).metadata(),X=D.width,J=D.height;for(;J<k||X<E;)J*=2,X*=2,P--;console.log("selectedPage: "+P);let F={width:E,height:k,fastShrinkOnLoad:!1},oi=await(0,w.default)(r,{limitInputPixels:!1,page:P,sequentialRead:!0}).resize(F).toBuffer();this.pipeline=(0,w.default)(oi);let y=await this.pipeline.metadata();A+b>y.height&&(b=y.height-A,console.log("adjested sh: "+b)),T+$>y.width&&($=y.width-T,console.log("adjusted sw: "+$));let C={x:T,y:A,w:$,h:b};this.regionImpl(C),this.sizeImpl(m),console.log(y.width,y.height,F.width,F.height,C,m)}let si=super.normalizeRotationParams(M);this.rotationImpl(si);let ni=super.normalizeQualityParams(l);this.qualityImpl(ni),console.log(v,p.format);let L=super.normalizeFormatParams(v,p.format);return this.formatImpl(L),d.body=this.pipeline,d.contentType=super.getContentType(L),d}generateImageInfo(i,r){let s=this.version,a=this.level,n=super.generateImageInfoTemp(i,r),h=n.info;if((s==="2.0"||s==="2.1")&&(h.profile=[super.uriPattern("compliance")],a==="2")){let l={};l.formats=["jpg","png","webp","tif","jp2","pdf"],l.qualities=["color","gray","bitonal","default","native","grey"],l.supports=Hi[Number(s)],h.profile.push(l)}return s==="3.0"&&(h.extraFormats=["webp"],h.preferredFormats=["webp"]),n}};
|
|
1
|
+
"use strict";var ai=Object.create;var Q=Object.defineProperty;var hi=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var pi=Object.getPrototypeOf,gi=Object.prototype.hasOwnProperty;var ci=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var mi=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of li(e))!gi.call(t,s)&&s!==i&&Q(t,s,{get:()=>e[s],enumerable:!(r=hi(e,s))||r.enumerable});return t};var U=(t,e,i)=>(i=t!=null?ai(pi(t)):{},mi(e||!t||!t.__esModule?Q(i,"default",{value:t,enumerable:!0}):i,t));var V=ci((Hi,N)=>{"use strict";var F=Object.defineProperty,ui=Object.getOwnPropertyDescriptor,di=Object.getOwnPropertyNames,fi=Object.prototype.hasOwnProperty,yi=(t,e)=>{for(var i in e)F(t,i,{get:e[i],enumerable:!0})},zi=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of di(e))!fi.call(t,s)&&s!==i&&F(t,s,{get:()=>e[s],enumerable:!(r=ui(e,s))||r.enumerable});return t},wi=t=>zi(F({},"__esModule",{value:!0}),t),G={};yi(G,{default:()=>K});N.exports=wi(G);var o="[1-9][0-9]*",Y="[0-9]*",u="(?=.*[1-9])\\d+(\\.\\d+)?",A="\\d+(\\.\\d+)?",I=(t=>(t.jpg="image/jpeg",t.jpeg="image/jpeg",t.png="image/png",t.webp="image/webp",t.tif="image/tiff",t.tiff="image/tiff",t.gif="image/gif",t.jp2="image/jp2",t.pdf="application/pdf",t))(I||{}),z={version:["1.0","1.1","2.0","2.1","3.0"],level:["0","1","2"],region:["full","square",`${Y},${Y},${o},${o}`,`pct:${A},${A},${u},${u}`],rotation:`!?${A}`,quality:["color","gray","bitonal","default","native","grey"],format:["jpg","png","webp","tif","gif","jp2","pdf"],size:[""]},vi={1:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],1.1:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],2:["full",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],2.1:["full","max",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`],3:["max",`${o},`,`,${o}`,`pct:${u}`,`${o},${o}`,`!${o},${o}`,"\\^max",`\\^${o},`,`\\^,${o}`,`\\^pct:${u}`,`\\^${o},${o}`,`\\^!${o},${o}`]},P=/^pct:([\d,]+)/,K=class{constructor(t,e,i,r,s,a,n){this.version=t,this.level=e,this.maxArea=i,this.maxWidth=r,this.maxHeight=s,this.tileWidth=a,this.tileHeight=n,this.validate("version",t),this.validate("level",e),z.size=vi[Number(t)]}validator(t){var e=z[t];return e instanceof Array&&(e=e.join("|")),new RegExp("^("+e+")$")}validate(t,e){if(!this.validator(t).test(e))throw Error(`invalid IIIF url ${t}: ${e}`);return!0}normalizeRegionParams(t,e){if(this.validate("region",t),t==="full")return null;if(t==="square")return this._regionSquare(e);if(P.test(t))return this._regionPct(t.match(P)[0],e);{let i=t.split(",").map(r=>Number(r));return this._regionXYWH(i,e)}}_regionSquare(t){let e,i,r=t.width,s=t.height;if(r!==s){let a=Math.min(r,s),n=Math.abs(Math.floor((r-s)/2));return r>s?(e=n,i=0):(e=0,i=n),this._regionXYWH([e,i,a,a],t)}return null}_regionPct(t,e){let i=t.split(",").map((r,s)=>{let a=Number(r)/100;return s===0||s===2?Math.round(e.width*a):s===1||s===3?Math.round(e.height*a):null});return this._regionXYWH(i,e)}_regionXYWH(t,e){let i=e.width,r=e.height,[s,a,n,h]=t;return s+n>i&&(n=i-s),a+h>r&&(h=r-a),{x:s,y:a,w:n,h}}normalizeSizeParams(t,e){let i=t,r=e.width,s=e.height;this.validate("size",i);let a=!1;i.charAt(0)==="^"&&(a=!0,i=i.substring(1));let n=null;if(i==="full"||(i==="max"?n=this._sizeMaxScale(e):P.test(i)?n=this._sizePctScale(i.match(P)[0]):i.charAt(0)==="!"&&(i=i.substring(1),n=this._sizeBangScale(i,a,e)),n===1))return null;if(n){let h=Math.round(r*n),l=Math.round(s*n);return this._sizeWH(`${h},${l}`,a,e)}else return this._sizeWH(i,a,e)}_sizeBangScale(t,e,i){let r=i.width,s=i.height,[a,n]=t.split(",").map(l=>l===""?null:Number(l)),h=Math.min(a/r,n/s);if(a>r&&n>s&&!e)throw Error("should not upscale without ^");return h}_sizeMaxScale(t){let e=t.width,i=t.height,r=1;return this.maxArea&&this.maxArea<e*i&&(r=Math.sqrt(this.maxArea/(e*i))),this.maxWidth&&this.maxWidth<e&&(r=Math.min(r,this.maxWidth/e)),this.maxHeight&&this.maxHeight<i&&(r=Math.min(r,this.maxHeight/i)),r}_sizePctScale(t){return Number(t)/100}_sizeWH(t,e,i){let r=i.width,s=i.height,[a,n]=t.split(",").map(h=>h===""?null:Number(h));if(a?n||(n=Math.round(s*a/r)):a=Math.round(r*n/s),(a>r||n>s)&&!e)throw Error("should not upscale without ^");return{width:a,height:n}}normalizeRotationParams(t){this.validate("rotation",t);let e=!1;if(t==="0")return null;t[0]==="!"&&(e=!0);let i=Number(t.replace(/^!/,""));return{isMirror:e,degree:i}}normalizeQualityParams(t){return this.validate("quality",t),t==="native"||t==="default"?null:t}normalizeFormatParams(t,e){if((this.version==="1.0"||this.version==="1.1"||this.version==="2.0"||this.version==="2.1")&&!t)return"png";this.validate("format",t);let i=I[t],r=I[e];return i===r?null:t}getContentType(t){return I[t]}generateImageInfoTemp(t,e){let i={},r={};i.info=r;let s=this.version;return s==="1.0"?(r.identifier=t,r.width=e.width,r.height=e.height,r.scale_factors=this.factors(e),r.tile_width=this.tileWidth,r.tile_height=this.tileHeight,r.formats=z.format,r.qualities=z.quality,r.profile=this.uriPattern("compliance"),i.contentType="application/json",i.body=JSON.stringify(r)):(s==="1.1"?(r["@context"]=this.uriPattern("context"),r["@id"]=t,r.width=e.width,r.height=e.height,r.scale_factors=this.factors(e),r.tile_width=this.tileWidth,r.tile_height=this.tileHeight,r.formats=z.format,r.qualities=z.quality,r.profile=this.uriPattern("compliance")):s==="2.0"||s==="2.1"?(r["@context"]=this.uriPattern("context"),r["@id"]=t,r.protocol="http://iiif.io/api/image",r.width=e.width,r.height=e.height,this.level==="0"?r.sizes=this.sizes(e):r.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],r.profile=[this.uriPattern("compliance")]):s==="3.0"&&(r["@context"]=[this.uriPattern("context")],r.id=t,r.type="ImageService3",r.protocol="http://iiif.io/api/image",r.width=e.width,r.height=e.height,this.level==="0"?r.sizes=this.sizes(e):r.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],r.profile=this.uriPattern("compliance")),i.contentType="application/ld+json"),i}factors(t){let e=1,i=[1],r=t.width,s=t.height;for(;!(this.tileWidth*e>r&&this.tileHeight*e>s);)e*=2,i.push(e);return i}uriPattern(t){let e="",i="";return this.version==="1.0"?e=`http://library.stanford.edu/iiif/image-api/compliance.html#level${this.level}`:this.version==="1.1"?(e=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level${this.level}`,i="http://library.stanford.edu/iiif/image-api/1.1/context.json"):this.version==="2.0"||this.version==="2.1"?(e=`http://iiif.io/api/image/2/level${this.level}.json`,i="http://iiif.io/api/image/2/context.json"):this.version==="3.0"&&(e=`level${this.level}`,i="http://iiif.io/api/image/3/context.json"),t==="compliance"?e:t==="context"?i:""}sizes(t){return[{width:t.width,height:t.height}]}};N.exports=K});var w=U(require("sharp")),ti=U(V()),$i=1e8,Z=1e4,ii=1e4,bi=512,xi=512,Pi={2:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByWhListed","sizeByForcedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"],2.1:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByConfinedWh","sizeByDistortedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeByWhListed","sizeByForcedWh"],3:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling"]},O=class extends ti.default{constructor(i,r,s=$i,a=Z,n=ii,h=bi,l=xi){super(i,r,s,a,n,h,l)}regionImpl(i){console.log("region: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.extract({left:i.x,top:i.y,width:i.w,height:i.h}))}sizeImpl(i){console.log("size: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.resize({...i,fit:"fill"}))}rotationImpl(i){console.log("rotation: "+JSON.stringify(i)),i&&(i.isMirror&&(this.pipeline=this.pipeline.flop()),this.pipeline=this.pipeline.rotate(i.degree))}qualityImpl(i){console.log("quality: "+JSON.stringify(i)),i&&(i==="color"?this.pipeline=this.pipeline.toColorspace("srgb"):i==="gray"||i==="grey"?this.pipeline=this.pipeline.grayscale():i==="bitonal"&&(this.pipeline=this.pipeline.threshold()))}formatImpl(i){console.log("format: "+JSON.stringify(i)),i&&(this.pipeline=this.pipeline.toFormat(i))}iiifTransform(i,r){let s={width:r.width,height:r.height},a=(0,w.default)(),n=i.split("/"),h=n.pop(),l=h.split(".")[0],v=h.split(".")[1],H=n.pop(),W=n.pop(),M=n.pop();this.pipeline=a;let p=super.normalizeRegionParams(M,s);this.regionImpl(p);let g=super.normalizeSizeParams(W,{width:p?p.w:s.width,height:p?p.h:s.height});this.sizeImpl(g);let d=super.normalizeRotationParams(H);this.rotationImpl(d);let c=super.normalizeQualityParams(l);this.qualityImpl(c);let m=super.normalizeFormatParams(v,r.format);return this.formatImpl(m),p||g||d||c||m?this.pipeline:(console.log("skip iiif transform"),null)}async generateIiifImage(i,r,s=256){let a=(0,w.default)(r,{limitInputPixels:!1,sequentialRead:!0}),n=i.split("/"),h=n.pop(),l=h.split(".")[0],v=h.split(".")[1],H=n.pop(),W=n.pop(),M=n.pop(),p=await a.metadata(),g={width:p.width,height:p.height},d={};this.pipeline=a;let c=super.normalizeRegionParams(M,g);this.regionImpl(c);let m=super.normalizeSizeParams(W,{width:c?c.w:g.width,height:c?c.h:g.height});this.sizeImpl(m);let{x:ei,y:ri,w:B,h:_}=c||{x:0,y:0,w:g.width,h:g.height},{width:j,height:S}=m||{width:g.width,height:g.height};if(B*_>j*S*s&&j<Z&&S<ii&&p.pages&&p.pages>1){console.log("thumbnail");let f=Math.max(j/B,S/_),[q,R,$,b]=[Math.round(ei*f),Math.round(ri*f),Math.round(B*f),Math.round(_*f)],[E,k]=[Math.round(g.width*f),Math.round(g.height*f)],x=p.pages-1,D=await(0,w.default)(r,{limitInputPixels:!1,page:x,sequentialRead:!0}).metadata(),X=D.width,J=D.height;for(;J<k||X<E;)J*=2,X*=2,x--;console.log("selectedPage: "+x);let T={width:E,height:k,fastShrinkOnLoad:!1},oi=await(0,w.default)(r,{limitInputPixels:!1,page:x,sequentialRead:!0}).resize(T).toBuffer();this.pipeline=(0,w.default)(oi);let y=await this.pipeline.metadata();R+b>y.height&&(b=y.height-R,console.log("adjested sh: "+b)),q+$>y.width&&($=y.width-q,console.log("adjusted sw: "+$));let C={x:q,y:R,w:$,h:b};this.regionImpl(C),this.sizeImpl(m),console.log(y.width,y.height,T.width,T.height,C,m)}let si=super.normalizeRotationParams(H);this.rotationImpl(si);let ni=super.normalizeQualityParams(l);this.qualityImpl(ni),console.log(v,p.format);let L=super.normalizeFormatParams(v,p.format);return this.formatImpl(L),d.body=this.pipeline,d.contentType=super.getContentType(L),d}generateImageInfo(i,r){let s=this.version,a=this.level,n=super.generateImageInfoTemp(i,r),h=n.info;if((s==="2.0"||s==="2.1")&&(h.profile=[super.uriPattern("compliance")],a==="2")){let l={};l.formats=["jpg","png","webp","tif","jp2","pdf"],l.qualities=["color","gray","bitonal","default","native","grey"],l.supports=Pi[Number(s)],h.profile.push(l)}return s==="3.0"&&(h.extraFormats=["webp"],h.preferredFormats=["webp"]),n}};module.exports=O;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etu-wiki/sharp-iiif-shims",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"@babel/preset-env": "^7.21.4",
|
|
22
22
|
"@babel/preset-typescript": "^7.21.4",
|
|
23
23
|
"@types/jest": "^29.5.1",
|
|
24
|
-
"@types/mime-types": "^2.1.1",
|
|
25
24
|
"@types/node": "^18.16.2",
|
|
26
25
|
"babel-jest": "^29.5.0",
|
|
27
26
|
"esbuild": "^0.17.18",
|
|
@@ -29,9 +28,8 @@
|
|
|
29
28
|
"typescript": "^5.0.4"
|
|
30
29
|
},
|
|
31
30
|
"dependencies": {
|
|
32
|
-
"@etu-wiki/iiif-image-shims": "^0.0.
|
|
33
|
-
"
|
|
34
|
-
"sharp": "^0.32.0"
|
|
31
|
+
"@etu-wiki/iiif-image-shims": "^0.0.14",
|
|
32
|
+
"sharp": "^0.32.1"
|
|
35
33
|
},
|
|
36
34
|
"files": [
|
|
37
35
|
"dist"
|