@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 5.38 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{clamp as t}from"../../core/mathUtils.js";import{createEmptyImageData as i}from"../../core/imageUtils.js";const h=2048,e=1.5,o=8;function n(i,h){const{format:e,quality:o,rotation:n,disableDecorations:a}=i||{},r=j(i,h.padding),l=x(i,{width:h.width-r.left-r.right,height:h.height-r.top-r.bottom}),{width:g,height:f}=p(i,l),u=q(e),d=B[u];return{format:u,quality:t(null!=o?o:d,0,100),area:l,width:g,height:f,rotation:n,disableDecorations:!!a,ignoreBackground:!!i?.ignoreBackground,ignorePadding:!!i?.ignorePadding}}function a(t,i){const h=n(t,i),e=h.area,o=h.width/e.width,a=j(h,i.padding),r=a.left+a.right,l=a.top+a.bottom,g=i.width-r,f=i.height-l,u=Math.floor(g*o+r),d=Math.floor(f*o+l),c=t?.layers??[],s=h.ignoreBackground,w=h.ignorePadding;return{framebufferWidth:u,framebufferHeight:d,region:{x:Math.floor(e.x*o)+a.left,y:Math.floor(e.y*o)+a.top,width:h.width,height:h.height},format:h.format,quality:h.quality,rotation:h.rotation,pixelRatio:o,layers:c,disableDecorations:h.disableDecorations,ignoreBackground:s,ignorePadding:w,olidColor:!1}}function r(t,i,h){const{ctx:e,canvas:o}=g(t,h),n=e.getImageData(0,0,t.width,t.height),a=c(o,i);return f(o),{dataUrl:a,data:n}}function l(t,i){const{ctx:h,canvas:e}=g(t,i),o=h.getImageData(0,0,t.width,t.height);return f(e),o}function g(t,i){const h=u();i.premultipliedAlpha&&v(t),h.width=t.width,h.height=t.height;const e=h.getContext("2d",{willReadFrequently:!0});return e.putImageData(t,0,0),i.flipY&&D(e),{ctx:e,canvas:h}}function f(t){t.width=0,t.height=0}function u(){return null==d&&(d=document.createElement("canvas")),d}let d=null;function c(t,i){const h=P[i.format],e=i.quality/100;return t.toDataURL(h,e)}function s(i,h){const e=q(i),o=B[e];return{format:e,quality:t(null!=h?h:o,0,100)}}function w(t,i){return i/Math.max(t[0],t[1])}function M(t,i,h,e=0,o=0,n=t.width-e,a=t.height-o,r=!1){const{data:l}=t,{width:g,height:f,data:u}=i,d=n/g,c=a/f,s=Math.ceil(d/2),w=Math.ceil(c/2),M=t.width;for(let m=0;m<f;m++)for(let t=0;t<g;t++){const i=4*(t+(r?f-m-1:m)*g);let n=0,a=0,p=0,x=0,y=0,b=0;const j=(m+.5)*c;for(let r=Math.floor(m*c);r<(m+1)*c;r++){const i=Math.abs(j-(r+.5))/w,g=(t+.5)*d,f=i*i;for(let u=Math.floor(t*d);u<(t+1)*d;u++){const t=Math.abs(g-(u+.5))/s,i=Math.sqrt(f+t*t);if(i>=1)continue;let d=2*i*i*i-3*i*i+1;const c=4*(e+u+(o+r)*M);b+=d*l[c+3],a+=d,!h&&l[c+3]<255&&(d=d*l[c+3]/255),p+=d*l[c],x+=d*l[c+1],y+=d*l[c+2],n+=d}}u[i]=p/n,u[i+1]=x/n,u[i+2]=y/n,u[i+3]=b/a}return i}function m(t,i,n){if(!i)return t;const{framebufferWidth:a,framebufferHeight:r,pixelRatio:l,region:g}=t,f=j(t,n),u=f.left+f.right,d=f.top+f.bottom,c=a-u,s=r-d,w=Math.min(o,Math.min((h-u)/c,(h-d)/s));return w<e?t:{...t,framebufferWidth:Math.round(c*w)+u,framebufferHeight:Math.round(s*w)+d,pixelRatio:l*w,resample:{region:{x:Math.round((g.x-f.left)*w)+f.left,y:Math.round((g.y-f.top)*w)+f.top,width:Math.round(g.width*w),height:Math.round(g.height*w)},width:a,height:r}}}function p(t,i){if(!t)return i;const h=t.width,e=t.height;if(null!=h&&null!=e)return{width:Math.floor(h),height:Math.floor(e)};if(null==h&&null==e)return i;const o=i.width/i.height;return null==e?{width:Math.floor(h),height:Math.floor(h/o)}:{width:Math.floor(e*o),height:Math.floor(e)}}function x(t,i){const h={x:0,y:0,width:i.width,height:i.height};if(t?.area){null!=t.area.x&&(h.x=Math.floor(t.area.x)),null!=t.area.y&&(h.y=Math.floor(t.area.y));const e=null!=t.area.width?Math.floor(t.area.width):null,o=null!=t.area.height?Math.floor(t.area.height):null;if(h.width=i.width-h.x,h.height=i.height-h.y,null!=e&&null!=o)h.width=Math.min(h.width,e),h.height=Math.min(h.height,o);else if(null==e&&null!=o){const t=Math.min(h.width,e);h.height=t/h.width*h.height,h.width=t}else if(null!=e&&null==o){const t=Math.min(h.height,o);h.width=t/h.height*h.width,h.height=t}}return y(b(h,t),i)}function y(t,i){const h=Math.floor(Math.max(t.x,0)),e=Math.floor(Math.max(t.y,0)),o={x:h,y:e,width:Math.floor(Math.min(t.width,i.width-h)),height:Math.floor(Math.min(t.height,i.height-e))},n=o.width/o.height,a=t.width/t.height;if(a===n)return o;if(a>n){const t=Math.floor(o.width/a),i=o.height-t;return{x:o.x,y:Math.floor(o.y+i/2),width:o.width,height:t}}const r=Math.floor(o.height*a),l=o.width-r;return{x:Math.floor(o.x+l/2),y:o.y,width:r,height:o.height}}function b(t,i){if(null==i?.width||null==i.height)return t;const h=i.width/i.height,e=t.width/t.height;if(e===h)return t;if(e<h){const i=Math.floor(t.height*h);return t.x-=(i-t.width)/2,t.width=i,t}const o=Math.floor(t.width/h);return t.y-=(o-t.height)/2,t.height=o,t}function j(t,i){return!i||t?.ignorePadding?I:i}function q(t){switch(t){case"png":case"jpg":case"jpeg":return t;default:return k}}function D(t){t.save(),t.globalCompositeOperation="copy",t.scale(1,-1),t.translate(0,-t.canvas.height),t.drawImage(t.canvas,0,0),t.restore()}function v(t){const i=t.data,h=i.length;for(let e=0;e<h;e+=4){const t=i[e+3];if(255!==t&&t>0){const h=255/t;i[e]=i[e]*h,i[e+1]=i[e+1]*h,i[e+2]=i[e+2]*h}}}const P={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg"},R=98,k="png",B={png:100,jpg:R,jpeg:R},I={top:0,right:0,bottom:0,left:0};export{n as completeUserSettings,i as createEmptyImageData,r as encode,l as encodeData,s as getFormatAndQuality,w as getMaximumResolutionScale,M as resampleHermite,m as screenshotSuperSampleSettings,c as toDataUrl,a as toRenderSettings};