@needle-tools/three 0.160.3 → 0.162.1

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.
Files changed (961) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +86 -86
  3. package/build/three.cjs +53267 -53092
  4. package/build/three.module.js +53269 -53094
  5. package/build/three.module.min.js +1 -1
  6. package/examples/fonts/LICENSE +13 -13
  7. package/examples/fonts/README.md +11 -11
  8. package/examples/fonts/droid/NOTICE +190 -190
  9. package/examples/fonts/droid/README.txt +18 -18
  10. package/examples/fonts/ttf/README.md +9 -9
  11. package/examples/jsm/Addons.js +295 -294
  12. package/examples/jsm/animation/AnimationClipCreator.js +116 -116
  13. package/examples/jsm/animation/CCDIKSolver.js +482 -482
  14. package/examples/jsm/animation/MMDAnimationHelper.js +1207 -1207
  15. package/examples/jsm/animation/MMDPhysics.js +1406 -1406
  16. package/examples/jsm/cameras/CinematicCamera.js +208 -208
  17. package/examples/jsm/capabilities/WebGL.js +108 -108
  18. package/examples/jsm/capabilities/WebGPU.js +57 -57
  19. package/examples/jsm/controls/ArcballControls.js +3224 -3224
  20. package/examples/jsm/controls/DragControls.js +282 -221
  21. package/examples/jsm/controls/FirstPersonControls.js +325 -325
  22. package/examples/jsm/controls/FlyControls.js +326 -326
  23. package/examples/jsm/controls/MapControls.js +28 -28
  24. package/examples/jsm/controls/OrbitControls.js +1548 -1521
  25. package/examples/jsm/controls/PointerLockControls.js +162 -162
  26. package/examples/jsm/controls/TrackballControls.js +828 -828
  27. package/examples/jsm/controls/TransformControls.js +1573 -1573
  28. package/examples/jsm/csm/CSM.js +384 -384
  29. package/examples/jsm/csm/CSMFrustum.js +152 -152
  30. package/examples/jsm/csm/CSMHelper.js +193 -193
  31. package/examples/jsm/csm/CSMShader.js +295 -295
  32. package/examples/jsm/curves/CurveExtras.js +422 -422
  33. package/examples/jsm/curves/NURBSCurve.js +80 -80
  34. package/examples/jsm/curves/NURBSSurface.js +52 -52
  35. package/examples/jsm/curves/NURBSUtils.js +542 -487
  36. package/examples/jsm/curves/NURBSVolume.js +62 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +154 -154
  38. package/examples/jsm/effects/AsciiEffect.js +263 -263
  39. package/examples/jsm/effects/OutlineEffect.js +539 -539
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +119 -119
  41. package/examples/jsm/effects/PeppersGhostEffect.js +153 -153
  42. package/examples/jsm/effects/StereoEffect.js +55 -55
  43. package/examples/jsm/environments/DebugEnvironment.js +52 -52
  44. package/examples/jsm/environments/RoomEnvironment.js +148 -148
  45. package/examples/jsm/exporters/DRACOExporter.js +267 -267
  46. package/examples/jsm/exporters/EXRExporter.js +579 -579
  47. package/examples/jsm/exporters/GLTFExporter.js +3321 -3311
  48. package/examples/jsm/exporters/KTX2Exporter.js +292 -292
  49. package/examples/jsm/exporters/MMDExporter.js +217 -217
  50. package/examples/jsm/exporters/OBJExporter.js +284 -284
  51. package/examples/jsm/exporters/PLYExporter.js +528 -528
  52. package/examples/jsm/exporters/STLExporter.js +199 -199
  53. package/examples/jsm/exporters/USDZExporter.js +720 -720
  54. package/examples/jsm/geometries/BoxLineGeometry.js +69 -69
  55. package/examples/jsm/geometries/ConvexGeometry.js +53 -53
  56. package/examples/jsm/geometries/DecalGeometry.js +356 -356
  57. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -174
  58. package/examples/jsm/geometries/ParametricGeometries.js +254 -254
  59. package/examples/jsm/geometries/ParametricGeometry.js +139 -139
  60. package/examples/jsm/geometries/RoundedBoxGeometry.js +155 -155
  61. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -144
  62. package/examples/jsm/geometries/TeapotGeometry.js +704 -704
  63. package/examples/jsm/geometries/TextGeometry.js +57 -57
  64. package/examples/jsm/helpers/LightProbeHelper.js +130 -130
  65. package/examples/jsm/helpers/OctreeHelper.js +73 -73
  66. package/examples/jsm/helpers/PositionalAudioHelper.js +109 -109
  67. package/examples/jsm/helpers/RectAreaLightHelper.js +85 -85
  68. package/examples/jsm/helpers/TextureHelper.js +237 -237
  69. package/examples/jsm/helpers/VertexNormalsHelper.js +96 -96
  70. package/examples/jsm/helpers/VertexTangentsHelper.js +88 -88
  71. package/examples/jsm/helpers/ViewHelper.js +333 -333
  72. package/examples/jsm/interactive/HTMLMesh.js +572 -572
  73. package/examples/jsm/interactive/InteractiveGroup.js +106 -116
  74. package/examples/jsm/interactive/SelectionBox.js +227 -227
  75. package/examples/jsm/interactive/SelectionHelper.js +104 -104
  76. package/examples/jsm/libs/ammo.wasm.js +822 -822
  77. package/examples/jsm/libs/basis/README.md +46 -46
  78. package/examples/jsm/libs/basis/basis_transcoder.js +21 -21
  79. package/examples/jsm/libs/chevrotain.module.min.js +141 -141
  80. package/examples/jsm/libs/draco/README.md +32 -32
  81. package/examples/jsm/libs/draco/draco_decoder.js +34 -34
  82. package/examples/jsm/libs/draco/draco_encoder.js +33 -33
  83. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -117
  84. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -33
  85. package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -33
  86. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -116
  87. package/examples/jsm/libs/ecsy.module.js +1792 -1792
  88. package/examples/jsm/libs/fflate.module.js +2474 -2474
  89. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  90. package/examples/jsm/libs/lil-gui.module.min.js +8 -8
  91. package/examples/jsm/libs/lottie_canvas.module.js +14849 -14849
  92. package/examples/jsm/libs/meshopt_decoder.module.js +178 -178
  93. package/examples/jsm/libs/mikktspace.module.js +128 -128
  94. package/examples/jsm/libs/mmdparser.module.js +11530 -11530
  95. package/examples/jsm/libs/motion-controllers.module.js +397 -397
  96. package/examples/jsm/libs/opentype.module.js +14506 -14506
  97. package/examples/jsm/libs/potpack.module.js +124 -124
  98. package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -8743
  99. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +15 -8748
  100. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  101. package/examples/jsm/libs/stats.module.js +167 -167
  102. package/examples/jsm/libs/surfaceNet.js +200 -200
  103. package/examples/jsm/libs/tween.module.js +876 -858
  104. package/examples/jsm/libs/utif.module.js +1664 -1664
  105. package/examples/jsm/libs/zstddec.module.js +1 -1
  106. package/examples/jsm/lights/IESSpotLight.js +25 -25
  107. package/examples/jsm/lights/LightProbeGenerator.js +286 -286
  108. package/examples/jsm/lights/RectAreaLightUniformsLib.js +79 -79
  109. package/examples/jsm/lines/Line2.js +19 -19
  110. package/examples/jsm/lines/LineGeometry.js +79 -79
  111. package/examples/jsm/lines/LineMaterial.js +619 -619
  112. package/examples/jsm/lines/LineSegments2.js +361 -361
  113. package/examples/jsm/lines/LineSegmentsGeometry.js +241 -241
  114. package/examples/jsm/lines/Wireframe.js +56 -56
  115. package/examples/jsm/lines/WireframeGeometry2.js +24 -24
  116. package/examples/jsm/loaders/3DMLoader.js +1764 -1772
  117. package/examples/jsm/loaders/3MFLoader.js +1478 -1478
  118. package/examples/jsm/loaders/AMFLoader.js +521 -521
  119. package/examples/jsm/loaders/BVHLoader.js +437 -437
  120. package/examples/jsm/loaders/ColladaLoader.js +4116 -4116
  121. package/examples/jsm/loaders/DDSLoader.js +318 -318
  122. package/examples/jsm/loaders/DRACOLoader.js +613 -613
  123. package/examples/jsm/loaders/EXRLoader.js +2309 -2309
  124. package/examples/jsm/loaders/FBXLoader.js +4314 -4314
  125. package/examples/jsm/loaders/FontLoader.js +183 -183
  126. package/examples/jsm/loaders/GCodeLoader.js +261 -261
  127. package/examples/jsm/loaders/GLTFLoader.js +4666 -4666
  128. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +729 -720
  129. package/examples/jsm/loaders/HDRCubeTextureLoader.js +115 -115
  130. package/examples/jsm/loaders/IESLoader.js +337 -337
  131. package/examples/jsm/loaders/KMZLoader.js +130 -130
  132. package/examples/jsm/loaders/KTX2Loader.js +932 -932
  133. package/examples/jsm/loaders/KTXLoader.js +176 -176
  134. package/examples/jsm/loaders/LDrawLoader.js +2470 -2470
  135. package/examples/jsm/loaders/LUT3dlLoader.js +183 -183
  136. package/examples/jsm/loaders/LUTCubeLoader.js +167 -167
  137. package/examples/jsm/loaders/LUTImageLoader.js +163 -163
  138. package/examples/jsm/loaders/LWOLoader.js +1052 -1052
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -606
  140. package/examples/jsm/loaders/LottieLoader.js +77 -77
  141. package/examples/jsm/loaders/MD2Loader.js +399 -399
  142. package/examples/jsm/loaders/MDDLoader.js +102 -102
  143. package/examples/jsm/loaders/MMDLoader.js +2276 -2276
  144. package/examples/jsm/loaders/MTLLoader.js +567 -567
  145. package/examples/jsm/loaders/MaterialXLoader.js +852 -852
  146. package/examples/jsm/loaders/NRRDLoader.js +686 -686
  147. package/examples/jsm/loaders/OBJLoader.js +905 -905
  148. package/examples/jsm/loaders/PCDLoader.js +467 -467
  149. package/examples/jsm/loaders/PDBLoader.js +232 -232
  150. package/examples/jsm/loaders/PLYLoader.js +771 -771
  151. package/examples/jsm/loaders/PVRLoader.js +251 -251
  152. package/examples/jsm/loaders/RGBELoader.js +450 -450
  153. package/examples/jsm/loaders/RGBMLoader.js +1065 -1065
  154. package/examples/jsm/loaders/STLLoader.js +410 -410
  155. package/examples/jsm/loaders/SVGLoader.js +3173 -3173
  156. package/examples/jsm/loaders/TDSLoader.js +1124 -1124
  157. package/examples/jsm/loaders/TGALoader.js +517 -517
  158. package/examples/jsm/loaders/TIFFLoader.js +36 -36
  159. package/examples/jsm/loaders/TTFLoader.js +214 -214
  160. package/examples/jsm/loaders/TiltLoader.js +520 -520
  161. package/examples/jsm/loaders/USDZLoader.js +822 -822
  162. package/examples/jsm/loaders/VOXLoader.js +318 -311
  163. package/examples/jsm/loaders/VRMLLoader.js +3537 -3533
  164. package/examples/jsm/loaders/VTKLoader.js +1163 -1163
  165. package/examples/jsm/loaders/XYZLoader.js +106 -106
  166. package/examples/jsm/loaders/lwo/IFFParser.js +1214 -1214
  167. package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -414
  168. package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -373
  169. package/examples/jsm/materials/MeshGouraudMaterial.js +426 -426
  170. package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -144
  171. package/examples/jsm/math/Capsule.js +82 -82
  172. package/examples/jsm/math/ColorConverter.js +36 -36
  173. package/examples/jsm/math/ConvexHull.js +1271 -1271
  174. package/examples/jsm/math/ImprovedNoise.js +71 -71
  175. package/examples/jsm/math/Lut.js +204 -204
  176. package/examples/jsm/math/MeshSurfaceSampler.js +250 -250
  177. package/examples/jsm/math/OBB.js +423 -423
  178. package/examples/jsm/math/Octree.js +540 -540
  179. package/examples/jsm/math/SimplexNoise.js +444 -444
  180. package/examples/jsm/misc/ConvexObjectBreaker.js +519 -519
  181. package/examples/jsm/misc/GPUComputationRenderer.js +446 -446
  182. package/examples/jsm/misc/Gyroscope.js +66 -66
  183. package/examples/jsm/misc/MD2Character.js +276 -276
  184. package/examples/jsm/misc/MD2CharacterComplex.js +576 -576
  185. package/examples/jsm/misc/MorphAnimMesh.js +75 -75
  186. package/examples/jsm/misc/MorphBlendMesh.js +322 -322
  187. package/examples/jsm/misc/ProgressiveLightMap.js +324 -323
  188. package/examples/jsm/misc/RollerCoaster.js +566 -566
  189. package/examples/jsm/misc/Timer.js +128 -119
  190. package/examples/jsm/misc/TubePainter.js +202 -202
  191. package/examples/jsm/misc/Volume.js +473 -473
  192. package/examples/jsm/misc/VolumeSlice.js +229 -229
  193. package/examples/jsm/modifiers/CurveModifier.js +344 -344
  194. package/examples/jsm/modifiers/EdgeSplitModifier.js +279 -279
  195. package/examples/jsm/modifiers/SimplifyModifier.js +617 -617
  196. package/examples/jsm/modifiers/TessellateModifier.js +307 -307
  197. package/examples/jsm/nodes/Nodes.js +195 -189
  198. package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
  199. package/examples/jsm/nodes/accessors/BitangentNode.js +89 -89
  200. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +127 -127
  201. package/examples/jsm/nodes/accessors/BufferNode.js +30 -30
  202. package/examples/jsm/nodes/accessors/CameraNode.js +119 -120
  203. package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
  204. package/examples/jsm/nodes/accessors/CubeTextureNode.js +61 -61
  205. package/examples/jsm/nodes/accessors/InstanceNode.js +71 -71
  206. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -21
  207. package/examples/jsm/nodes/accessors/MaterialNode.js +314 -314
  208. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +41 -51
  209. package/examples/jsm/nodes/accessors/ModelNode.js +33 -33
  210. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +39 -39
  211. package/examples/jsm/nodes/accessors/MorphNode.js +245 -245
  212. package/examples/jsm/nodes/accessors/NormalNode.js +96 -96
  213. package/examples/jsm/nodes/accessors/Object3DNode.js +150 -150
  214. package/examples/jsm/nodes/accessors/PointUVNode.js +26 -26
  215. package/examples/jsm/nodes/accessors/PositionNode.js +104 -104
  216. package/examples/jsm/nodes/accessors/ReferenceNode.js +160 -102
  217. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +35 -35
  218. package/examples/jsm/nodes/accessors/SceneNode.js +52 -52
  219. package/examples/jsm/nodes/accessors/SkinningNode.js +124 -103
  220. package/examples/jsm/nodes/accessors/StorageBufferNode.js +72 -54
  221. package/examples/jsm/nodes/accessors/TangentNode.js +109 -103
  222. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -94
  223. package/examples/jsm/nodes/accessors/TextureNode.js +367 -367
  224. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -35
  225. package/examples/jsm/nodes/accessors/TextureStoreNode.js +82 -82
  226. package/examples/jsm/nodes/accessors/UVNode.js +47 -47
  227. package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
  228. package/examples/jsm/nodes/accessors/UserDataNode.js +29 -29
  229. package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -70
  230. package/examples/jsm/nodes/code/CodeNode.js +84 -78
  231. package/examples/jsm/nodes/code/ExpressionNode.js +37 -37
  232. package/examples/jsm/nodes/code/FunctionCallNode.js +96 -96
  233. package/examples/jsm/nodes/code/FunctionNode.js +138 -138
  234. package/examples/jsm/nodes/code/ScriptableNode.js +488 -488
  235. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -167
  236. package/examples/jsm/nodes/core/AssignNode.js +128 -72
  237. package/examples/jsm/nodes/core/AttributeNode.js +108 -108
  238. package/examples/jsm/nodes/core/BypassNode.js +45 -45
  239. package/examples/jsm/nodes/core/CacheNode.js +49 -49
  240. package/examples/jsm/nodes/core/ConstNode.js +32 -32
  241. package/examples/jsm/nodes/core/ContextNode.js +61 -61
  242. package/examples/jsm/nodes/core/IndexNode.js +66 -66
  243. package/examples/jsm/nodes/core/InputNode.js +83 -83
  244. package/examples/jsm/nodes/core/LightingModel.js +17 -17
  245. package/examples/jsm/nodes/core/Node.js +493 -483
  246. package/examples/jsm/nodes/core/NodeAttribute.js +15 -15
  247. package/examples/jsm/nodes/core/NodeBuilder.js +1250 -1267
  248. package/examples/jsm/nodes/core/NodeCache.js +26 -26
  249. package/examples/jsm/nodes/core/NodeCode.js +15 -15
  250. package/examples/jsm/nodes/core/NodeFrame.js +143 -135
  251. package/examples/jsm/nodes/core/NodeFunction.js +22 -22
  252. package/examples/jsm/nodes/core/NodeFunctionInput.js +17 -17
  253. package/examples/jsm/nodes/core/NodeKeywords.js +80 -80
  254. package/examples/jsm/nodes/core/NodeParser.js +11 -11
  255. package/examples/jsm/nodes/core/NodeUniform.js +40 -40
  256. package/examples/jsm/nodes/core/NodeUtils.js +210 -210
  257. package/examples/jsm/nodes/core/NodeVar.js +14 -14
  258. package/examples/jsm/nodes/core/NodeVarying.js +17 -17
  259. package/examples/jsm/nodes/core/OutputStructNode.js +62 -62
  260. package/examples/jsm/nodes/core/ParameterNode.js +33 -33
  261. package/examples/jsm/nodes/core/PropertyNode.js +72 -72
  262. package/examples/jsm/nodes/core/StackNode.js +89 -89
  263. package/examples/jsm/nodes/core/StructTypeNode.js +24 -24
  264. package/examples/jsm/nodes/core/TempNode.js +58 -58
  265. package/examples/jsm/nodes/core/UniformGroup.js +13 -13
  266. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -36
  267. package/examples/jsm/nodes/core/UniformNode.js +80 -80
  268. package/examples/jsm/nodes/core/VarNode.js +60 -60
  269. package/examples/jsm/nodes/core/VaryingNode.js +65 -65
  270. package/examples/jsm/nodes/core/constants.js +28 -27
  271. package/examples/jsm/nodes/display/AfterImageNode.js +148 -134
  272. package/examples/jsm/nodes/display/AnamorphicNode.js +148 -0
  273. package/examples/jsm/nodes/display/BlendModeNode.js +128 -99
  274. package/examples/jsm/nodes/display/BumpMapNode.js +99 -99
  275. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +99 -96
  276. package/examples/jsm/nodes/display/ColorSpaceNode.js +108 -108
  277. package/examples/jsm/nodes/display/FrontFacingNode.js +27 -27
  278. package/examples/jsm/nodes/display/GaussianBlurNode.js +190 -177
  279. package/examples/jsm/nodes/display/NormalMapNode.js +106 -108
  280. package/examples/jsm/nodes/display/PassNode.js +183 -182
  281. package/examples/jsm/nodes/display/PosterizeNode.js +32 -32
  282. package/examples/jsm/nodes/display/ToneMappingNode.js +184 -184
  283. package/examples/jsm/nodes/display/ViewportDepthNode.js +97 -97
  284. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +31 -31
  285. package/examples/jsm/nodes/display/ViewportNode.js +134 -134
  286. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -31
  287. package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -75
  288. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -35
  289. package/examples/jsm/nodes/fog/FogNode.js +38 -38
  290. package/examples/jsm/nodes/fog/FogRangeNode.js +34 -34
  291. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +40 -40
  292. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -9
  293. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +57 -57
  294. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +30 -30
  295. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +23 -23
  296. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -13
  297. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +16 -16
  298. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +21 -21
  299. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +28 -28
  300. package/examples/jsm/nodes/functions/PhongLightingModel.js +67 -67
  301. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +393 -393
  302. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +13 -13
  303. package/examples/jsm/nodes/functions/material/getRoughness.js +18 -18
  304. package/examples/jsm/nodes/geometry/RangeNode.js +104 -104
  305. package/examples/jsm/nodes/gpgpu/ComputeNode.js +85 -85
  306. package/examples/jsm/nodes/lighting/AONode.js +27 -27
  307. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -27
  308. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +241 -238
  309. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +40 -40
  310. package/examples/jsm/nodes/lighting/EnvironmentNode.js +181 -181
  311. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +55 -55
  312. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -39
  313. package/examples/jsm/nodes/lighting/LightNode.js +57 -57
  314. package/examples/jsm/nodes/lighting/LightUtils.js +17 -17
  315. package/examples/jsm/nodes/lighting/LightingContextNode.js +66 -66
  316. package/examples/jsm/nodes/lighting/LightingNode.js +21 -21
  317. package/examples/jsm/nodes/lighting/LightsNode.js +188 -188
  318. package/examples/jsm/nodes/lighting/PointLightNode.js +68 -68
  319. package/examples/jsm/nodes/lighting/SpotLightNode.js +89 -89
  320. package/examples/jsm/nodes/loaders/NodeLoader.js +108 -108
  321. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +59 -59
  322. package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -70
  323. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -162
  324. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +436 -436
  325. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +28 -28
  326. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -54
  327. package/examples/jsm/nodes/materials/Materials.js +16 -16
  328. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +28 -28
  329. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -34
  330. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +40 -40
  331. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -65
  332. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +155 -155
  333. package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -84
  334. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +80 -80
  335. package/examples/jsm/nodes/materials/NodeMaterial.js +601 -568
  336. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +39 -39
  337. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +90 -96
  338. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -199
  339. package/examples/jsm/nodes/materialx/MaterialXNodes.js +68 -68
  340. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +130 -130
  341. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -1430
  342. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +29 -29
  343. package/examples/jsm/nodes/math/CondNode.js +121 -86
  344. package/examples/jsm/nodes/math/HashNode.js +34 -34
  345. package/examples/jsm/nodes/math/MathNode.js +391 -382
  346. package/examples/jsm/nodes/math/MathUtils.js +15 -0
  347. package/examples/jsm/nodes/math/OperatorNode.js +274 -266
  348. package/examples/jsm/nodes/math/TriNoise3D.js +71 -71
  349. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +152 -152
  350. package/examples/jsm/nodes/parsers/GLSLNodeParser.js +14 -14
  351. package/examples/jsm/nodes/procedural/CheckerNode.js +42 -42
  352. package/examples/jsm/nodes/shadernode/ShaderNode.js +634 -625
  353. package/examples/jsm/nodes/utils/ArrayElementNode.js +35 -41
  354. package/examples/jsm/nodes/utils/ConvertNode.js +65 -65
  355. package/examples/jsm/nodes/utils/DiscardNode.js +27 -27
  356. package/examples/jsm/nodes/utils/EquirectUVNode.js +33 -33
  357. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -95
  358. package/examples/jsm/nodes/utils/JoinNode.js +61 -61
  359. package/examples/jsm/nodes/utils/LoopNode.js +200 -198
  360. package/examples/jsm/nodes/utils/MatcapUVNode.js +30 -30
  361. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +46 -46
  362. package/examples/jsm/nodes/utils/OscNode.js +81 -81
  363. package/examples/jsm/nodes/utils/PackingNode.js +55 -55
  364. package/examples/jsm/nodes/utils/ReflectorNode.js +227 -0
  365. package/examples/jsm/nodes/utils/RemapNode.js +42 -42
  366. package/examples/jsm/nodes/utils/RotateNode.js +68 -43
  367. package/examples/jsm/nodes/utils/RotateUVNode.js +35 -43
  368. package/examples/jsm/nodes/utils/SetNode.js +62 -62
  369. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -37
  370. package/examples/jsm/nodes/utils/SplitNode.js +112 -112
  371. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +41 -41
  372. package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
  373. package/examples/jsm/nodes/utils/TimerNode.js +94 -94
  374. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +62 -62
  375. package/examples/jsm/objects/GroundedSkybox.js +50 -50
  376. package/examples/jsm/objects/InstancedPoints.js +21 -21
  377. package/examples/jsm/objects/Lensflare.js +397 -397
  378. package/examples/jsm/objects/MarchingCubes.js +1176 -1176
  379. package/examples/jsm/objects/QuadMesh.js +66 -66
  380. package/examples/jsm/objects/Reflector.js +264 -264
  381. package/examples/jsm/objects/ReflectorForSSRPass.js +352 -352
  382. package/examples/jsm/objects/Refractor.js +327 -327
  383. package/examples/jsm/objects/ShadowMesh.js +80 -80
  384. package/examples/jsm/objects/Sky.js +219 -219
  385. package/examples/jsm/objects/Water.js +333 -333
  386. package/examples/jsm/objects/Water2.js +361 -361
  387. package/examples/jsm/offscreen/jank.js +45 -45
  388. package/examples/jsm/offscreen/offscreen.js +8 -8
  389. package/examples/jsm/offscreen/scene.js +86 -86
  390. package/examples/jsm/physics/AmmoPhysics.js +306 -306
  391. package/examples/jsm/physics/RapierPhysics.js +220 -220
  392. package/examples/jsm/postprocessing/AfterimagePass.js +104 -104
  393. package/examples/jsm/postprocessing/BloomPass.js +172 -172
  394. package/examples/jsm/postprocessing/BokehPass.js +141 -141
  395. package/examples/jsm/postprocessing/ClearPass.js +46 -46
  396. package/examples/jsm/postprocessing/CubeTexturePass.js +85 -85
  397. package/examples/jsm/postprocessing/DotScreenPass.js +65 -65
  398. package/examples/jsm/postprocessing/EffectComposer.js +231 -231
  399. package/examples/jsm/postprocessing/FilmPass.js +64 -64
  400. package/examples/jsm/postprocessing/GTAOPass.js +582 -582
  401. package/examples/jsm/postprocessing/GlitchPass.js +128 -128
  402. package/examples/jsm/postprocessing/HalftonePass.js +79 -79
  403. package/examples/jsm/postprocessing/LUTPass.js +174 -174
  404. package/examples/jsm/postprocessing/MaskPass.js +104 -104
  405. package/examples/jsm/postprocessing/OutlinePass.js +654 -654
  406. package/examples/jsm/postprocessing/OutputPass.js +97 -95
  407. package/examples/jsm/postprocessing/Pass.js +95 -95
  408. package/examples/jsm/postprocessing/RenderPass.js +99 -99
  409. package/examples/jsm/postprocessing/RenderPixelatedPass.js +235 -235
  410. package/examples/jsm/postprocessing/SAOPass.js +335 -335
  411. package/examples/jsm/postprocessing/SMAAPass.js +199 -199
  412. package/examples/jsm/postprocessing/SSAARenderPass.js +228 -228
  413. package/examples/jsm/postprocessing/SSAOPass.js +420 -420
  414. package/examples/jsm/postprocessing/SSRPass.js +641 -641
  415. package/examples/jsm/postprocessing/SavePass.js +79 -79
  416. package/examples/jsm/postprocessing/ShaderPass.js +77 -77
  417. package/examples/jsm/postprocessing/TAARenderPass.js +188 -188
  418. package/examples/jsm/postprocessing/TexturePass.js +67 -67
  419. package/examples/jsm/postprocessing/UnrealBloomPass.js +415 -415
  420. package/examples/jsm/renderers/CSS2DRenderer.js +215 -215
  421. package/examples/jsm/renderers/CSS3DRenderer.js +329 -329
  422. package/examples/jsm/renderers/Projector.js +918 -918
  423. package/examples/jsm/renderers/SVGRenderer.js +556 -556
  424. package/examples/jsm/renderers/common/Animation.js +47 -47
  425. package/examples/jsm/renderers/common/Attributes.js +75 -75
  426. package/examples/jsm/renderers/common/Backend.js +195 -193
  427. package/examples/jsm/renderers/common/Background.js +134 -134
  428. package/examples/jsm/renderers/common/Binding.js +25 -25
  429. package/examples/jsm/renderers/common/Bindings.js +173 -173
  430. package/examples/jsm/renderers/common/Buffer.js +38 -38
  431. package/examples/jsm/renderers/common/BufferUtils.js +33 -33
  432. package/examples/jsm/renderers/common/ChainMap.js +89 -89
  433. package/examples/jsm/renderers/common/ClippingContext.js +165 -0
  434. package/examples/jsm/renderers/common/Color4.js +37 -37
  435. package/examples/jsm/renderers/common/ComputePipeline.js +17 -17
  436. package/examples/jsm/renderers/common/Constants.js +14 -14
  437. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -65
  438. package/examples/jsm/renderers/common/DataMap.js +54 -54
  439. package/examples/jsm/renderers/common/Geometries.js +215 -215
  440. package/examples/jsm/renderers/common/Info.js +107 -107
  441. package/examples/jsm/renderers/common/Pipeline.js +13 -13
  442. package/examples/jsm/renderers/common/Pipelines.js +322 -322
  443. package/examples/jsm/renderers/common/PostProcessing.js +25 -25
  444. package/examples/jsm/renderers/common/ProgrammableStage.js +20 -20
  445. package/examples/jsm/renderers/common/RenderContext.js +43 -41
  446. package/examples/jsm/renderers/common/RenderContexts.js +63 -74
  447. package/examples/jsm/renderers/common/RenderList.js +186 -186
  448. package/examples/jsm/renderers/common/RenderLists.js +38 -38
  449. package/examples/jsm/renderers/common/RenderObject.js +221 -178
  450. package/examples/jsm/renderers/common/RenderObjects.js +93 -91
  451. package/examples/jsm/renderers/common/RenderPipeline.js +16 -16
  452. package/examples/jsm/renderers/common/Renderer.js +1304 -1062
  453. package/examples/jsm/renderers/common/SampledTexture.js +83 -83
  454. package/examples/jsm/renderers/common/Sampler.js +18 -18
  455. package/examples/jsm/renderers/common/StorageBuffer.js +17 -17
  456. package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -21
  457. package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
  458. package/examples/jsm/renderers/common/StorageTexture.js +20 -20
  459. package/examples/jsm/renderers/common/Textures.js +344 -354
  460. package/examples/jsm/renderers/common/Uniform.js +140 -140
  461. package/examples/jsm/renderers/common/UniformBuffer.js +15 -15
  462. package/examples/jsm/renderers/common/UniformsGroup.js +301 -299
  463. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +44 -44
  464. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +49 -49
  465. package/examples/jsm/renderers/common/nodes/NodeSampler.js +15 -15
  466. package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
  467. package/examples/jsm/renderers/common/nodes/NodeUniform.js +135 -135
  468. package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
  469. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -44
  470. package/examples/jsm/renderers/common/nodes/Nodes.js +496 -495
  471. package/examples/jsm/renderers/webgl/WebGLBackend.js +1382 -1290
  472. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +804 -679
  473. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +258 -252
  474. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -36
  475. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -11
  476. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +36 -36
  477. package/examples/jsm/renderers/webgl/utils/WebGLState.js +738 -738
  478. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +694 -647
  479. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +285 -284
  480. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +320 -320
  481. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +26 -26
  482. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +794 -794
  483. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +51 -51
  484. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +1322 -1321
  485. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +53 -53
  486. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +1078 -1098
  487. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +104 -104
  488. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeParser.js +14 -14
  489. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +293 -287
  490. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +244 -244
  491. package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +324 -324
  492. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +591 -570
  493. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -285
  494. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +1040 -1040
  495. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +93 -93
  496. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +89 -89
  497. package/examples/jsm/shaders/AfterimageShader.js +58 -58
  498. package/examples/jsm/shaders/BasicShader.js +29 -29
  499. package/examples/jsm/shaders/BleachBypassShader.js +62 -62
  500. package/examples/jsm/shaders/BlendShader.js +49 -49
  501. package/examples/jsm/shaders/BokehShader.js +145 -145
  502. package/examples/jsm/shaders/BokehShader2.js +397 -397
  503. package/examples/jsm/shaders/BrightnessContrastShader.js +56 -56
  504. package/examples/jsm/shaders/ColorCorrectionShader.js +52 -52
  505. package/examples/jsm/shaders/ColorifyShader.js +51 -51
  506. package/examples/jsm/shaders/ConvolutionShader.js +103 -103
  507. package/examples/jsm/shaders/CopyShader.js +45 -45
  508. package/examples/jsm/shaders/DOFMipMapShader.js +56 -56
  509. package/examples/jsm/shaders/DepthLimitedBlurShader.js +171 -171
  510. package/examples/jsm/shaders/DigitalGlitch.js +101 -101
  511. package/examples/jsm/shaders/DotScreenShader.js +70 -70
  512. package/examples/jsm/shaders/ExposureShader.js +44 -44
  513. package/examples/jsm/shaders/FXAAShader.js +288 -288
  514. package/examples/jsm/shaders/FilmShader.js +59 -59
  515. package/examples/jsm/shaders/FocusShader.js +89 -89
  516. package/examples/jsm/shaders/FreiChenShader.js +96 -96
  517. package/examples/jsm/shaders/GTAOShader.js +424 -424
  518. package/examples/jsm/shaders/GammaCorrectionShader.js +43 -43
  519. package/examples/jsm/shaders/GodRaysShader.js +321 -321
  520. package/examples/jsm/shaders/HalftoneShader.js +312 -312
  521. package/examples/jsm/shaders/HorizontalBlurShader.js +59 -59
  522. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +63 -63
  523. package/examples/jsm/shaders/HueSaturationShader.js +67 -67
  524. package/examples/jsm/shaders/KaleidoShader.js +58 -58
  525. package/examples/jsm/shaders/LuminosityHighPassShader.js +66 -66
  526. package/examples/jsm/shaders/LuminosityShader.js +48 -48
  527. package/examples/jsm/shaders/MMDToonShader.js +134 -134
  528. package/examples/jsm/shaders/MirrorShader.js +56 -56
  529. package/examples/jsm/shaders/NormalMapShader.js +55 -55
  530. package/examples/jsm/shaders/OutputShader.js +85 -81
  531. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -226
  532. package/examples/jsm/shaders/RGBShiftShader.js +54 -54
  533. package/examples/jsm/shaders/SAOShader.js +179 -179
  534. package/examples/jsm/shaders/SMAAShader.js +466 -466
  535. package/examples/jsm/shaders/SSAOShader.js +300 -300
  536. package/examples/jsm/shaders/SSRShader.js +370 -370
  537. package/examples/jsm/shaders/SepiaShader.js +52 -52
  538. package/examples/jsm/shaders/SobelOperatorShader.js +92 -92
  539. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +90 -90
  540. package/examples/jsm/shaders/TechnicolorShader.js +45 -45
  541. package/examples/jsm/shaders/ToonShader.js +326 -326
  542. package/examples/jsm/shaders/TriangleBlurShader.js +74 -74
  543. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +47 -47
  544. package/examples/jsm/shaders/VelocityShader.js +130 -130
  545. package/examples/jsm/shaders/VerticalBlurShader.js +59 -59
  546. package/examples/jsm/shaders/VerticalTiltShiftShader.js +63 -63
  547. package/examples/jsm/shaders/VignetteShader.js +51 -51
  548. package/examples/jsm/shaders/VolumeShader.js +289 -289
  549. package/examples/jsm/shaders/WaterRefractionShader.js +95 -95
  550. package/examples/jsm/textures/FlakesTexture.js +40 -40
  551. package/examples/jsm/transpiler/AST.js +270 -270
  552. package/examples/jsm/transpiler/GLSLDecoder.js +941 -941
  553. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -49
  554. package/examples/jsm/transpiler/TSLEncoder.js +715 -715
  555. package/examples/jsm/transpiler/Transpiler.js +18 -18
  556. package/examples/jsm/utils/BufferGeometryUtils.js +1371 -1371
  557. package/examples/jsm/utils/CameraUtils.js +73 -73
  558. package/examples/jsm/utils/GPUStatsPanel.js +128 -128
  559. package/examples/jsm/utils/GeometryCompressionUtils.js +639 -639
  560. package/examples/jsm/utils/GeometryUtils.js +221 -221
  561. package/examples/jsm/utils/LDrawUtils.js +202 -202
  562. package/examples/jsm/utils/PackedPhongMaterial.js +178 -178
  563. package/examples/jsm/utils/SceneUtils.js +254 -254
  564. package/examples/jsm/utils/ShadowMapViewer.js +210 -210
  565. package/examples/jsm/utils/SkeletonUtils.js +424 -413
  566. package/examples/jsm/utils/SortUtils.js +160 -160
  567. package/examples/jsm/utils/TextureUtils.js +98 -98
  568. package/examples/jsm/utils/UVsDebug.js +165 -165
  569. package/examples/jsm/utils/WorkerPool.js +102 -102
  570. package/examples/jsm/webxr/ARButton.js +232 -232
  571. package/examples/jsm/webxr/OculusHandModel.js +109 -109
  572. package/examples/jsm/webxr/OculusHandPointerModel.js +416 -416
  573. package/examples/jsm/webxr/Text2D.js +38 -38
  574. package/examples/jsm/webxr/VRButton.js +233 -225
  575. package/examples/jsm/webxr/XRButton.js +223 -224
  576. package/examples/jsm/webxr/XRControllerModelFactory.js +323 -315
  577. package/examples/jsm/webxr/XREstimatedLight.js +223 -223
  578. package/examples/jsm/webxr/XRHandMeshModel.js +116 -116
  579. package/examples/jsm/webxr/XRHandModelFactory.js +105 -105
  580. package/examples/jsm/webxr/XRHandPrimitiveModel.js +105 -105
  581. package/examples/jsm/webxr/XRPlanes.js +100 -100
  582. package/package.json +4 -4
  583. package/src/Three.Legacy.js +21 -1
  584. package/src/Three.js +183 -184
  585. package/src/animation/AnimationAction.js +700 -700
  586. package/src/animation/AnimationClip.js +473 -473
  587. package/src/animation/AnimationMixer.js +770 -770
  588. package/src/animation/AnimationObjectGroup.js +387 -387
  589. package/src/animation/AnimationUtils.js +356 -356
  590. package/src/animation/KeyframeTrack.js +462 -462
  591. package/src/animation/PropertyBinding.js +719 -719
  592. package/src/animation/PropertyMixer.js +318 -318
  593. package/src/animation/tracks/BooleanKeyframeTrack.js +19 -19
  594. package/src/animation/tracks/ColorKeyframeTrack.js +15 -15
  595. package/src/animation/tracks/NumberKeyframeTrack.js +12 -12
  596. package/src/animation/tracks/QuaternionKeyframeTrack.js +23 -23
  597. package/src/animation/tracks/StringKeyframeTrack.js +15 -15
  598. package/src/animation/tracks/VectorKeyframeTrack.js +12 -12
  599. package/src/audio/Audio.js +400 -400
  600. package/src/audio/AudioAnalyser.js +40 -40
  601. package/src/audio/AudioContext.js +25 -25
  602. package/src/audio/AudioListener.js +140 -140
  603. package/src/audio/PositionalAudio.js +146 -146
  604. package/src/cameras/ArrayCamera.js +17 -17
  605. package/src/cameras/Camera.js +69 -69
  606. package/src/cameras/CubeCamera.js +173 -173
  607. package/src/cameras/OrthographicCamera.js +136 -136
  608. package/src/cameras/PerspectiveCamera.js +268 -268
  609. package/src/cameras/StereoCamera.js +100 -100
  610. package/src/constants.js +217 -216
  611. package/src/core/BufferAttribute.js +639 -650
  612. package/src/core/BufferGeometry.js +1073 -1079
  613. package/src/core/Clock.js +74 -74
  614. package/src/core/EventDispatcher.js +87 -87
  615. package/src/core/GLBufferAttribute.js +60 -60
  616. package/src/core/InstancedBufferAttribute.js +39 -39
  617. package/src/core/InstancedBufferGeometry.js +40 -40
  618. package/src/core/InstancedInterleavedBuffer.js +48 -48
  619. package/src/core/InterleavedBuffer.js +166 -166
  620. package/src/core/InterleavedBufferAttribute.js +351 -351
  621. package/src/core/Layers.js +60 -60
  622. package/src/core/Object3D.js +1019 -1008
  623. package/src/core/Raycaster.js +124 -110
  624. package/src/core/RenderTarget.js +154 -131
  625. package/src/core/Uniform.js +17 -17
  626. package/src/core/UniformsGroup.js +98 -98
  627. package/src/extras/DataUtils.js +176 -176
  628. package/src/extras/Earcut.js +789 -789
  629. package/src/extras/ImageUtils.js +129 -129
  630. package/src/extras/PMREMGenerator.js +912 -910
  631. package/src/extras/ShapeUtils.js +92 -92
  632. package/src/extras/core/Curve.js +416 -416
  633. package/src/extras/core/CurvePath.js +255 -255
  634. package/src/extras/core/Interpolations.js +79 -79
  635. package/src/extras/core/Path.js +196 -196
  636. package/src/extras/core/Shape.js +102 -102
  637. package/src/extras/core/ShapePath.js +291 -291
  638. package/src/extras/curves/ArcCurve.js +17 -17
  639. package/src/extras/curves/CatmullRomCurve3.js +255 -255
  640. package/src/extras/curves/CubicBezierCurve.js +78 -78
  641. package/src/extras/curves/CubicBezierCurve3.js +79 -79
  642. package/src/extras/curves/Curves.js +10 -10
  643. package/src/extras/curves/EllipseCurve.js +156 -156
  644. package/src/extras/curves/LineCurve.js +92 -92
  645. package/src/extras/curves/LineCurve3.js +92 -92
  646. package/src/extras/curves/QuadraticBezierCurve.js +74 -74
  647. package/src/extras/curves/QuadraticBezierCurve3.js +75 -75
  648. package/src/extras/curves/SplineCurve.js +97 -97
  649. package/src/geometries/BoxGeometry.js +180 -180
  650. package/src/geometries/CapsuleGeometry.js +33 -33
  651. package/src/geometries/CircleGeometry.js +101 -101
  652. package/src/geometries/ConeGeometry.js +31 -31
  653. package/src/geometries/CylinderGeometry.js +286 -286
  654. package/src/geometries/DodecahedronGeometry.js +66 -66
  655. package/src/geometries/EdgesGeometry.js +152 -152
  656. package/src/geometries/ExtrudeGeometry.js +814 -814
  657. package/src/geometries/Geometries.js +21 -21
  658. package/src/geometries/IcosahedronGeometry.js +42 -42
  659. package/src/geometries/LatheGeometry.js +189 -189
  660. package/src/geometries/OctahedronGeometry.js +37 -37
  661. package/src/geometries/PlaneGeometry.js +98 -98
  662. package/src/geometries/PolyhedronGeometry.js +319 -319
  663. package/src/geometries/RingGeometry.js +128 -128
  664. package/src/geometries/ShapeGeometry.js +195 -195
  665. package/src/geometries/SphereGeometry.js +137 -137
  666. package/src/geometries/TetrahedronGeometry.js +34 -34
  667. package/src/geometries/TorusGeometry.js +120 -120
  668. package/src/geometries/TorusKnotGeometry.js +167 -167
  669. package/src/geometries/TubeGeometry.js +203 -203
  670. package/src/geometries/WireframeGeometry.js +147 -147
  671. package/src/helpers/ArrowHelper.js +114 -114
  672. package/src/helpers/AxesHelper.js +68 -68
  673. package/src/helpers/Box3Helper.js +55 -55
  674. package/src/helpers/BoxHelper.js +113 -113
  675. package/src/helpers/CameraHelper.js +269 -269
  676. package/src/helpers/DirectionalLightHelper.js +93 -93
  677. package/src/helpers/GridHelper.js +56 -56
  678. package/src/helpers/HemisphereLightHelper.js +88 -88
  679. package/src/helpers/PlaneHelper.js +63 -63
  680. package/src/helpers/PointLightHelper.js +92 -92
  681. package/src/helpers/PolarGridHelper.js +96 -96
  682. package/src/helpers/SkeletonHelper.js +128 -128
  683. package/src/helpers/SpotLightHelper.js +111 -94
  684. package/src/lights/AmbientLight.js +17 -17
  685. package/src/lights/DirectionalLight.js +43 -43
  686. package/src/lights/DirectionalLightShadow.js +16 -16
  687. package/src/lights/HemisphereLight.js +34 -34
  688. package/src/lights/Light.js +58 -58
  689. package/src/lights/LightProbe.js +47 -47
  690. package/src/lights/LightShadow.js +147 -147
  691. package/src/lights/PointLight.js +57 -57
  692. package/src/lights/PointLightShadow.js +96 -96
  693. package/src/lights/RectAreaLight.js +56 -56
  694. package/src/lights/SpotLight.js +71 -71
  695. package/src/lights/SpotLightShadow.js +50 -50
  696. package/src/loaders/AnimationLoader.js +66 -66
  697. package/src/loaders/AudioLoader.js +66 -66
  698. package/src/loaders/BufferGeometryLoader.js +217 -217
  699. package/src/loaders/Cache.js +42 -42
  700. package/src/loaders/CompressedTextureLoader.js +134 -134
  701. package/src/loaders/CubeTextureLoader.js +58 -58
  702. package/src/loaders/DataTextureLoader.js +131 -135
  703. package/src/loaders/FileLoader.js +284 -284
  704. package/src/loaders/ImageBitmapLoader.js +123 -123
  705. package/src/loaders/ImageLoader.js +91 -91
  706. package/src/loaders/Loader.js +72 -72
  707. package/src/loaders/LoaderUtils.js +75 -75
  708. package/src/loaders/LoadingManager.js +142 -142
  709. package/src/loaders/MaterialLoader.js +373 -372
  710. package/src/loaders/ObjectLoader.js +1149 -1148
  711. package/src/loaders/TextureLoader.js +41 -41
  712. package/src/materials/LineBasicMaterial.js +49 -53
  713. package/src/materials/LineDashedMaterial.js +35 -35
  714. package/src/materials/Material.js +523 -522
  715. package/src/materials/Materials.js +39 -39
  716. package/src/materials/MeshBasicMaterial.js +84 -85
  717. package/src/materials/MeshDepthMaterial.js +54 -54
  718. package/src/materials/MeshDistanceMaterial.js +43 -43
  719. package/src/materials/MeshLambertMaterial.js +119 -120
  720. package/src/materials/MeshMatcapMaterial.js +81 -85
  721. package/src/materials/MeshNormalMaterial.js +61 -61
  722. package/src/materials/MeshPhongMaterial.js +123 -124
  723. package/src/materials/MeshPhysicalMaterial.js +224 -224
  724. package/src/materials/MeshStandardMaterial.js +127 -128
  725. package/src/materials/MeshToonMaterial.js +102 -106
  726. package/src/materials/PointsMaterial.js +50 -54
  727. package/src/materials/RawShaderMaterial.js +17 -17
  728. package/src/materials/ShaderMaterial.js +189 -190
  729. package/src/materials/ShadowMaterial.js +37 -37
  730. package/src/materials/SpriteMaterial.js +54 -54
  731. package/src/math/Box2.js +204 -204
  732. package/src/math/Box3.js +534 -534
  733. package/src/math/Color.js +623 -623
  734. package/src/math/ColorManagement.js +139 -139
  735. package/src/math/Cylindrical.js +61 -61
  736. package/src/math/Euler.js +315 -315
  737. package/src/math/Frustum.js +186 -186
  738. package/src/math/Interpolant.js +241 -241
  739. package/src/math/Line3.js +115 -115
  740. package/src/math/MathUtils.js +363 -363
  741. package/src/math/Matrix3.js +388 -388
  742. package/src/math/Matrix4.js +915 -915
  743. package/src/math/Plane.js +205 -205
  744. package/src/math/Quaternion.js +686 -685
  745. package/src/math/Ray.js +493 -493
  746. package/src/math/Sphere.js +245 -245
  747. package/src/math/Spherical.js +86 -86
  748. package/src/math/SphericalHarmonics3.js +243 -243
  749. package/src/math/Triangle.js +311 -311
  750. package/src/math/Vector2.js +480 -480
  751. package/src/math/Vector3.js +724 -724
  752. package/src/math/Vector4.js +644 -644
  753. package/src/math/interpolants/CubicInterpolant.js +150 -150
  754. package/src/math/interpolants/DiscreteInterpolant.js +26 -26
  755. package/src/math/interpolants/LinearInterpolant.js +38 -38
  756. package/src/math/interpolants/QuaternionLinearInterpolant.js +39 -39
  757. package/src/objects/BatchedMesh.js +1019 -1019
  758. package/src/objects/Bone.js +17 -17
  759. package/src/objects/Group.js +17 -17
  760. package/src/objects/InstancedMesh.js +267 -214
  761. package/src/objects/LOD.js +214 -214
  762. package/src/objects/Line.js +222 -222
  763. package/src/objects/LineLoop.js +17 -17
  764. package/src/objects/LineSegments.js +55 -55
  765. package/src/objects/Mesh.js +428 -429
  766. package/src/objects/Points.js +166 -166
  767. package/src/objects/Skeleton.js +277 -277
  768. package/src/objects/SkinnedMesh.js +257 -257
  769. package/src/objects/Sprite.js +181 -181
  770. package/src/renderers/WebGL1Renderer.js +7 -7
  771. package/src/renderers/WebGL3DRenderTarget.js +22 -22
  772. package/src/renderers/WebGLArrayRenderTarget.js +22 -22
  773. package/src/renderers/WebGLCubeRenderTarget.js +146 -155
  774. package/src/renderers/WebGLRenderTarget.js +15 -15
  775. package/src/renderers/WebGLRenderer.js +2615 -2631
  776. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -7
  777. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -68
  778. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -7
  779. package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -7
  780. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -16
  781. package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -5
  782. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -26
  783. package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -8
  784. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -19
  785. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -5
  786. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -9
  787. package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -9
  788. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -33
  789. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -43
  790. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -7
  791. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -10
  792. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -21
  793. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -78
  794. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -9
  795. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -7
  796. package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -7
  797. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +11 -11
  798. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +11 -11
  799. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +11 -11
  800. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +23 -23
  801. package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -3
  802. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +44 -44
  803. package/src/renderers/shaders/ShaderChunk/common.glsl.js +147 -147
  804. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -186
  805. package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -5
  806. package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -5
  807. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -63
  808. package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -9
  809. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -7
  810. package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -7
  811. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -20
  812. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +9 -9
  813. package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -7
  814. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +15 -14
  815. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +62 -62
  816. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -21
  817. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -22
  818. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -69
  819. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -37
  820. package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -17
  821. package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -19
  822. package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -7
  823. package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -7
  824. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -27
  825. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -120
  826. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -14
  827. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +10 -10
  828. package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -8
  829. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +202 -202
  830. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +13 -13
  831. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +40 -40
  832. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -5
  833. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -28
  834. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +228 -228
  835. package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -7
  836. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -32
  837. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +151 -151
  838. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +562 -562
  839. package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -4
  840. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -26
  841. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -9
  842. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -9
  843. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +16 -16
  844. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +22 -22
  845. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +21 -21
  846. package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +11 -11
  847. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -27
  848. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -27
  849. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -12
  850. package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -7
  851. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -24
  852. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  853. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +27 -27
  854. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +47 -38
  855. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +36 -36
  856. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -76
  857. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +33 -33
  858. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -14
  859. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -14
  860. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -14
  861. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -43
  862. package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -11
  863. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +68 -68
  864. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +8 -8
  865. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -19
  866. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -12
  867. package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -7
  868. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +314 -314
  869. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +68 -68
  870. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +68 -68
  871. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -66
  872. package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -10
  873. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -25
  874. package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -15
  875. package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -20
  876. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -14
  877. package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -7
  878. package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -7
  879. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +192 -169
  880. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -36
  881. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +201 -201
  882. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -119
  883. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -145
  884. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -122
  885. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -21
  886. package/src/renderers/shaders/ShaderChunk.js +272 -274
  887. package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -40
  888. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +63 -62
  889. package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -36
  890. package/src/renderers/shaders/ShaderLib/depth.glsl.js +97 -95
  891. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +78 -76
  892. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -35
  893. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -77
  894. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -117
  895. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +125 -126
  896. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -113
  897. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +87 -89
  898. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +127 -128
  899. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +225 -226
  900. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +119 -120
  901. package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -88
  902. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -57
  903. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +81 -81
  904. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +53 -53
  905. package/src/renderers/shaders/ShaderLib.js +360 -367
  906. package/src/renderers/shaders/UniformsLib.js +231 -236
  907. package/src/renderers/shaders/UniformsUtils.js +104 -104
  908. package/src/renderers/webgl/WebGLAnimation.js +53 -53
  909. package/src/renderers/webgl/WebGLAttributes.js +229 -229
  910. package/src/renderers/webgl/WebGLBackground.js +257 -239
  911. package/src/renderers/webgl/WebGLBindingStates.js +631 -631
  912. package/src/renderers/webgl/WebGLBufferRenderer.js +92 -92
  913. package/src/renderers/webgl/WebGLCapabilities.js +120 -120
  914. package/src/renderers/webgl/WebGLClipping.js +171 -171
  915. package/src/renderers/webgl/WebGLCubeMaps.js +99 -99
  916. package/src/renderers/webgl/WebGLCubeUVMaps.js +132 -132
  917. package/src/renderers/webgl/WebGLExtensions.js +97 -97
  918. package/src/renderers/webgl/WebGLGeometries.js +211 -211
  919. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +102 -102
  920. package/src/renderers/webgl/WebGLInfo.js +71 -71
  921. package/src/renderers/webgl/WebGLLights.js +590 -590
  922. package/src/renderers/webgl/WebGLMaterials.js +590 -576
  923. package/src/renderers/webgl/WebGLMorphtargets.js +307 -300
  924. package/src/renderers/webgl/WebGLObjects.js +92 -92
  925. package/src/renderers/webgl/WebGLProgram.js +1120 -1112
  926. package/src/renderers/webgl/WebGLPrograms.js +664 -663
  927. package/src/renderers/webgl/WebGLProperties.js +48 -48
  928. package/src/renderers/webgl/WebGLRenderLists.js +238 -238
  929. package/src/renderers/webgl/WebGLRenderStates.js +107 -107
  930. package/src/renderers/webgl/WebGLShader.js +12 -12
  931. package/src/renderers/webgl/WebGLShaderCache.js +124 -124
  932. package/src/renderers/webgl/WebGLShadowMap.js +424 -424
  933. package/src/renderers/webgl/WebGLState.js +1318 -1328
  934. package/src/renderers/webgl/WebGLTextures.js +2213 -2117
  935. package/src/renderers/webgl/WebGLUniforms.js +1156 -1156
  936. package/src/renderers/webgl/WebGLUniformsGroups.js +392 -392
  937. package/src/renderers/webgl/WebGLUtils.js +283 -283
  938. package/src/renderers/webxr/WebXRController.js +343 -343
  939. package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
  940. package/src/renderers/webxr/WebXRManager.js +824 -840
  941. package/src/scenes/Fog.js +38 -38
  942. package/src/scenes/FogExp2.js +35 -35
  943. package/src/scenes/Scene.js +71 -63
  944. package/src/textures/CanvasTexture.js +17 -17
  945. package/src/textures/CompressedArrayTexture.js +18 -18
  946. package/src/textures/CompressedCubeTexture.js +19 -19
  947. package/src/textures/CompressedTexture.js +28 -28
  948. package/src/textures/CubeTexture.js +33 -33
  949. package/src/textures/Data3DTexture.js +35 -35
  950. package/src/textures/DataArrayTexture.js +27 -27
  951. package/src/textures/DataTexture.js +22 -22
  952. package/src/textures/DepthTexture.js +58 -58
  953. package/src/textures/FramebufferTexture.js +23 -23
  954. package/src/textures/Source.js +128 -127
  955. package/src/textures/Texture.js +310 -338
  956. package/src/textures/VideoTexture.js +55 -55
  957. package/src/utils.js +91 -91
  958. package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  959. package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
  960. package/src/renderers/shaders/ShaderChunk/occlusion_fragment.glsl.js +0 -20
  961. package/src/renderers/shaders/ShaderChunk/occlusion_pars_fragment.glsl.js +0 -97
@@ -1,1665 +1,1665 @@
1
- var UTIF = {};
2
-
3
- // Following lines add a JPEG decoder to UTIF.JpegDecoder
4
- (function(){"use strict";var W=function a1(){function W(p){this.message="JPEG error: "+p}W.prototype=new Error;W.prototype.name="JpegError";W.constructor=W;return W}(),ak=function ag(){var p=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,ac=799,ah=3406,ao=2276,ar=1567,ai=3784,s=5793,ad=2896;function ak(Q){if(Q==null)Q={};if(Q.w==null)Q.w=-1;this.V=Q.n;this.N=Q.w}function a5(Q,h){var f=0,G=[],n,E,a=16,F;while(a>0&&!Q[a-1]){a--}G.push({children:[],index:0});var C=G[0];for(n=0;n<a;n++)
5
- {for(E=0;E<Q[n];E++){C=G.pop();C.children[C.index]=h[f];while(C.index>0){C=G.pop()}C.index++;G.push(C);while(G.length<=n){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}f++}if(n+1<a){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}}return G[0].children}function a2(Q,h,f){return 64*((Q.P+1)*h+f)}function a7(Q,h,f,G,n,E,a,C,F,d){if(d==null)d=!1;var T=f.m,U=f.Z,z=h,J=0,V=0,r=0,D=0,a8,q=0,X,O,_,N,e,K,x=0,k,g,R,c;function Y(){if(V>0){V--;return J>>V&1}J=Q[h++];if(J===255){var I=Q[h++];if(I){if(I===220&&d){h+=2;var l=Z(Q,h);h+=2;if(l>0&&l!==f.s){throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",l)}}else if(I===217){if(d){var M=q*8;
6
- if(M>0&&M<f.s/10){throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, "+"possibly caused by incorrect `scanLines` parameter",M)}}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new W("unexpected marker")}}V=7;return J>>>7}function u(I){var l=I;while(!0){l=l[Y()];switch(typeof l){case"number":return l;case"object":continue}throw new W("invalid huffman sequence")}}function m(I){var e=0;while(I>0){e=e<<1|Y();I--}return e}function j(I){if(I===1){return Y()===1?1:-1}var e=m(I);if(e>=1<<I-1){return e}return e+(-1<<I)+1}function v(X,I){var l=u(X.J),M=l===0?0:j(l),N=1;
7
- X.D[I]=X.Q+=M;while(N<64){var S=u(X.i),i=S&15,A=S>>4;if(i===0){if(A<15){break}N+=16;continue}N+=A;var o=p[N];X.D[I+o]=j(i);N++}}function $(X,I){var l=u(X.J),M=l===0?0:j(l)<<F;X.D[I]=X.Q+=M}function b(X,I){X.D[I]|=Y()<<F}function P(X,I){if(r>0){r--;return}var N=E,l=a;while(N<=l){var M=u(X.i),S=M&15,i=M>>4;if(S===0){if(i<15){r=m(i)+(1<<i)-1;break}N+=16;continue}N+=i;var A=p[N];X.D[I+A]=j(S)*(1<<F);N++}}function a4(X,I){var N=E,l=a,M=0,S,i;while(N<=l){var A=I+p[N],o=X.D[A]<0?-1:1;switch(D){case 0:i=u(X.i);S=i&15;M=i>>4;if(S===0){if(M<15){r=m(M)+(1<<M);D=4}else{M=16;D=1}}else{if(S!==1){throw new W("invalid ACn encoding")}a8=j(S);D=M?2:3}continue;case 1:case 2:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{M--;if(M===0){D=D===2?3:0}}break;case 3:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{X.D[A]=a8<<F;
8
- D=0}break;case 4:if(X.D[A]){X.D[A]+=o*(Y()<<F)}break}N++}if(D===4){r--;if(r===0){D=0}}}function H(X,I,x,l,M){var S=x/T|0,i=x%T;q=S*X.A+l;var A=i*X.h+M,o=a2(X,q,A);I(X,o)}function w(X,I,x){q=x/X.P|0;var l=x%X.P,M=a2(X,q,l);I(X,M)}var y=G.length;if(U){if(E===0){K=C===0?$:b}else{K=C===0?P:a4}}else{K=v}if(y===1){g=G[0].P*G[0].c}else{g=T*f.R}while(x<=g){var L=n?Math.min(g-x,n):g;if(L>0){for(O=0;O<y;O++){G[O].Q=0}r=0;if(y===1){X=G[0];for(e=0;e<L;e++){w(X,K,x);x++}}else{for(e=0;e<L;
9
- e++){for(O=0;O<y;O++){X=G[O];R=X.h;c=X.A;for(_=0;_<c;_++){for(N=0;N<R;N++){H(X,K,x,_,N)}}}x++}}}V=0;k=an(Q,h);if(!k){break}if(k.u){var a6=L>0?"unexpected":"excessive";h=k.offset}if(k.M>=65488&&k.M<=65495){h+=2}else{break}}return h-z}function al(Q,h,f){var G=Q.$,n=Q.D,E,a,C,F,d,T,U,z,J,V,Y,u,m,j,v,$,b;if(!G){throw new W("missing required Quantization Table.")}for(var r=0;r<64;r+=8){J=n[h+r];V=n[h+r+1];Y=n[h+r+2];u=n[h+r+3];m=n[h+r+4];j=n[h+r+5];v=n[h+r+6];$=n[h+r+7];J*=G[r];if((V|Y|u|m|j|v|$)===0){b=s*J+512>>10;f[r]=b;f[r+1]=b;f[r+2]=b;f[r+3]=b;f[r+4]=b;f[r+5]=b;f[r+6]=b;f[r+7]=b;continue}V*=G[r+1];Y*=G[r+2];u*=G[r+3];m*=G[r+4];j*=G[r+5];v*=G[r+6];$*=G[r+7];E=s*J+128>>8;a=s*m+128>>8;C=Y;F=v;d=ad*(V-$)+128>>8;z=ad*(V+$)+128>>8;
10
- T=u<<4;U=j<<4;E=E+a+1>>1;a=E-a;b=C*ai+F*ar+128>>8;C=C*ar-F*ai+128>>8;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;b=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;f[r]=E+z;f[r+7]=E-z;f[r+1]=a+U;f[r+6]=a-U;f[r+2]=C+T;f[r+5]=C-T;f[r+3]=F+d;f[r+4]=F-d}for(var P=0;P<8;++P){J=f[P];V=f[P+8];Y=f[P+16];u=f[P+24];m=f[P+32];j=f[P+40];v=f[P+48];$=f[P+56];if((V|Y|u|m|j|v|$)===0){b=s*J+8192>>14;if(b<-2040){b=0}else if(b>=2024){b=255}else{b=b+2056>>4}n[h+P]=b;n[h+P+8]=b;n[h+P+16]=b;n[h+P+24]=b;n[h+P+32]=b;n[h+P+40]=b;n[h+P+48]=b;n[h+P+56]=b;continue}E=s*J+2048>>12;a=s*m+2048>>12;C=Y;F=v;d=ad*(V-$)+2048>>12;z=ad*(V+$)+2048>>12;T=u;U=j;E=(E+a+1>>1)+4112;a=E-a;b=C*ai+F*ar+2048>>12;C=C*ar-F*ai+2048>>12;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;
11
- b=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;J=E+z;$=E-z;V=a+U;v=a-U;Y=C+T;j=C-T;u=F+d;m=F-d;if(J<16){J=0}else if(J>=4080){J=255}else{J>>=4}if(V<16){V=0}else if(V>=4080){V=255}else{V>>=4}if(Y<16){Y=0}else if(Y>=4080){Y=255}else{Y>>=4}if(u<16){u=0}else if(u>=4080){u=255}else{u>>=4}if(m<16){m=0}else if(m>=4080){m=255}else{m>>=4}if(j<16){j=0}else if(j>=4080){j=255}else{j>>=4}if(v<16){v=0}else if(v>=4080){v=255}else{v>>=4}if($<16){$=0}else if($>=4080){$=255}else{$>>=4}n[h+P]=J;
12
- n[h+P+8]=V;n[h+P+16]=Y;n[h+P+24]=u;n[h+P+32]=m;n[h+P+40]=j;n[h+P+48]=v;n[h+P+56]=$}}function a0(Q,h){var f=h.P,G=h.c,n=new Int16Array(64);for(var E=0;E<G;E++){for(var a=0;a<f;a++){var C=a2(h,E,a);al(h,C,n)}}return h.D}function an(Q,h,f){if(f==null)f=h;var G=Q.length-1,n=f<h?f:h;if(h>=G){return null}var E=Z(Q,h);if(E>=65472&&E<=65534){return{u:null,M:E,offset:h}}var a=Z(Q,n);while(!(a>=65472&&a<=65534)){if(++n>=G){return null}a=Z(Q,n)}return{u:E.toString(16),M:a,offset:n}}ak.prototype={parse(Q,h){if(h==null)h={};
13
- var f=h.F,E=0,a=null,C=null,F,d,T=0;function G(){var o=Z(Q,E);E+=2;var B=E+o-2,V=an(Q,B,E);if(V&&V.u){B=V.offset}var ab=Q.subarray(E,B);E+=ab.length;return ab}function n(F){var o=Math.ceil(F.o/8/F.X),B=Math.ceil(F.s/8/F.B);for(var Y=0;Y<F.W.length;Y++){R=F.W[Y];var ab=Math.ceil(Math.ceil(F.o/8)*R.h/F.X),af=Math.ceil(Math.ceil(F.s/8)*R.A/F.B),ap=o*R.h,aq=B*R.A,ae=64*aq*(ap+1);R.D=new Int16Array(ae);R.P=ab;R.c=af}F.m=o;F.R=B}var U=[],z=[],J=[],V=Z(Q,E);E+=2;if(V!==65496){throw new W("SOI not found")}V=Z(Q,E);
14
- E+=2;markerLoop:while(V!==65497){var Y,u,m;switch(V){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var j=G();if(V===65504){if(j[0]===74&&j[1]===70&&j[2]===73&&j[3]===70&&j[4]===0){a={version:{d:j[5],T:j[6]},K:j[7],j:j[8]<<8|j[9],H:j[10]<<8|j[11],S:j[12],I:j[13],C:j.subarray(14,14+3*j[12]*j[13])}}}if(V===65518){if(j[0]===65&&j[1]===100&&j[2]===111&&j[3]===98&&j[4]===101){C={version:j[5]<<8|j[6],k:j[7]<<8|j[8],q:j[9]<<8|j[10],a:j[11]}}}break;
15
- case 65499:var v=Z(Q,E),b;E+=2;var $=v+E-2;while(E<$){var r=Q[E++],P=new Uint16Array(64);if(r>>4===0){for(u=0;u<64;u++){b=p[u];P[b]=Q[E++]}}else if(r>>4===1){for(u=0;u<64;u++){b=p[u];P[b]=Z(Q,E);E+=2}}else{throw new W("DQT - invalid table spec")}U[r&15]=P}break;case 65472:case 65473:case 65474:if(F){throw new W("Only single frame JPEGs supported")}E+=2;F={};F.G=V===65473;F.Z=V===65474;F.precision=Q[E++];var D=Z(Q,E),a4,q=0,H=0;E+=2;F.s=f||D;F.o=Z(Q,E);E+=2;F.W=[];F._={};var a8=Q[E++];for(Y=0;Y<a8;Y++){a4=Q[E];var w=Q[E+1]>>4,y=Q[E+1]&15;if(q<w){q=w}if(H<y){H=y}var X=Q[E+2];m=F.W.push({h:w,A:y,L:X,$:null});F._[a4]=m-1;E+=3}F.X=q;F.B=H;n(F);break;case 65476:var O=Z(Q,E);E+=2;
16
- for(Y=2;Y<O;){var _=Q[E++],N=new Uint8Array(16),e=0;for(u=0;u<16;u++,E++){e+=N[u]=Q[E]}var K=new Uint8Array(e);for(u=0;u<e;u++,E++){K[u]=Q[E]}Y+=17+e;(_>>4===0?J:z)[_&15]=a5(N,K)}break;case 65501:E+=2;d=Z(Q,E);E+=2;break;case 65498:var x=++T===1&&!f,R;E+=2;var k=Q[E++],g=[];for(Y=0;Y<k;Y++){var c=Q[E++],L=F._[c];R=F.W[L];R.index=c;var a6=Q[E++];R.J=J[a6>>4];R.i=z[a6&15];g.push(R)}var I=Q[E++],l=Q[E++],M=Q[E++];try{var S=a7(Q,E,F,g,d,I,l,M>>4,M&15,x);E+=S}catch(ex){if(ex instanceof DNLMarkerError){return this.parse(Q,{F:ex.s})}else if(ex instanceof EOIMarkerError){break markerLoop}throw ex}break;case 65500:E+=4;break;case 65535:if(Q[E]!==255){E--}break;default:var i=an(Q,E-2,E-3);if(i&&i.u){E=i.offset;break}if(E>=Q.length-1){break markerLoop}throw new W("JpegImage.parse - unknown marker: "+V.toString(16))}V=Z(Q,E);E+=2}this.width=F.o;this.height=F.s;this.g=a;this.b=C;this.W=[];for(Y=0;Y<F.W.length;Y++){R=F.W[Y];
17
- var A=U[R.L];if(A){R.$=A}this.W.push({index:R.index,e:a0(F,R),l:R.h/F.X,t:R.A/F.B,P:R.P,c:R.c})}this.p=this.W.length;return undefined},Y(Q,h,f){if(f==null)f=!1;var G=this.width/Q,n=this.height/h,E,a,C,F,d,T,U,z,J,V,Y=0,u,m=this.W.length,j=Q*h*m,v=new Uint8ClampedArray(j),$=new Uint32Array(Q),b=4294967288,r;for(U=0;U<m;U++){E=this.W[U];a=E.l*G;C=E.t*n;Y=U;u=E.e;F=E.P+1<<3;if(a!==r){for(d=0;d<Q;d++){z=0|d*a;$[d]=(z&b)<<3|z&7}r=a}for(T=0;T<h;T++){z=0|T*C;V=F*(z&b)|(z&7)<<3;for(d=0;d<Q;d++){v[Y]=u[V+$[d]];Y+=m}}}var P=this.V;if(!f&&m===4&&!P){P=new Int32Array([-256,255,-256,255,-256,255,-256,255])}if(P){for(U=0;U<j;){for(z=0,J=0;z<m;z++,U++,J+=2){v[U]=(v[U]*P[J]>>8)+P[J+1]}}}return v},get f(){if(this.b){return!!this.b.a}if(this.p===3){if(this.N===0){return!1}else if(this.W[0].index===82&&this.W[1].index===71&&this.W[2].index===66){return!1}return!0}if(this.N===1){return!0}return!1},z:function aj(Q){var h,f,G;
18
- for(var n=0,E=Q.length;n<E;n+=3){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=h-179.456+1.402*G;Q[n+1]=h+135.459-.344*f-.714*G;Q[n+2]=h-226.816+1.772*f}return Q},O:function aa(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=-122.67195406894+f*(-660635669420364e-19*f+.000437130475926232*G-54080610064599e-18*h+.00048449797120281*n-.154362151871126)+G*(-.000957964378445773*G+.000817076911346625*h-.00477271405408747*n+1.53380253221734)+h*(.000961250184130688*h-.00266257332283933*n+.48357088451265)+n*(-.000336197177618394*n+.484791561490776);
19
- Q[E++]=107.268039397724+f*(219927104525741e-19*f-.000640992018297945*G+.000659397001245577*h+.000426105652938837*n-.176491792462875)+G*(-.000778269941513683*G+.00130872261408275*h+.000770482631801132*n-.151051492775562)+h*(.00126935368114843*h-.00265090189010898*n+.25802910206845)+n*(-.000318913117588328*n-.213742400323665);Q[E++]=-20.810012546947+f*(-.000570115196973677*f-263409051004589e-19*G+.0020741088115012*h-.00288260236853442*n+.814272968359295)+G*(-153496057440975e-19*G-.000132689043961446*h+.000560833691242812*n-.195152027534049)+h*(.00174418132927582*h-.00255243321439347*n+.116935020465145)+n*(-.000343531996510555*n+.24165260232407)}return Q.subarray(0,E)},r:function a3(Q){var h,f,G;
20
- for(var n=0,E=Q.length;n<E;n+=4){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=434.456-h-1.402*G;Q[n+1]=119.541-h+.344*f+.714*G;Q[n+2]=481.816-h-1.772*f}return Q},U:function as(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=255+h*(-6747147073602441e-20*h+.0008379262121013727*f+.0002894718188643294*G+.003264231057537806*n-1.1185611867203937)+f*(26374107616089404e-21*f-8626949158638572e-20*G-.0002748769067499491*n-.02155688794978967)+G*(-3878099212869363e-20*G-.0003267808279485286*n+.0686742238595345)-n*(.0003361971776183937*n+.7430659151342254);
21
- Q[E++]=255+h*(.00013596372813588848*h+.000924537132573585*f+.00010567359618683593*G+.0004791864687436512*n-.3109689587515875)+f*(-.00023545346108370344*f+.0002702845253534714*G+.0020200308977307156*n-.7488052167015494)+G*(6834815998235662e-20*G+.00015168452363460973*n-.09751927774728933)-n*(.0003189131175883281*n+.7364883807733168);Q[E++]=255+h*(13598650411385308e-21*h+.00012423956175490851*f+.0004751985097583589*G-36729317476630424e-22*n-.05562186980264034)+f*(.00016141380598724676*f+.0009692239130725186*G+.0007782692450036253*n-.44015232367526463)+G*(5.068882914068769e-7*G+.0017778369011375071*n-.7591454649749609)-n*(.0003435319965105553*n+.7063770186160144)}return Q.subarray(0,E)},getData:function(Q){var h=Q.width,f=Q.height,G=Q.forceRGB,n=Q.isSourcePDF;
22
- if(this.p>4){throw new W("Unsupported color mode")}var E=this.Y(h,f,n);if(this.p===1&&G){var a=E.length,C=new Uint8ClampedArray(a*3),F=0;for(var d=0;d<a;d++){var T=E[d];C[F++]=T;C[F++]=T;C[F++]=T}return C}else if(this.p===3&&this.f){return this.z(E)}else if(this.p===4){if(this.f){if(G){return this.O(E)}return this.r(E)}else if(G){return this.U(E)}}return E}};return ak}();function a9(p,t){return p[t]<<24>>24}function Z(p,t){return p[t]<<8|p[t+1]}function am(p,t){return(p[t]<<24|p[t+1]<<16|p[t+2]<<8|p[t+3])>>>0}UTIF.JpegDecoder=ak}());
23
-
24
- //UTIF.JpegDecoder = PDFJS.JpegImage;
25
-
26
-
27
- UTIF.encodeImage = function(rgba, w, h, metadata)
28
- {
29
- var idf = { "t256":[w], "t257":[h], "t258":[8,8,8,8], "t259":[1], "t262":[2], "t273":[1000], // strips offset
30
- "t277":[4], "t278":[h], /* rows per strip */ "t279":[w*h*4], // strip byte counts
31
- "t282":[[72,1]], "t283":[[72,1]], "t284":[1], "t286":[[0,1]], "t287":[[0,1]], "t296":[1], "t305": ["Photopea (UTIF.js)"], "t338":[1]
32
- };
33
- if (metadata) for (var i in metadata) idf[i] = metadata[i];
34
-
35
- var prfx = new Uint8Array(UTIF.encode([idf]));
36
- var img = new Uint8Array(rgba);
37
- var data = new Uint8Array(1000+w*h*4);
38
- for(var i=0; i<prfx.length; i++) data[i] = prfx[i];
39
- for(var i=0; i<img .length; i++) data[1000+i] = img[i];
40
- return data.buffer;
41
- }
42
-
43
- UTIF.encode = function(ifds)
44
- {
45
- var LE = false;
46
- var data = new Uint8Array(20000), offset = 4, bin = LE ? UTIF._binLE : UTIF._binBE;
47
- data[0]=data[1]=LE?73:77; bin.writeUshort(data,2,42);
48
-
49
- var ifdo = 8;
50
- bin.writeUint(data, offset, ifdo); offset+=4;
51
- for(var i=0; i<ifds.length; i++)
52
- {
53
- var noffs = UTIF._writeIFD(bin, UTIF._types.basic, data, ifdo, ifds[i]);
54
- ifdo = noffs[1];
55
- if(i<ifds.length-1) {
56
- if((ifdo&3)!=0) ifdo+=(4-(ifdo&3)); // make each IFD start at multiple of 4
57
- bin.writeUint(data, noffs[0], ifdo);
58
- }
59
- }
60
- return data.slice(0, ifdo).buffer;
61
- }
62
-
63
- UTIF.decode = function(buff, prm)
64
- {
65
- if(prm==null) prm = {parseMN:true, debug:false}; // read MakerNote, debug
66
- var data = new Uint8Array(buff), offset = 0;
67
-
68
- var id = UTIF._binBE.readASCII(data, offset, 2); offset+=2;
69
- var bin = id=="II" ? UTIF._binLE : UTIF._binBE;
70
- var num = bin.readUshort(data, offset); offset+=2;
71
-
72
- var ifdo = bin.readUint(data, offset); offset+=4;
73
- var ifds = [];
74
- while(true) {
75
- var cnt = bin.readUshort(data,ifdo), typ = bin.readUshort(data,ifdo+4); if(cnt!=0) if(typ<1 || 13<typ) { log("error in TIFF"); break };
76
- UTIF._readIFD(bin, data, ifdo, ifds, 0, prm);
77
-
78
- ifdo = bin.readUint(data, ifdo+2+cnt*12);
79
- if(ifdo==0) break;
80
- }
81
- return ifds;
82
- }
83
-
84
- UTIF.decodeImage = function(buff, img, ifds)
85
- {
86
- if(img.data) return;
87
- var data = new Uint8Array(buff);
88
- var id = UTIF._binBE.readASCII(data, 0, 2);
89
-
90
- if(img["t256"]==null) return; // No width => probably not an image
91
- img.isLE = id=="II";
92
- img.width = img["t256"][0]; //delete img["t256"];
93
- img.height = img["t257"][0]; //delete img["t257"];
94
-
95
- var cmpr = img["t259"] ? img["t259"][0] : 1; //delete img["t259"];
96
- var fo = img["t266"] ? img["t266"][0] : 1; //delete img["t266"];
97
- if(img["t284"] && img["t284"][0]==2) log("PlanarConfiguration 2 should not be used!");
98
- if(cmpr==7 && img["t258"] && img["t258"].length>3) img["t258"]=img["t258"].slice(0,3);
99
-
100
- var spp = img["t277"]?img["t277"][0]:1;
101
- var bps = img["t258"]?img["t258"][0]:1;
102
- var bipp = bps*spp; // bits per pixel
103
- /*
104
- var bipp; // bits per pixel
105
- if(img["t258"]) bipp = Math.min(32,img["t258"][0])*img["t258"].length;
106
- else bipp = (img["t277"]?img["t277"][0]:1);
107
- */
108
- // Some .NEF files have t258==14, even though they use 16 bits per pixel
109
- if(cmpr==1 && img["t279"]!=null && img["t278"] && img["t262"][0]==32803) {
110
- bipp = Math.round((img["t279"][0]*8)/(img.width*img["t278"][0]));
111
- }
112
- if(img["t50885"] && img["t50885"][0]==4) bipp = img["t258"][0]*3; // RAW_CANON_40D_SRAW_V103.CR2
113
- var bipl = Math.ceil(img.width*bipp/8)*8;
114
- var soff = img["t273"]; if(soff==null || img["t322"]) soff = img["t324"];
115
- var bcnt = img["t279"]; if(cmpr==1 && soff.length==1) bcnt = [img.height*(bipl>>>3)]; if(bcnt==null || img["t322"]) bcnt = img["t325"];
116
- //bcnt[0] = Math.min(bcnt[0], data.length); // Hasselblad, "RAW_HASSELBLAD_H3D39II.3FR"
117
- var bytes = new Uint8Array(img.height*(bipl>>>3)), bilen = 0;
118
-
119
- if(img["t322"]!=null) // tiled
120
- {
121
- var tw = img["t322"][0], th = img["t323"][0];
122
- var tx = Math.floor((img.width + tw - 1) / tw);
123
- var ty = Math.floor((img.height + th - 1) / th);
124
- var tbuff = new Uint8Array(Math.ceil(tw*th*bipp/8)|0);
125
- console.log("====", tx,ty);
126
- for(var y=0; y<ty; y++)
127
- for(var x=0; x<tx; x++)
128
- {
129
- var i = y*tx+x; tbuff.fill(0);
130
- UTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo,tw,th);
131
- // Might be required for 7 too. Need to check
132
- if (cmpr==6) bytes = tbuff;
133
- else UTIF._copyTile(tbuff, Math.ceil(tw*bipp/8)|0, th, bytes, Math.ceil(img.width*bipp/8)|0, img.height, Math.ceil(x*tw*bipp/8)|0, y*th);
134
- }
135
- bilen = bytes.length*8;
136
- }
137
- else // stripped
138
- {
139
- if(soff==null) return;
140
- var rps = img["t278"] ? img["t278"][0] : img.height; rps = Math.min(rps, img.height);
141
- //console.log("====", img.width, rps);
142
- for(var i=0; i<soff.length; i++)
143
- {
144
- UTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen/8)|0, fo,img.width,rps);
145
- bilen += bipl * rps;
146
- }
147
- bilen = Math.min(bilen, bytes.length*8);
148
- }
149
- img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen/8)|0);
150
- }
151
-
152
- UTIF.decode._decompress = function(img,ifds, data, off, len, cmpr, tgt, toff, fo, w, h) // fill order
153
- {
154
- if(img["t271"] && img["t271"][0]=="Panasonic" && img["t45"] && img["t45"][0]==6) cmpr = 34316;
155
- //console.log("compression", cmpr);
156
- //var time = Date.now();
157
- if(false) {}
158
- else if(cmpr==1/* || (len==tgt.length && cmpr!=32767)*/) for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];
159
- else if(cmpr==2) UTIF.decode._decodeG2 (data, off, len, tgt, toff, w, fo);
160
- else if(cmpr==3) UTIF.decode._decodeG3 (data, off, len, tgt, toff, w, fo, img["t292"]?((img["t292"][0]&1)==1):false);
161
- else if(cmpr==4) UTIF.decode._decodeG4 (data, off, len, tgt, toff, w, fo);
162
- else if(cmpr==5) UTIF.decode._decodeLZW(data, off, len, tgt, toff,8);
163
- else if(cmpr==6) UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);
164
- else if(cmpr==7 || cmpr==34892) UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);
165
- else if(cmpr==8 || cmpr==32946) { var src = new Uint8Array(data.buffer,off+2,len-6); var bin = UTIF._inflateRaw(src); if(toff+bin.length<=tgt.length) tgt.set(bin,toff); }
166
- else if(cmpr==9) UTIF.decode._decodeVC5(data,off,len,tgt,toff,img["t33422"]);
167
- else if(cmpr==32767) UTIF.decode._decodeARW(img, data, off, len, tgt, toff);
168
- else if(cmpr==32773) UTIF.decode._decodePackBits(data, off, len, tgt, toff);
169
- else if(cmpr==32809) UTIF.decode._decodeThunder (data, off, len, tgt, toff);
170
- else if(cmpr==34316) UTIF.decode._decodePanasonic(img,data,off, len, tgt, toff);
171
- else if(cmpr==34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];
172
- UTIF.decode._decodeNikon (img,ifds, data, off, len, tgt, toff);
173
- else if(cmpr==34676) UTIF.decode._decodeLogLuv32(img,data, off, len, tgt, toff);
174
- else log("Unknown compression", cmpr);
175
-
176
- //console.log(Date.now()-time);
177
-
178
- var bps = (img["t258"]?Math.min(32,img["t258"][0]):1);
179
- var noc = (img["t277"]?img["t277"][0]:1), bpp=(bps*noc)>>>3, bpl = Math.ceil(bps*noc*w/8);
180
-
181
- // convert to Little Endian /*
182
- if(bps==16 && !img.isLE && img["t33422"]==null) // not DNG
183
- for(var y=0; y<h; y++) {
184
- //console.log("fixing endianity");
185
- var roff = toff+y*bpl;
186
- for(var x=1; x<bpl; x+=2) { var t=tgt[roff+x]; tgt[roff+x]=tgt[roff+x-1]; tgt[roff+x-1]=t; }
187
- } //*/
188
-
189
- if(img["t317"] && img["t317"][0]==2)
190
- {
191
- for(var y=0; y<h; y++)
192
- {
193
- var ntoff = toff+y*bpl;
194
- if(bps==16) for(var j=bpp; j<bpl; j+=2) {
195
- var nv = ((tgt[ntoff+j+1]<<8)|tgt[ntoff+j]) + ((tgt[ntoff+j-bpp+1]<<8)|tgt[ntoff+j-bpp]);
196
- tgt[ntoff+j] = nv&255; tgt[ntoff+j+1] = (nv>>>8)&255;
197
- }
198
- else if(noc==3) for(var j= 3; j<bpl; j+=3)
199
- {
200
- tgt[ntoff+j ] = (tgt[ntoff+j ] + tgt[ntoff+j-3])&255;
201
- tgt[ntoff+j+1] = (tgt[ntoff+j+1] + tgt[ntoff+j-2])&255;
202
- tgt[ntoff+j+2] = (tgt[ntoff+j+2] + tgt[ntoff+j-1])&255;
203
- }
204
- else for(var j=bpp; j<bpl; j++) tgt[ntoff+j] = (tgt[ntoff+j] + tgt[ntoff+j-bpp])&255;
205
- }
206
- }
207
- }
208
-
209
- UTIF.decode._decodePanasonic = function(img, data, off, len, tgt, toff) {
210
-
211
- var img_buffer = data.buffer;
212
-
213
- var rawWidth = img["t2"][0];
214
- var rawHeight = img["t3"][0];
215
- var bitsPerSample = img["t10"][0];
216
- var RW2_Format = img["t45"][0];
217
-
218
- var bidx = 0;
219
- var imageIndex = 0;
220
- var vpos = 0;
221
- var byte = 0;
222
- var arr_a, arr_b;
223
- var bytes = (RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16));
224
- var i, j, sh, pred=[0,0], nonz=[0,0], isOdd, idx = 0, pixel_base;
225
- var row, col, crow;
226
- var buffer = new Uint8Array(0x4000);
227
- var result = new Uint16Array(tgt.buffer);
228
-
229
- function getDataRaw(bits){
230
- if (vpos == 0) {
231
- var arr_a = new Uint8Array(img_buffer, off+imageIndex + 0x1ff8, 0x4000-0x1ff8);
232
- var arr_b = new Uint8Array(img_buffer, off+imageIndex, 0x1ff8);
233
- buffer.set(arr_a);
234
- buffer.set(arr_b, arr_a.length);
235
- imageIndex += 0x4000;
236
- }
237
- if(RW2_Format == 5) {
238
- for (i = 0; i < 16; i++){
239
- bytes[i] = buffer[vpos++];
240
- vpos &= 0x3FFF;
241
- }
242
- } else {
243
- vpos = (vpos - bits) & 0x1ffff;
244
- byte = vpos >> 3 ^ 0x3ff0;
245
- return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~((-1) << bits);
246
- }
247
- }
248
- // Raw Format 6
249
- function getBufferDataRW6(i) {
250
- return buffer[vpos + 15 - i];
251
- }
252
- function readPageRW6() {
253
- bytes[0] = (getBufferDataRW6(0) << 6) | (getBufferDataRW6(1) >> 2); // 14 bit
254
- bytes[1] = (((getBufferDataRW6(1) & 0x3) << 12) | (getBufferDataRW6(2) << 4) | (getBufferDataRW6(3) >> 4)) & 0x3fff;
255
- bytes[2] = (getBufferDataRW6(3) >> 2) & 0x3;
256
- bytes[3] = ((getBufferDataRW6(3) & 0x3) << 8) | getBufferDataRW6(4);
257
- bytes[4] = (getBufferDataRW6(5) << 2) | (getBufferDataRW6(6) >> 6);
258
- bytes[5] = ((getBufferDataRW6(6) & 0x3f) << 4) | (getBufferDataRW6(7) >> 4);
259
- bytes[6] = (getBufferDataRW6(7) >> 2) & 0x3;
260
- bytes[7] = ((getBufferDataRW6(7) & 0x3) << 8) | getBufferDataRW6(8);
261
- bytes[8] = ((getBufferDataRW6(9) << 2) & 0x3fc) | (getBufferDataRW6(10) >> 6);
262
- bytes[9] = ((getBufferDataRW6(10) << 4) | (getBufferDataRW6(11) >> 4)) & 0x3ff;
263
- bytes[10] = (getBufferDataRW6(11) >> 2) & 0x3;
264
- bytes[11] = ((getBufferDataRW6(11) & 0x3) << 8) | getBufferDataRW6(12);
265
- bytes[12] = (((getBufferDataRW6(13) << 2) & 0x3fc) | getBufferDataRW6(14) >> 6) & 0x3ff;
266
- bytes[13] = ((getBufferDataRW6(14) << 4) | (getBufferDataRW6(15) >> 4)) & 0x3ff;
267
- vpos += 16;
268
- byte = 0;
269
- }
270
- function readPageRw6_bps12() {
271
- bytes[0] = (getBufferDataRW6(0) << 4) | (getBufferDataRW6(1) >> 4);
272
- bytes[1] = (((getBufferDataRW6(1) & 0xf) << 8) | (getBufferDataRW6(2))) & 0xfff;
273
- bytes[2] = (getBufferDataRW6(3) >> 6) & 0x3;
274
- bytes[3] = ((getBufferDataRW6(3) & 0x3f) << 2) | (getBufferDataRW6(4) >> 6);
275
- bytes[4] = ((getBufferDataRW6(4) & 0x3f) << 2) | (getBufferDataRW6(5) >> 6);
276
- bytes[5] = ((getBufferDataRW6(5) & 0x3f) << 2) | (getBufferDataRW6(6) >> 6);
277
- bytes[6] = (getBufferDataRW6(6) >> 4) & 0x3;
278
- bytes[7] = ((getBufferDataRW6(6) & 0xf) << 4) | (getBufferDataRW6(7) >> 4);
279
- bytes[8] = ((getBufferDataRW6(7) & 0xf) << 4) | (getBufferDataRW6(8) >> 4);
280
- bytes[9] = ((getBufferDataRW6(8) & 0xf) << 4) | (getBufferDataRW6(9) >> 4);
281
- bytes[10] = (getBufferDataRW6(9) >> 2) & 0x3;
282
- bytes[11] = ((getBufferDataRW6(9) & 0x3) << 6) | (getBufferDataRW6(10) >> 2);
283
- bytes[12] = ((getBufferDataRW6(10) & 0x3) << 6) | (getBufferDataRW6(11) >> 2);
284
- bytes[13] = ((getBufferDataRW6(11) & 0x3) << 6) | (getBufferDataRW6(12) >> 2);
285
- bytes[14] = getBufferDataRW6(12) & 0x3;
286
- bytes[15] = getBufferDataRW6(13);
287
- bytes[16] = getBufferDataRW6(14);
288
- bytes[17] = getBufferDataRW6(15);
289
-
290
- vpos += 16;
291
- byte = 0;
292
- }
293
- // Main loop
294
- function resetPredNonzeros(){
295
- pred[0]=0; pred[1]=0;
296
- nonz[0]=0; nonz[1]=0;
297
- }
298
- if (RW2_Format == 7) {
299
- throw RW2_Format;
300
-
301
- // Skatch of version 7
302
- /*
303
- var pixels_per_block = bitsPerSample == 14 ? 9 : 10;
304
- rowbytes = 0|(rawWidth / pixels_per_block * 16);
305
- for (row = 0; row < rawHeight - 15; row += 16) {
306
- var rowstoread = Math.min(16, rawHeight - row);
307
- var readlen = rowbytes*rowstoread;
308
- buffer = new Uint8Array(image.slice(bidx, bidx+readlen));
309
- vpos = 0;
310
- bidx += readlen;
311
- i = 0;
312
- for (crow = 0; crow < rowstoread; crow++) {
313
- idx = (row + crow) * rawWidth;
314
- for (col = 0; col <= rawWidth - pixels_per_block; col += pixels_per_block) {
315
- for(j=0; j < pixels_per_block; j++) bytes[j] = buffer[i++];
316
- if (bitsPerSample == 12) {
317
- result[idx ] = ((bytes[1] & 0xF) << 8) + bytes[0];
318
- result[idx + 1] = 16 * bytes[2] + (bytes[1] >> 4);
319
- result[idx + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
320
- result[idx + 3] = 16 * bytes[5] + (bytes[4] >> 4);
321
- result[idx + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
322
- result[idx + 5] = 16 * bytes[8] + (bytes[7] >> 4);
323
- result[idx + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
324
- result[idx + 7] = 16 * bytes[11] + (bytes[10] >> 4);
325
- result[idx + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
326
- result[idx + 9] = 16 * bytes[14] + (bytes[13] >> 4);
327
- } else if (bitsPerSample == 14) {
328
- result[idx] = bytes[0] + ((bytes[1] & 0x3F) << 8);
329
- result[idx + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
330
- result[idx + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
331
- result[idx + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
332
- result[idx + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
333
- result[idx + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
334
- result[idx + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
335
- result[idx + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
336
- result[idx + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
337
- }
338
- }
339
- }
340
- }
341
- */
342
- }
343
- else if(RW2_Format == 6) {
344
- var is12bit = bitsPerSample == 12,
345
- readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6,
346
- pixelsPerBlock = is12bit ? 14 : 11,
347
- pixelbase0 = is12bit ? 0x80 : 0x200,
348
- pixelbase_compare = is12bit ? 0x800 : 0x2000,
349
- spix_compare = is12bit ? 0x3fff : 0xffff,
350
- pixel_mask = is12bit ? 0xfff : 0x3fff,
351
- blocksperrow = rawWidth / pixelsPerBlock,
352
- rowbytes = blocksperrow * 16,
353
- bufferSize = is12bit ? 18 : 14;
354
-
355
- for (row = 0; row < rawHeight - 15; row += 16) {
356
- var rowstoread = Math.min(16, rawHeight - row);
357
- var readlen = rowbytes*rowstoread;
358
- buffer = new Uint8Array(img_buffer, off+bidx, readlen);//new Uint8Array(image.slice(bidx, bidx+readlen));
359
- vpos = 0;
360
- bidx += readlen;
361
- for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) {
362
- idx = (row + crow) * rawWidth;
363
- for (var rblock = 0; rblock < blocksperrow; rblock++) {
364
- readPageRw6Fn();
365
- resetPredNonzeros();
366
- sh=0; pixel_base=0;
367
- for (i = 0; i < pixelsPerBlock; i++){
368
- isOdd = i & 1;
369
- if (i % 3 == 2) {
370
- var base = byte < bufferSize ? bytes[byte++] : 0;
371
- if (base == 3) base = 4;
372
- pixel_base = pixelbase0 << base;
373
- sh = 1 << base;
374
- }
375
- var epixel = byte < bufferSize ? bytes[byte++] : 0;
376
- if (pred[isOdd]) {
377
- epixel *= sh;
378
- if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base)
379
- epixel += nonz[isOdd] - pixel_base;
380
- nonz[isOdd] = epixel;
381
- } else {
382
- pred[isOdd] = epixel;
383
- if (epixel)
384
- nonz[isOdd] = epixel;
385
- else
386
- epixel = nonz[isOdd];
387
- }
388
- result[idx + col++] = (epixel - 0xf) <= spix_compare ? (epixel - 0xf) & spix_compare : ((epixel + 0x7ffffff1) >> 0x1f) & pixel_mask;
389
- }
390
- }
391
- }
392
- }
393
- }
394
- else if (RW2_Format == 5) {
395
- var blockSize = bitsPerSample == 12 ? 10 : 9;
396
- for (row = 0; row < rawHeight; row++) {
397
- for (col = 0; col < rawWidth; col+=blockSize) {
398
- getDataRaw(0);
399
- // Tuhle podminku pouziva i RW2_Format 7
400
- if (bitsPerSample == 12) {
401
- result[idx++] = ((bytes[1] & 0xF) << 8) + bytes[0];
402
- result[idx++] = 16 * bytes[2] + (bytes[1] >> 4);
403
- result[idx++] = ((bytes[4] & 0xF) << 8) + bytes[3];
404
- result[idx++] = 16 * bytes[5] + (bytes[4] >> 4);
405
- result[idx++] = ((bytes[7] & 0xF) << 8) + bytes[6];
406
- result[idx++] = 16 * bytes[8] + (bytes[7] >> 4);
407
- result[idx++] = ((bytes[10] & 0xF) << 8) + bytes[9];
408
- result[idx++] = 16 * bytes[11] + (bytes[10] >> 4);
409
- result[idx++] = ((bytes[13] & 0xF) << 8) + bytes[12];
410
- result[idx++] = 16 * bytes[14] + (bytes[13] >> 4);
411
- } else if (bitsPerSample == 14) {
412
- result[idx++] = bytes[0] + ((bytes[1] & 0x3F) << 8);
413
- result[idx++] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
414
- result[idx++] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
415
- result[idx++] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
416
- result[idx++] = bytes[7] + ((bytes[8] & 0x3F) << 8);
417
- result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
418
- result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
419
- result[idx++] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
420
- result[idx++] = bytes[14] + ((bytes[15] & 0x3F) << 8);
421
- }
422
- }
423
- }
424
- //console.log(result[1000000 - 1])
425
- } else if(RW2_Format == 4) {
426
- for (row = 0; row < rawHeight; row++){
427
- for(col = 0; col < rawWidth; col++){
428
- i = col % 14;
429
- isOdd = i & 1;
430
- if (i==0) resetPredNonzeros();
431
- if (i%3 == 2)
432
- sh = 4 >> (3 - getDataRaw(2));
433
- if (nonz[isOdd]) {
434
- j = getDataRaw(8);
435
- if(j != 0){
436
- pred[isOdd] -= 0x80 << sh;
437
- if (pred[isOdd] < 0 || sh == 4)
438
- pred[isOdd] &= ~((-1) << sh);
439
- pred[isOdd] += j << sh;
440
- }
441
- } else {
442
- nonz[isOdd] = getDataRaw(8);
443
- if(nonz[isOdd] || i > 11)
444
- pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4);
445
- }
446
- result[idx++] = pred[col & 1];
447
- }
448
- }
449
- }
450
- else throw RW2_Format;
451
- }
452
-
453
-
454
- UTIF.decode._decodeVC5 = function(){var x=[1,0,1,0,2,2,1,1,3,7,1,2,5,25,1,3,6,48,1,4,6,54,1,5,7,111,1,8,7,99,1,6,7,105,12,0,7,107,1,7,8,209,20,0,8,212,1,9,8,220,1,10,9,393,1,11,9,394,32,0,9,416,1,12,9,427,1,13,10,887,1,18,10,784,1,14,10,790,1,15,10,835,60,0,10,852,1,16,10,885,1,17,11,1571,1,19,11,1668,1,20,11,1669,100,0,11,1707,1,21,11,1772,1,22,12,3547,1,29,12,3164,1,24,12,3166,1,25,12,3140,1,23,12,3413,1,26,12,3537,1,27,12,3539,1,28,13,7093,1,35,13,6283,1,30,13,6331,1,31,13,6335,180,0,13,6824,1,32,13,7072,1,33,13,7077,320,0,13,7076,1,34,14,12565,1,36,14,12661,1,37,14,12669,1,38,14,13651,1,39,14,14184,1,40,15,28295,1,46,15,28371,1,47,15,25320,1,42,15,25336,1,43,15,25128,1,41,15,27300,1,44,15,28293,1,45,16,50259,1,48,16,50643,1,49,16,50675,1,50,16,56740,1,53,16,56584,1,51,16,56588,1,52,17,113483,1,61,17,113482,1,60,17,101285,1,55,17,101349,1,56,17,109205,1,57,17,109207,1,58,17,100516,1,54,17,113171,1,59,18,202568,1,62,18,202696,1,63,18,218408,1,64,18,218412,1,65,18,226340,1,66,18,226356,1,67,18,226358,1,68,19,402068,1,69,19,405138,1,70,19,405394,1,71,19,436818,1,72,19,436826,1,73,19,452714,1,75,19,452718,1,76,19,452682,1,74,20,804138,1,77,20,810279,1,78,20,810790,1,79,20,873638,1,80,20,873654,1,81,20,905366,1,82,20,905430,1,83,20,905438,1,84,21,1608278,1,85,21,1620557,1,86,21,1621582,1,87,21,1621583,1,88,21,1747310,1,89,21,1810734,1,90,21,1810735,1,91,21,1810863,1,92,21,1810879,1,93,22,3621725,1,99,22,3621757,1,100,22,3241112,1,94,22,3494556,1,95,22,3494557,1,96,22,3494622,1,97,22,3494623,1,98,23,6482227,1,102,23,6433117,1,101,23,6989117,1,103,23,6989119,1,105,23,6989118,1,104,23,7243449,1,106,23,7243512,1,107,24,13978233,1,111,24,12964453,1,109,24,12866232,1,108,24,14486897,1,113,24,13978232,1,110,24,14486896,1,112,24,14487026,1,114,24,14487027,1,115,25,25732598,1,225,25,25732597,1,189,25,25732596,1,188,25,25732595,1,203,25,25732594,1,202,25,25732593,1,197,25,25732592,1,207,25,25732591,1,169,25,25732590,1,223,25,25732589,1,159,25,25732522,1,235,25,25732579,1,152,25,25732575,1,192,25,25732489,1,179,25,25732573,1,201,25,25732472,1,172,25,25732576,1,149,25,25732488,1,178,25,25732566,1,120,25,25732571,1,219,25,25732577,1,150,25,25732487,1,127,25,25732506,1,211,25,25732548,1,125,25,25732588,1,158,25,25732486,1,247,25,25732467,1,238,25,25732508,1,163,25,25732552,1,228,25,25732603,1,183,25,25732513,1,217,25,25732587,1,168,25,25732520,1,122,25,25732484,1,128,25,25732562,1,249,25,25732505,1,187,25,25732504,1,186,25,25732483,1,136,25,25928905,1,181,25,25732560,1,255,25,25732500,1,230,25,25732482,1,135,25,25732555,1,233,25,25732568,1,222,25,25732583,1,145,25,25732481,1,134,25,25732586,1,167,25,25732521,1,248,25,25732518,1,209,25,25732480,1,243,25,25732512,1,216,25,25732509,1,164,25,25732547,1,140,25,25732479,1,157,25,25732544,1,239,25,25732574,1,191,25,25732564,1,251,25,25732478,1,156,25,25732546,1,139,25,25732498,1,242,25,25732557,1,133,25,25732477,1,162,25,25732515,1,213,25,25732584,1,165,25,25732514,1,212,25,25732476,1,227,25,25732494,1,198,25,25732531,1,236,25,25732530,1,234,25,25732529,1,117,25,25732528,1,215,25,25732527,1,124,25,25732526,1,123,25,25732525,1,254,25,25732524,1,253,25,25732523,1,148,25,25732570,1,218,25,25732580,1,146,25,25732581,1,147,25,25732569,1,224,25,25732533,1,143,25,25732540,1,184,25,25732541,1,185,25,25732585,1,166,25,25732556,1,132,25,25732485,1,129,25,25732563,1,250,25,25732578,1,151,25,25732501,1,119,25,25732502,1,193,25,25732536,1,176,25,25732496,1,245,25,25732553,1,229,25,25732516,1,206,25,25732582,1,144,25,25732517,1,208,25,25732558,1,137,25,25732543,1,241,25,25732466,1,237,25,25732507,1,190,25,25732542,1,240,25,25732551,1,131,25,25732554,1,232,25,25732565,1,252,25,25732475,1,171,25,25732493,1,205,25,25732492,1,204,25,25732491,1,118,25,25732490,1,214,25,25928904,1,180,25,25732549,1,126,25,25732602,1,182,25,25732539,1,175,25,25732545,1,141,25,25732559,1,138,25,25732537,1,177,25,25732534,1,153,25,25732503,1,194,25,25732606,1,160,25,25732567,1,121,25,25732538,1,174,25,25732497,1,246,25,25732550,1,130,25,25732572,1,200,25,25732474,1,170,25,25732511,1,221,25,25732601,1,196,25,25732532,1,142,25,25732519,1,210,25,25732495,1,199,25,25732605,1,155,25,25732535,1,154,25,25732499,1,244,25,25732510,1,220,25,25732600,1,195,25,25732607,1,161,25,25732604,1,231,25,25732473,1,173,25,25732599,1,226,26,51465122,1,116,26,51465123,0,1],o,C,k,P=[3,3,3,3,2,2,2,1,1,1],V=24576,ar=16384,H=8192,az=ar|H;
455
- function d(t){var E=t[1],h=t[0][E>>>3]>>>7-(E&7)&1;t[1]++;return h}function ag(t,E){if(o==null){o={};
456
- for(var h=0;h<x.length;h+=4)o[x[h+1]]=x.slice(h,h+4)}var L=d(t),g=o[L];while(g==null){L=L<<1|d(t);g=o[L]}var n=g[3];
457
- if(n!=0)n=d(t)==0?n:-n;E[0]=g[2];E[1]=n}function m(t,E){for(var h=0;h<E;h++){if((t&1)==1)t++;t=t>>>1}return t}function A(t,E){return t>>E}function O(t,E,h,L,g,n){E[h]=A(A(11*t[g]-4*t[g+n]+t[g+n+n]+4,3)+t[L],1);
458
- E[h+n]=A(A(5*t[g]+4*t[g+n]-t[g+n+n]+4,3)-t[L],1)}function J(t,E,h,L,g,n){var W=t[g-n]-t[g+n],j=t[g],$=t[L];
459
- E[h]=A(A(W+4,3)+j+$,1);E[h+n]=A(A(-W+4,3)+j-$,1)}function y(t,E,h,L,g,n){E[h]=A(A(5*t[g]+4*t[g-n]-t[g-n-n]+4,3)+t[L],1);
460
- E[h+n]=A(A(11*t[g]-4*t[g-n]+t[g-n-n]+4,3)-t[L],1)}function q(t){t=t<0?0:t>4095?4095:t;t=k[t]>>>2;return t}function av(t,E,h,L,g,n){L=new Uint16Array(L.buffer);
461
- var W=Date.now(),j=UTIF._binBE,$=E+h,r,u,X,I,ax,a3,R,ai,aa,ap,ah,ae,aD,al,i,aE,T,B;E+=4;var a5=n[0]==1;
462
- while(E<$){var S=j.readShort(t,E),s=j.readUshort(t,E+2);E+=4;if(S==12)r=s;else if(S==20)u=s;else if(S==21)X=s;
463
- else if(S==48)I=s;else if(S==53)ax=s;else if(S==35)a3=s;else if(S==62)R=s;else if(S==101)ai=s;else if(S==109)aa=s;
464
- else if(S==84)ap=s;else if(S==106)ah=s;else if(S==107)ae=s;else if(S==108)aD=s;else if(S==102)al=s;else if(S==104)i=s;
465
- else if(S==105)aE=s;else{var F=S<0?-S:S,D=F&65280,_=0;if(F&az){if(F&H){_=s&65535;_+=(F&255)<<16}else{_=s&65535}}if((F&V)==V){if(T==null){T=[];
466
- for(var M=0;M<4;M++)T[M]=new Int16Array((u>>>1)*(X>>>1));B=new Int16Array((u>>>1)*(X>>>1));C=new Int16Array(1024);
467
- for(var M=0;M<1024;M++){var aG=M-512,p=Math.abs(aG),r=Math.floor(768*p*p*p/(255*255*255))+p;C[M]=Math.sign(aG)*r}k=new Uint16Array(4096);
468
- var aA=(1<<16)-1;for(var M=0;M<4096;M++){var at=M,a1=aA*(Math.pow(113,at/4095)-1)/112;k[M]=Math.min(a1,aA)}}var w=T[R],v=m(u,1+P[I]),N=m(X,1+P[I]);
469
- if(I==0){for(var b=0;b<N;b++)for(var G=0;G<v;G++){var c=E+(b*v+G)*2;w[b*(u>>>1)+G]=t[c]<<8|t[c+1]}}else{var a7=[t,E*8],a4=[],ay=0,aw=v*N,f=[0,0],Q=0,s=0;
470
- while(ay<aw){ag(a7,f);Q=f[0];s=f[1];while(Q>0){a4[ay++]=s;Q--}}var l=(I-1)%3,aF=l!=1?v:0,a2=l!=0?N:0;
471
- for(var b=0;b<N;b++){var af=(b+a2)*(u>>>1)+aF,au=b*v;for(var G=0;G<v;G++)w[af+G]=C[a4[au+G]+512]*ax}if(l==2){var i=u>>>1,an=v*2,a9=N*2;
472
- for(var b=0;b<N;b++){for(var G=0;G<an;G++){var M=b*2*i+G,a=b*i+G,e=N*i+a;if(b==0)O(w,B,M,e,a,i);else if(b==N-1)y(w,B,M,e,a,i);
473
- else J(w,B,M,e,a,i)}}var Z=w;w=B;B=Z;for(var b=0;b<a9;b++){for(var G=0;G<v;G++){var M=b*i+2*G,a=b*i+G,e=v+a;
474
- if(G==0)O(w,B,M,e,a,1);else if(G==v-1)y(w,B,M,e,a,1);else J(w,B,M,e,a,1)}}var Z=w;w=B;B=Z;var aC=[],aB=2-~~((I-1)/3);
475
- for(var K=0;K<3;K++)aC[K]=aa>>14-K*2&3;var a6=aC[aB];if(a6!=0)for(var b=0;b<a9;b++)for(var G=0;G<an;
476
- G++){var M=b*i+G;w[M]=w[M]<<a6}}}if(I==9&&R==3){var a8=T[0],ab=T[1],aq=T[2],as=T[3];for(var b=0;b<X;
477
- b+=2)for(var G=0;G<u;G+=2){var U=b*u+G,c=(b>>>1)*(u>>>1)+(G>>>1),z=a8[c],ao=ab[c]-2048,ak=aq[c]-2048,ad=as[c]-2048,aj=(ao<<1)+z,a0=(ak<<1)+z,aH=z+ad,am=z-ad;
478
- if(a5){L[U]=q(aH);L[U+1]=q(a0);L[U+u]=q(aj);L[U+u+1]=q(am)}else{L[U]=q(aj);L[U+1]=q(aH);L[U+u]=q(am);
479
- L[U+u+1]=q(a0)}}}E+=_*4}else if(F==16388){E+=_*4}else if(D==8192||D==8448||D==9216){}else throw F.toString(16)}}console.log(Date.now()-W)}return av}()
480
-
481
-
482
-
483
- UTIF.decode._decodeLogLuv32 = function(img, data, off, len, tgt, toff) {
484
- var w = img.width, qw=w*4;
485
- var io = 0, out = new Uint8Array(qw);
486
-
487
- while(io<len) {
488
- var oo=0;
489
- while(oo<qw) {
490
- var c = data[off+io]; io++;
491
- if(c<128) { for(var j=0; j<c; j++) out[oo+j] = data[off+io+j]; oo+=c; io+=c; }
492
- else { c=c-126; for(var j=0; j<c; j++) out[oo+j] = data[off+io ]; oo+=c; io++ ; }
493
- }
494
-
495
- for(var x=0; x<w; x++) {
496
- tgt[toff+0] = out[x];
497
- tgt[toff+1] = out[x+w];
498
- tgt[toff+2] = out[x+w*2];
499
- tgt[toff+4] = out[x+w*3];
500
- toff+=6;
501
- }
502
- }
503
- }
504
-
505
- UTIF.decode._ljpeg_diff = function(data, prm, huff) {
506
- var getbithuff = UTIF.decode._getbithuff;
507
- var len, diff;
508
- len = getbithuff(data, prm, huff[0], huff);
509
- diff = getbithuff(data, prm, len, 0);
510
- if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1;
511
- return diff;
512
- }
513
- UTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {
514
- var raw_width = img["t256"][0], height=img["t257"][0], tiff_bps=img["t258"][0];
515
- var bin=(img.isLE ? UTIF._binLE : UTIF._binBE);
516
- //console.log(raw_width, height, tiff_bps, raw_width*height, src_length);
517
- var arw2 = (raw_width*height == src_length) || (raw_width*height*1.5 == src_length);
518
- //arw2 = true;
519
- //console.log("ARW2: ", arw2, raw_width*height, src_length, tgt.length);
520
- if(!arw2) { //"sony_arw_load_raw"; // not arw2
521
- height+=8;
522
- var prm = [off,0,0,0];
523
- var huff = new Uint16Array(32770);
524
- var tab = [ 0xf11,0xf10,0xe0f,0xd0e,0xc0d,0xb0c,0xa0b,0x90a,0x809,
525
- 0x708,0x607,0x506,0x405,0x304,0x303,0x300,0x202,0x201 ];
526
- var i, c, n, col, row, sum=0;
527
- var ljpeg_diff = UTIF.decode._ljpeg_diff;
528
-
529
- huff[0] = 15;
530
- for (n=i=0; i < 18; i++) {
531
- var lim = 32768 >>> (tab[i] >>> 8);
532
- for(var c=0; c<lim; c++) huff[++n] = tab[i];
533
- }
534
- for (col = raw_width; col--; )
535
- for (row=0; row < height+1; row+=2) {
536
- if (row == height) row = 1;
537
- sum += ljpeg_diff(inp, prm, huff);
538
- if (row < height) {
539
- var clr = (sum)&4095;
540
- UTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));
541
- }
542
- }
543
- return;
544
- }
545
- if(raw_width*height*1.5==src_length) {
546
- //console.log("weird compression");
547
- for(var i=0; i<src_length; i+=3) { var b0=inp[off+i+0], b1=inp[off+i+1], b2=inp[off+i+2];
548
- tgt[toff+i]=(b1<<4)|(b0>>>4); tgt[toff+i+1]=(b0<<4)|(b2>>>4); tgt[toff+i+2]=(b2<<4)|(b1>>>4); }
549
- return;
550
- }
551
-
552
- var pix = new Uint16Array(16);
553
- var row, col, val, max, min, imax, imin, sh, bit, i, dp;
554
-
555
- var data = new Uint8Array(raw_width+1);
556
- for (row=0; row < height; row++) {
557
- //fread (data, 1, raw_width, ifp);
558
- for(var j=0; j<raw_width; j++) data[j]=inp[off++];
559
- for (dp=0, col=0; col < raw_width-30; dp+=16) {
560
- max = 0x7ff & (val = bin.readUint(data,dp));
561
- min = 0x7ff & (val >>> 11);
562
- imax = 0x0f & (val >>> 22);
563
- imin = 0x0f & (val >>> 26);
564
- for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++);
565
- for (bit=30, i=0; i < 16; i++)
566
- if (i == imax) pix[i] = max;
567
- else if (i == imin) pix[i] = min;
568
- else {
569
- pix[i] = ((bin.readUshort(data, dp+(bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;
570
- if (pix[i] > 0x7ff) pix[i] = 0x7ff;
571
- bit += 7;
572
- }
573
- for (i=0; i < 16; i++, col+=2) {
574
- //RAW(row,col) = curve[pix[i] << 1] >> 2;
575
- var clr = pix[i]<<1; //clr = 0xffff;
576
- UTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));
577
- }
578
- col -= col & 1 ? 1:31;
579
- }
580
- }
581
- }
582
-
583
- UTIF.decode._decodeNikon = function(img,imgs, data, off, src_length, tgt, toff)
584
- {
585
- var nikon_tree = [
586
- [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */
587
- 5,4,3,6,2,7,1,0,8,9,11,10,12 ],
588
- [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */
589
- 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 ],
590
- [ 0, 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */
591
- 5,4,6,3,7,2,8,1,9,0,10,11,12 ],
592
- [ 0, 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */
593
- 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 ],
594
- [ 0, 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */
595
- 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 ],
596
- [ 0, 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */
597
- 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 ] ];
598
-
599
- var raw_width = img["t256"][0], height=img["t257"][0], tiff_bps=img["t258"][0];
600
-
601
- var tree = 0, split = 0;
602
- var make_decoder = UTIF.decode._make_decoder;
603
- var getbithuff = UTIF.decode._getbithuff;
604
-
605
- var mn = imgs[0].exifIFD.makerNote, md = mn["t150"]?mn["t150"]:mn["t140"], mdo=0; //console.log(mn,md);
606
- //console.log(md[0].toString(16), md[1].toString(16), tiff_bps);
607
- var ver0 = md[mdo++], ver1 = md[mdo++];
608
- if (ver0 == 0x49 || ver1 == 0x58) mdo+=2110;
609
- if (ver0 == 0x46) tree = 2;
610
- if (tiff_bps == 14) tree += 3;
611
-
612
- var vpred = [[0,0],[0,0]], bin=(img.isLE ? UTIF._binLE : UTIF._binBE);
613
- for(var i=0; i<2; i++) for(var j=0; j<2; j++) { vpred[i][j] = bin.readShort(md,mdo); mdo+=2; } // not sure here ... [i][j] or [j][i]
614
- //console.log(vpred);
615
-
616
-
617
- var max = 1 << tiff_bps & 0x7fff, step=0;
618
- var csize = bin.readShort(md,mdo); mdo+=2;
619
- if (csize > 1) step = Math.floor(max / (csize-1));
620
- if (ver0 == 0x44 && ver1 == 0x20 && step > 0) split = bin.readShort(md,562);
621
-
622
-
623
- var i;
624
- var row, col;
625
- var len, shl, diff;
626
- var min_v = 0;
627
- var hpred = [0,0];
628
- var huff = make_decoder(nikon_tree[tree]);
629
-
630
- //var g_input_offset=0, bitbuf=0, vbits=0, reset=0;
631
- var prm = [off,0,0,0];
632
- //console.log(split); split = 170;
633
-
634
- for (min_v=row=0; row < height; row++) {
635
- if (split && row == split) {
636
- //free (huff);
637
- huff = make_decoder (nikon_tree[tree+1]);
638
- //max_v += (min_v = 16) << 1;
639
- }
640
- for (col=0; col < raw_width; col++) {
641
- i = getbithuff(data,prm,huff[0],huff);
642
- len = i & 15;
643
- shl = i >>> 4;
644
- diff = (((getbithuff(data,prm,len-shl,0) << 1) + 1) << shl) >>> 1;
645
- if ((diff & (1 << (len-1))) == 0)
646
- diff -= (1 << len) - (shl==0?1:0);
647
- if (col < 2) hpred[col] = vpred[row & 1][col] += diff;
648
- else hpred[col & 1] += diff;
649
-
650
- var clr = Math.min(Math.max(hpred[col & 1],0),(1<<tiff_bps)-1);
651
- var bti = (row*raw_width+col)*tiff_bps;
652
- UTIF.decode._putsF(tgt, bti, clr<<(16-tiff_bps));
653
- }
654
- }
655
- }
656
- // put 16 bits
657
- UTIF.decode._putsF= function(dt, pos, val) { val = val<<(8-(pos&7)); var o=(pos>>>3); dt[o]|=val>>>16; dt[o+1]|=val>>>8; dt[o+2]|=val; }
658
-
659
-
660
- UTIF.decode._getbithuff = function(data,prm,nbits, huff) {
661
- var zero_after_ff = 0;
662
- var get_byte = UTIF.decode._get_byte;
663
- var c;
664
-
665
- var off=prm[0], bitbuf=prm[1], vbits=prm[2], reset=prm[3];
666
-
667
- //if (nbits > 25) return 0;
668
- //if (nbits < 0) return bitbuf = vbits = reset = 0;
669
- if (nbits == 0 || vbits < 0) return 0;
670
- while (!reset && vbits < nbits && (c = data[off++]) != -1 &&
671
- !(reset = zero_after_ff && c == 0xff && data[off++])) {
672
- //console.log("byte read into c");
673
- bitbuf = (bitbuf << 8) + c;
674
- vbits += 8;
675
- }
676
- c = (bitbuf << (32-vbits)) >>> (32-nbits);
677
- if (huff) {
678
- vbits -= huff[c+1] >>> 8; //console.log(c, huff[c]>>8);
679
- c = huff[c+1]&255;
680
- } else
681
- vbits -= nbits;
682
- if (vbits < 0) throw "e";
683
-
684
- prm[0]=off; prm[1]=bitbuf; prm[2]=vbits; prm[3]=reset;
685
-
686
- return c;
687
- }
688
-
689
- UTIF.decode._make_decoder = function(source) {
690
- var max, len, h, i, j;
691
- var huff = [];
692
-
693
- for (max=16; max!=0 && !source[max]; max--);
694
- var si=17;
695
-
696
- huff[0] = max;
697
- for (h=len=1; len <= max; len++)
698
- for (i=0; i < source[len]; i++, ++si)
699
- for (j=0; j < 1 << (max-len); j++)
700
- if (h <= 1 << max)
701
- huff[h++] = (len << 8) | source[si];
702
- return huff;
703
- }
704
-
705
- UTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff)
706
- {
707
- len = Math.min(len, data.length-off);
708
- var tables = img["t347"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);
709
-
710
- if (tables) {
711
- var SOI = 216, EOI = 217, boff = 0;
712
- for (var i=0; i<(tlen-1); i++)
713
- {
714
- // Skip EOI marker from JPEGTables
715
- if (tables[i]==255 && tables[i+1]==EOI) break;
716
- buff[boff++] = tables[i];
717
- }
718
-
719
- // Skip SOI marker from data
720
- var byte1 = data[off], byte2 = data[off + 1];
721
- if (byte1!=255 || byte2!=SOI)
722
- {
723
- buff[boff++] = byte1;
724
- buff[boff++] = byte2;
725
- }
726
- for (var i=2; i<len; i++) buff[boff++] = data[off+i];
727
- }
728
- else for (var i=0; i<len; i++) buff[i] = data[off+i];
729
-
730
- if(img["t262"][0]==32803 || (img["t259"][0]==7 && img["t262"][0]==34892)) // lossless JPEG (used in DNG files)
731
- {
732
- var bps = img["t258"][0];//, dcdr = new LosslessJpegDecoder();
733
- //var time = Date.now();
734
- var out = UTIF.LosslessJpegDecode(buff), olen=out.length; //console.log(olen);
735
- //var out = ULLJPG(buff), olen=out.length; //console.log(olen);
736
- //console.log(Date.now()-time);
737
-
738
- if(false) {}
739
- else if(bps==16) {
740
- if(img.isLE) for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]&255); tgt[toff+(i<<1)+1] = (out[i]>>>8); }
741
- else for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]>>>8); tgt[toff+(i<<1)+1] = (out[i]&255); }
742
- }
743
- else if(bps==14 || bps==12 || bps==10) { // 4 * 14 == 56 == 7 * 8
744
- var rst = 16-bps;
745
- for(var i=0; i<olen; i++) UTIF.decode._putsF(tgt, i*bps, out[i]<<rst);
746
- }
747
- else if(bps==8) {
748
- for(var i=0; i<olen; i++) tgt[toff+i]=out[i];
749
- }
750
- else throw new Error("unsupported bit depth "+bps);
751
- }
752
- else
753
- {
754
- var parser = new UTIF.JpegDecoder(); parser.parse(buff);
755
- var decoded = parser.getData({"width":parser.width,"height":parser.height,"forceRGB":true,"isSourcePDF":false});
756
- for (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];
757
- }
758
-
759
- // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in
760
- // RGB format, so updating the tag value
761
- if(img["t262"][0] == 6) img["t262"][0] = 2;
762
- }
763
-
764
- UTIF.decode._decodeOldJPEGInit = function(img, data, off, len)
765
- {
766
- var SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;
767
- var joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;
768
- var jpgIchgFmt = img["t513"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;
769
- var jpgIchgFmtLen = img["t514"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;
770
- var soffTag = img["t324"] || img["t273"] || jpgIchgFmt;
771
- var ycbcrss = img["t530"], ssx = 0, ssy = 0;
772
- var spp = img["t277"]?img["t277"][0]:1;
773
- var jpgresint = img["t515"];
774
-
775
- if(soffTag)
776
- {
777
- soff = soffTag[0];
778
- isTiled = (soffTag.length > 1);
779
- }
780
-
781
- if(!isTiled)
782
- {
783
- if(data[off]==255 && data[off+1]==SOI) return { jpegOffset: off };
784
- if(jpgIchgFmt!=null)
785
- {
786
- if(data[off+jifoff]==255 && data[off+jifoff+1]==SOI) joff = off+jifoff;
787
- else log("JPEGInterchangeFormat does not point to SOI");
788
-
789
- if(jpgIchgFmtLen==null) log("JPEGInterchangeFormatLength field is missing");
790
- else if(jifoff >= soff || (jifoff+jiflen) <= soff) log("JPEGInterchangeFormatLength field value is invalid");
791
-
792
- if(joff != null) return { jpegOffset: joff };
793
- }
794
- }
795
-
796
- if(ycbcrss!=null) { ssx = ycbcrss[0]; ssy = ycbcrss[1]; }
797
-
798
- if(jpgIchgFmt!=null)
799
- if(jpgIchgFmtLen!=null)
800
- if(jiflen >= 2 && (jifoff+jiflen) <= soff)
801
- {
802
- if(data[off+jifoff+jiflen-2]==255 && data[off+jifoff+jiflen-1]==SOI) tables = new Uint8Array(jiflen-2);
803
- else tables = new Uint8Array(jiflen);
804
-
805
- for(i=0; i<tables.length; i++) tables[i] = data[off+jifoff+i];
806
- log("Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables");
807
- }
808
- else log("JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile");
809
-
810
- if(tables == null)
811
- {
812
- var ooff = 0, out = [];
813
- out[ooff++] = 255; out[ooff++] = SOI;
814
-
815
- var qtables = img["t519"];
816
- if(qtables==null) throw new Error("JPEGQTables tag is missing");
817
- for(i=0; i<qtables.length; i++)
818
- {
819
- out[ooff++] = 255; out[ooff++] = DQT; out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;
820
- for(j=0; j<64; j++) out[ooff++] = data[off+qtables[i]+j];
821
- }
822
-
823
- for(k=0; k<2; k++)
824
- {
825
- var htables = img[(k == 0) ? "t520" : "t521"];
826
- if(htables==null) throw new Error(((k == 0) ? "JPEGDCTables" : "JPEGACTables") + " tag is missing");
827
- for(i=0; i<htables.length; i++)
828
- {
829
- out[ooff++] = 255; out[ooff++] = DHT;
830
- //out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;
831
- var nc = 19;
832
- for(j=0; j<16; j++) nc += data[off+htables[i]+j];
833
-
834
- out[ooff++] = (nc >>> 8); out[ooff++] = nc & 255;
835
- out[ooff++] = (i | (k << 4));
836
- for(j=0; j<16; j++) out[ooff++] = data[off+htables[i]+j];
837
- for(j=0; j<nc; j++) out[ooff++] = data[off+htables[i]+16+j];
838
- }
839
- }
840
-
841
- out[ooff++] = 255; out[ooff++] = SOF0;
842
- out[ooff++] = 0; out[ooff++] = 8 + 3*spp; out[ooff++] = 8;
843
- out[ooff++] = (img.height >>> 8) & 255; out[ooff++] = img.height & 255;
844
- out[ooff++] = (img.width >>> 8) & 255; out[ooff++] = img.width & 255;
845
- out[ooff++] = spp;
846
- if(spp==1) { out[ooff++] = 1; out[ooff++] = 17; out[ooff++] = 0; }
847
- else for(i=0; i<3; i++)
848
- {
849
- out[ooff++] = i + 1;
850
- out[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));
851
- out[ooff++] = i;
852
- }
853
-
854
- if(jpgresint!=null && jpgresint[0]!=0)
855
- {
856
- out[ooff++] = 255; out[ooff++] = DRI; out[ooff++] = 0; out[ooff++] = 4;
857
- out[ooff++] = (jpgresint[0] >>> 8) & 255;
858
- out[ooff++] = jpgresint[0] & 255;
859
- }
860
-
861
- tables = new Uint8Array(out);
862
- }
863
-
864
- var sofpos = -1;
865
- i = 0;
866
- while(i < (tables.length - 1)) {
867
- if(tables[i]==255 && tables[i+1]==SOF0) { sofpos = i; break; }
868
- i++;
869
- }
870
-
871
- if(sofpos == -1)
872
- {
873
- var tmptab = new Uint8Array(tables.length + 10 + 3*spp);
874
- tmptab.set(tables);
875
- var tmpoff = tables.length;
876
- sofpos = tables.length;
877
- tables = tmptab;
878
-
879
- tables[tmpoff++] = 255; tables[tmpoff++] = SOF0;
880
- tables[tmpoff++] = 0; tables[tmpoff++] = 8 + 3*spp; tables[tmpoff++] = 8;
881
- tables[tmpoff++] = (img.height >>> 8) & 255; tables[tmpoff++] = img.height & 255;
882
- tables[tmpoff++] = (img.width >>> 8) & 255; tables[tmpoff++] = img.width & 255;
883
- tables[tmpoff++] = spp;
884
- if(spp==1) { tables[tmpoff++] = 1; tables[tmpoff++] = 17; tables[tmpoff++] = 0; }
885
- else for(i=0; i<3; i++)
886
- {
887
- tables[tmpoff++] = i + 1;
888
- tables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));
889
- tables[tmpoff++] = i;
890
- }
891
- }
892
-
893
- if(data[soff]==255 && data[soff+1]==SOS)
894
- {
895
- var soslen = (data[soff+2]<<8) | data[soff+3];
896
- sosMarker = new Uint8Array(soslen+2);
897
- sosMarker[0] = data[soff]; sosMarker[1] = data[soff+1]; sosMarker[2] = data[soff+2]; sosMarker[3] = data[soff+3];
898
- for(i=0; i<(soslen-2); i++) sosMarker[i+4] = data[soff+i+4];
899
- }
900
- else
901
- {
902
- sosMarker = new Uint8Array(2 + 6 + 2*spp);
903
- var sosoff = 0;
904
- sosMarker[sosoff++] = 255; sosMarker[sosoff++] = SOS;
905
- sosMarker[sosoff++] = 0; sosMarker[sosoff++] = 6 + 2*spp; sosMarker[sosoff++] = spp;
906
- if(spp==1) { sosMarker[sosoff++] = 1; sosMarker[sosoff++] = 0; }
907
- else for(i=0; i<3; i++)
908
- {
909
- sosMarker[sosoff++] = i+1; sosMarker[sosoff++] = (i << 4) | i;
910
- }
911
- sosMarker[sosoff++] = 0; sosMarker[sosoff++] = 63; sosMarker[sosoff++] = 0;
912
- }
913
-
914
- return { jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos };
915
- }
916
-
917
- UTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff)
918
- {
919
- var i, dlen, tlen, buff, buffoff;
920
- var jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);
921
-
922
- if(jpegData.jpegOffset!=null)
923
- {
924
- dlen = off+len-jpegData.jpegOffset;
925
- buff = new Uint8Array(dlen);
926
- for(i=0; i<dlen; i++) buff[i] = data[jpegData.jpegOffset+i];
927
- }
928
- else
929
- {
930
- tlen = jpegData.tables.length;
931
- buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);
932
- buff.set(jpegData.tables);
933
- buffoff = tlen;
934
-
935
- buff[jpegData.sofPosition+5] = (img.height >>> 8) & 255; buff[jpegData.sofPosition+6] = img.height & 255;
936
- buff[jpegData.sofPosition+7] = (img.width >>> 8) & 255; buff[jpegData.sofPosition+8] = img.width & 255;
937
-
938
- if(data[off]!=255 || data[off+1]!=SOS)
939
- {
940
- buff.set(jpegData.sosMarker, buffoff);
941
- buffoff += sosMarker.length;
942
- }
943
- for(i=0; i<len; i++) buff[buffoff++] = data[off+i];
944
- buff[buffoff++] = 255; buff[buffoff++] = EOI;
945
- }
946
-
947
- var parser = new UTIF.JpegDecoder(); parser.parse(buff);
948
- var decoded = parser.getData({"width":parser.width,"height":parser.height,"forceRGB":true,"isSourcePDF":false});
949
- for (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];
950
-
951
- // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in
952
- // RGB format, so updating the tag value
953
- if(img["t262"] && img["t262"][0] == 6) img["t262"][0] = 2;
954
- }
955
-
956
- UTIF.decode._decodePackBits = function(data, off, len, tgt, toff)
957
- {
958
- var sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off+len;
959
- while(off<lim)
960
- {
961
- var n = sa[off]; off++;
962
- if(n>=0 && n<128) for(var i=0; i< n+1; i++) { ta[toff]=sa[off]; toff++; off++; }
963
- if(n>=-127 && n<0) { for(var i=0; i<-n+1; i++) { ta[toff]=sa[off]; toff++; } off++; }
964
- }
965
- return toff;
966
- }
967
-
968
- UTIF.decode._decodeThunder = function(data, off, len, tgt, toff)
969
- {
970
- var d2 = [ 0, 1, 0, -1 ], d3 = [ 0, 1, 2, 3, 0, -3, -2, -1 ];
971
- var lim = off+len, qoff = toff*2, px = 0;
972
- while(off<lim)
973
- {
974
- var b = data[off], msk = (b>>>6), n = (b&63); off++;
975
- if(msk==3) { px=(n&15); tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }
976
- if(msk==0) for(var i=0; i<n; i++) { tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }
977
- if(msk==2) for(var i=0; i<2; i++) { var d=(n>>>(3*(1-i)))&7; if(d!=4) { px+=d3[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }
978
- if(msk==1) for(var i=0; i<3; i++) { var d=(n>>>(2*(2-i)))&3; if(d!=2) { px+=d2[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }
979
- }
980
- }
981
-
982
- UTIF.decode._dmap = { "1":0,"011":1,"000011":2,"0000011":3, "010":-1,"000010":-2,"0000010":-3 };
983
- UTIF.decode._lens = ( function()
984
- {
985
- var addKeys = function(lens, arr, i0, inc) { for(var i=0; i<arr.length; i++) lens[arr[i]] = i0 + i*inc; }
986
-
987
- var termW = "00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101," // 15
988
- + "101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010," // 31
989
- + "00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010," // 47
990
- + "00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100";
991
-
992
- var termB = "0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000," // 15
993
- + "0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001," // 31
994
- + "000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111," // 47
995
- + "000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111";
996
-
997
- var makeW = "11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,"
998
- + "011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011";
999
-
1000
- var makeB = "0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,"
1001
- + "0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,"
1002
- + "0000001011011,0000001100100,0000001100101";
1003
-
1004
- var makeA = "00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111";
1005
-
1006
- termW = termW.split(","); termB = termB.split(","); makeW = makeW.split(","); makeB = makeB.split(","); makeA = makeA.split(",");
1007
-
1008
- var lensW = {}, lensB = {};
1009
- addKeys(lensW, termW, 0, 1); addKeys(lensW, makeW, 64,64); addKeys(lensW, makeA, 1792,64);
1010
- addKeys(lensB, termB, 0, 1); addKeys(lensB, makeB, 64,64); addKeys(lensB, makeA, 1792,64);
1011
- return [lensW, lensB];
1012
- } )();
1013
-
1014
- UTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo)
1015
- {
1016
- var U = UTIF.decode, boff=off<<3, len=0, wrd=""; // previous starts with 1
1017
- var line=[], pline=[]; for(var i=0; i<w; i++) pline.push(0); pline=U._makeDiff(pline);
1018
- var a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;
1019
- var y=0, mode="", toRead=0;
1020
- var bipl = Math.ceil(w/8)*8;
1021
-
1022
- while((boff>>>3)<off+slen)
1023
- {
1024
- b1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr); // could be precomputed
1025
- var bit =0;
1026
- if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1027
- if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1028
- boff++; wrd+=bit;
1029
- if(mode=="H")
1030
- {
1031
- if(U._lens[clr][wrd]!=null)
1032
- {
1033
- var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1034
- if(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=""; }
1035
- }
1036
- }
1037
- else
1038
- {
1039
- if(wrd=="0001") { wrd=""; U._addNtimes(line,b2-a0,clr); a0=b2; }
1040
- if(wrd=="001" ) { wrd=""; mode="H"; toRead=2; }
1041
- if(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=""; clr=1-clr; }
1042
- }
1043
- if(line.length==w && mode=="")
1044
- {
1045
- U._writeBits(line, tgt, toff*8+y*bipl);
1046
- clr=0; y++; a0=0;
1047
- pline=U._makeDiff(line); line=[];
1048
- }
1049
- //if(wrd.length>150) { log(wrd); break; throw "e"; }
1050
- }
1051
- }
1052
-
1053
- UTIF.decode._findDiff = function(line, x, clr) { for(var i=0; i<line.length; i+=2) if(line[i]>=x && line[i+1]==clr) return line[i]; }
1054
-
1055
- UTIF.decode._makeDiff = function(line)
1056
- {
1057
- var out = []; if(line[0]==1) out.push(0,1);
1058
- for(var i=1; i<line.length; i++) if(line[i-1]!=line[i]) out.push(i, line[i]);
1059
- out.push(line.length,0,line.length,1); return out;
1060
- }
1061
-
1062
- UTIF.decode._decodeG2 = function(data, off, slen, tgt, toff, w, fo)
1063
- {
1064
- var U = UTIF.decode, boff=off<<3, len=0, wrd="";
1065
- var line=[];
1066
- var clr = 0;
1067
- var y=0;
1068
- var bipl = Math.ceil(w/8)*8;
1069
-
1070
- while((boff>>>3)<off+slen) {
1071
- var bit =0;
1072
- if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1073
- if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1074
- boff++; wrd+=bit;
1075
-
1076
- len = U._lens[clr][wrd];
1077
- if(len!=null) {
1078
- U._addNtimes(line,len,clr); wrd="";
1079
- if(len<64) clr = 1-clr;
1080
- if(line.length==w) { U._writeBits(line, tgt, toff*8+y*bipl); line=[]; y++; clr=0; if((boff&7)!=0) boff+=8-(boff&7); if(len>=64) boff+=8; }
1081
- }
1082
- }
1083
- }
1084
-
1085
- UTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo, twoDim)
1086
- {
1087
- var U = UTIF.decode, boff=off<<3, len=0, wrd="";
1088
- var line=[], pline=[]; for(var i=0; i<w; i++) line.push(0);
1089
- var a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;
1090
- var y=-1, mode="", toRead=0, is1D=true;
1091
- var bipl = Math.ceil(w/8)*8;
1092
- while((boff>>>3)<off+slen)
1093
- {
1094
- b1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr); // could be precomputed
1095
- var bit =0;
1096
- if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1097
- if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1098
- boff++; wrd+=bit;
1099
-
1100
- if(is1D)
1101
- {
1102
- if(U._lens[clr][wrd]!=null)
1103
- {
1104
- var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1105
- if(dl<64) { U._addNtimes(line,len,clr); clr=1-clr; len=0; }
1106
- }
1107
- }
1108
- else
1109
- {
1110
- if(mode=="H")
1111
- {
1112
- if(U._lens[clr][wrd]!=null)
1113
- {
1114
- var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1115
- if(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=""; }
1116
- }
1117
- }
1118
- else
1119
- {
1120
- if(wrd=="0001") { wrd=""; U._addNtimes(line,b2-a0,clr); a0=b2; }
1121
- if(wrd=="001" ) { wrd=""; mode="H"; toRead=2; }
1122
- if(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=""; clr=1-clr; }
1123
- }
1124
- }
1125
- if(wrd.endsWith("000000000001")) // needed for some files
1126
- {
1127
- if(y>=0) U._writeBits(line, tgt, toff*8+y*bipl);
1128
- if(twoDim) {
1129
- if(fo==1) is1D = ((data[boff>>>3]>>>(7-(boff&7)))&1)==1;
1130
- if(fo==2) is1D = ((data[boff>>>3]>>>( (boff&7)))&1)==1;
1131
- boff++;
1132
- }
1133
- //log("EOL",y, "next 1D:", is1D);
1134
- wrd=""; clr=0; y++; a0=0;
1135
- pline=U._makeDiff(line); line=[];
1136
- }
1137
- }
1138
- if(line.length==w) U._writeBits(line, tgt, toff*8+y*bipl);
1139
- }
1140
-
1141
- UTIF.decode._addNtimes = function(arr, n, val) { for(var i=0; i<n; i++) arr.push(val); }
1142
-
1143
- UTIF.decode._writeBits = function(bits, tgt, boff)
1144
- {
1145
- for(var i=0; i<bits.length; i++) tgt[(boff+i)>>>3] |= (bits[i]<<(7-((boff+i)&7)));
1146
- }
1147
-
1148
- UTIF.decode._decodeLZW=UTIF.decode._decodeLZW=function(){var e,U,Z,u,K=0,V=0,g=0,N=0,O=function(){var S=e>>>3,A=U[S]<<16|U[S+1]<<8|U[S+2],j=A>>>24-(e&7)-V&(1<<V)-1;
1149
- e+=V;return j},h=new Uint32Array(4096*4),w=0,m=function(S){if(S==w)return;w=S;g=1<<S;N=g+1;for(var A=0;
1150
- A<N+1;A++){h[4*A]=h[4*A+3]=A;h[4*A+1]=65535;h[4*A+2]=1}},i=function(S){V=S+1;K=N+1},D=function(S){var A=S<<2,j=h[A+2],a=u+j-1;
1151
- while(A!=65535){Z[a--]=h[A];A=h[A+1]}u+=j},L=function(S,A){var j=K<<2,a=S<<2;h[j]=h[(A<<2)+3];h[j+1]=a;
1152
- h[j+2]=h[a+2]+1;h[j+3]=h[a+3];K++;if(K+1==1<<V&&V!=12)V++},T=function(S,A,j,a,n,q){e=A<<3;U=S;Z=a;u=n;
1153
- var B=A+j<<3,_=0,t=0;m(q);i(q);while(e<B&&(_=O())!=N){if(_==g){i(q);_=O();if(_==N)break;D(_)}else{if(_<K){D(_);
1154
- L(t,_)}else{L(t,t);D(K-1)}}t=_}return u};return T}();
1155
-
1156
- UTIF.tags = {};
1157
- //UTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };
1158
- // start at tag 250
1159
- UTIF._types = function() {
1160
- var main = new Array(250); main.fill(0);
1161
- main = main.concat([0,0,0,0,4,3,3,3,3,3,0,0,3,0,0,0,3,0,0,2,2,2,2,4,3,0,0,3,4,4,3,3,5,5,3,2,5,5,0,0,0,0,4,4,0,0,3,3,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,2,2,3,5,5,3,0,3,3,4,4,4,3,4,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
1162
- var rest = {33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7};
1163
- return {
1164
- basic: {
1165
- main: main,
1166
- rest: rest
1167
- },
1168
- gps: {
1169
- main: [1,2,5,2,5,1,5,5,0,9],
1170
- rest: {18:2,29:2}
1171
- }
1172
- }
1173
- }();
1174
-
1175
- UTIF._readIFD = function(bin, data, offset, ifds, depth, prm)
1176
- {
1177
- var cnt = bin.readUshort(data, offset); offset+=2;
1178
- var ifd = {};
1179
-
1180
- if(prm.debug) log(" ".repeat(depth),ifds.length-1,">>>----------------");
1181
- for(var i=0; i<cnt; i++)
1182
- {
1183
- var tag = bin.readUshort(data, offset); offset+=2;
1184
- var type = bin.readUshort(data, offset); offset+=2;
1185
- var num = bin.readUint (data, offset); offset+=4;
1186
- var voff = bin.readUint (data, offset); offset+=4;
1187
-
1188
- var arr = [];
1189
- //ifd["t"+tag+"-"+UTIF.tags[tag]] = arr;
1190
- if(type== 1 || type==7) { var no=(num<5 ? offset-4 : voff); if(no+num>data.buffer.byteLength) num=data.buffer.byteLength-no; arr = new Uint8Array(data.buffer, no, num); }
1191
- if(type== 2) { var o0 = (num<5 ? offset-4 : voff), c=data[o0], len=Math.max(0, Math.min(num-1,data.length-o0));
1192
- if(c<128 || len==0) arr.push( bin.readASCII(data, o0, len) );
1193
- else arr = new Uint8Array(data.buffer, o0, len); }
1194
- if(type== 3) { for(var j=0; j<num; j++) arr.push(bin.readUshort(data, (num<3 ? offset-4 : voff)+2*j)); }
1195
- if(type== 4
1196
- || type==13) { for(var j=0; j<num; j++) arr.push(bin.readUint (data, (num<2 ? offset-4 : voff)+4*j)); }
1197
- if(type== 5 || type==10) {
1198
- var ri = type==5 ? bin.readUint : bin.readInt;
1199
- for(var j=0; j<num; j++) arr.push([ri(data, voff+j*8), ri(data,voff+j*8+4)]); }
1200
- if(type== 8) { for(var j=0; j<num; j++) arr.push(bin.readShort (data, (num<3 ? offset-4 : voff)+2*j)); }
1201
- if(type== 9) { for(var j=0; j<num; j++) arr.push(bin.readInt (data, (num<2 ? offset-4 : voff)+4*j)); }
1202
- if(type==11) { for(var j=0; j<num; j++) arr.push(bin.readFloat (data, voff+j*4)); }
1203
- if(type==12) { for(var j=0; j<num; j++) arr.push(bin.readDouble(data, voff+j*8)); }
1204
-
1205
- if(num!=0 && arr.length==0) { log(tag, "unknown TIFF tag type: ", type, "num:",num); if(i==0)return; continue; }
1206
- if(prm.debug) log(" ".repeat(depth), tag, type, UTIF.tags[tag], arr);
1207
-
1208
- ifd["t"+tag] = arr;
1209
-
1210
- if(tag==330 && ifd["t272"] && ifd["t272"][0]=="DSLR-A100") { }
1211
- else if(tag==330 || tag==34665 || tag==34853 || (tag==50740 && bin.readUshort(data,bin.readUint(arr,0))<300 ) ||tag==61440) {
1212
- var oarr = tag==50740 ? [bin.readUint(arr,0)] : arr;
1213
- var subfd = [];
1214
- for(var j=0; j<oarr.length; j++) UTIF._readIFD(bin, data, oarr[j], subfd, depth+1, prm);
1215
- if(tag== 330) ifd.subIFD = subfd;
1216
- if(tag==34665) ifd.exifIFD = subfd[0];
1217
- if(tag==34853) ifd.gpsiIFD = subfd[0]; //console.log("gps", subfd[0]); }
1218
- if(tag==50740) ifd.dngPrvt = subfd[0];
1219
- if(tag==61440) ifd.fujiIFD = subfd[0];
1220
- }
1221
- if(tag==37500 && prm.parseMN) {
1222
- var mn = arr;
1223
- //console.log(bin.readASCII(mn,0,mn.length), mn);
1224
- if(bin.readASCII(mn,0,5)=="Nikon") ifd.makerNote = UTIF["decode"](mn.slice(10).buffer)[0];
1225
- else if(bin.readASCII(mn,0,5)=="OLYMP" || bin.readASCII(mn,0,9)=="OM SYSTEM") { // ???
1226
- var inds = [8208,8224,8240,8256,8272];
1227
- var subsub = []; UTIF._readIFD(bin, mn, mn[1]==77 ? 16 : (mn[5]==85 ? 12 : 8), subsub, depth+1, prm);
1228
- var obj = ifd.makerNote = subsub.pop();
1229
- for(var j=0; j<inds.length; j++) {
1230
- var k="t"+inds[j]; if(obj[k]==null) continue;
1231
- UTIF._readIFD(bin, mn, obj[k][0], subsub, depth+1, prm);
1232
- obj[k] = subsub.pop();
1233
- }
1234
- if(obj["t12288"]) {
1235
- UTIF._readIFD(bin, obj["t12288"], 0, subsub, depth+1, prm);
1236
- obj["t12288"]=subsub.pop();
1237
- }
1238
- }
1239
- else if(bin.readUshort(data,voff)<300 && bin.readUshort(data,voff+4)<=12){
1240
- var subsub=[]; UTIF._readIFD(bin, data, voff, subsub, depth+1, prm);
1241
- ifd.makerNote = subsub[0];
1242
- }
1243
- }
1244
- }
1245
- ifds.push(ifd);
1246
- if(prm.debug) log(" ".repeat(depth),"<<<---------------");
1247
- return offset;
1248
- }
1249
-
1250
- UTIF._writeIFD = function(bin, types, data, offset, ifd)
1251
- {
1252
- var keys = Object.keys(ifd), knum=keys.length; if(ifd["exifIFD"]) knum--; if(ifd["gpsiIFD"]) knum--;
1253
- bin.writeUshort(data, offset, knum); offset+=2;
1254
-
1255
- var eoff = offset + knum*12 + 4;
1256
-
1257
- for(var ki=0; ki<keys.length; ki++)
1258
- {
1259
- var key = keys[ki]; if(key=="t34665" || key=="t34853") continue;
1260
- if(key=="exifIFD") key="t34665"; if(key=="gpsiIFD") key="t34853";
1261
- var tag = parseInt(key.slice(1)), type = types.main[tag]; if(type==null) type=types.rest[tag];
1262
- if(type==null || type==0) throw new Error("unknown type of tag: "+tag);
1263
- //console.log(offset+":", tag, type, eoff);
1264
- var val = ifd[key];
1265
- if(tag==34665) {
1266
- var outp = UTIF._writeIFD(bin, types, data, eoff, ifd["exifIFD"]);
1267
- val = [eoff]; eoff = outp[1];
1268
- }
1269
- if(tag==34853) {
1270
- var outp = UTIF._writeIFD(bin, UTIF._types.gps, data, eoff, ifd["gpsiIFD"]);
1271
- val = [eoff]; eoff = outp[1];
1272
- }
1273
- if(type==2) val=val[0]+"\u0000"; var num = val.length;
1274
- bin.writeUshort(data, offset, tag ); offset+=2;
1275
- bin.writeUshort(data, offset, type); offset+=2;
1276
- bin.writeUint (data, offset, num ); offset+=4;
1277
-
1278
- var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num; //if(dlen<1) throw "e";
1279
- var toff = offset;
1280
- if(dlen>4) { bin.writeUint(data, offset, eoff); toff=eoff; }
1281
-
1282
- if (type== 1 || type==7) { for(var i=0; i<num; i++) data[toff+i] = val[i]; }
1283
- else if(type== 2) { bin.writeASCII(data, toff, val); }
1284
- else if(type== 3) { for(var i=0; i<num; i++) bin.writeUshort(data, toff+2*i, val[i]); }
1285
- else if(type== 4) { for(var i=0; i<num; i++) bin.writeUint (data, toff+4*i, val[i]); }
1286
- else if(type== 5 || type==10) {
1287
- var wr = type==5?bin.writeUint:bin.writeInt;
1288
- for(var i=0; i<num; i++) {
1289
- var v=val[i],nu=v[0],de=v[1]; if(nu==null) throw "e"; wr(data, toff+8*i, nu); wr(data, toff+8*i+4, de); } }
1290
- else if(type== 9) { for(var i=0; i<num; i++) bin.writeInt (data, toff+4*i, val[i]); }
1291
- else if(type==12) { for(var i=0; i<num; i++) bin.writeDouble(data, toff+8*i, val[i]); }
1292
- else throw type;
1293
-
1294
- if(dlen>4) { dlen += (dlen&1); eoff += dlen; }
1295
- offset += 4;
1296
- }
1297
- return [offset, eoff];
1298
- }
1299
-
1300
- UTIF.toRGBA8 = function(out, scl)
1301
- {
1302
- function gamma(x) { return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055; }
1303
-
1304
-
1305
- var w = out.width, h = out.height, area = w*h, qarea = area*4, data = out.data;
1306
- var img = new Uint8Array(area*4);
1307
- //console.log(out);
1308
- // 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK
1309
- var intp = (out["t262"] ? out["t262"][0]: 2), bps = (out["t258"]?Math.min(32,out["t258"][0]):1);
1310
- if(out["t262"]==null && bps==1) intp=0;
1311
-
1312
- var smpls = out["t277"]?out["t277"][0] : (out["t258"]?out["t258"].length : [1,1,3,1,1,4,3][intp]);
1313
- var sfmt = out["t339"]?out["t339"][0] : null; if(intp==1 && bps==32 && sfmt!=3) throw "e"; // sample format
1314
- var bpl = Math.ceil(smpls*bps*w/8);
1315
-
1316
- //log("interpretation: ", intp, "smpls", smpls, "bps", bps, "sample format",sfmt, out);
1317
-
1318
- if(false) {}
1319
- else if(intp==0)
1320
- {
1321
- scl = 1/256; // "Photopeatest.tif"
1322
- for(var y=0; y<h; y++) {
1323
- var off = y*bpl, io = y*w;
1324
- if(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))& 1; img[qi]=img[qi+1]=img[qi+2]=( 1-px)*255; img[qi+3]=255; }
1325
- if(bps== 4) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>1)])>>(4-4*(i&1)))&15; img[qi]=img[qi+1]=img[qi+2]=(15-px)* 17; img[qi+3]=255; }
1326
- if(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i]; img[qi]=img[qi+1]=img[qi+2]=255-px; img[qi+3]=255; }
1327
- if(bps==16) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o]; img[qi]=img[qi+1]=img[qi+2]= Math.min(255,255-(~~(px*scl))); img[qi+3]=255; } // ladoga.tif
1328
- }
1329
- }
1330
- else if(intp==1)
1331
- {
1332
- if(scl==null) scl=1/256;
1333
- var f32 = ((data.length&3)==0) ? new Float32Array(data.buffer) : null;
1334
-
1335
- for(var y=0; y<h; y++) {
1336
- var off = y*bpl, io = y*w;
1337
- if(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))&1; img[qi]=img[qi+1]=img[qi+2]=(px)*255; img[qi+3]=255; }
1338
- if(bps== 2) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>2)])>>(6-2*(i&3)))&3; img[qi]=img[qi+1]=img[qi+2]=(px)* 85; img[qi+3]=255; }
1339
- if(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i*smpls]; img[qi]=img[qi+1]=img[qi+2]= px; img[qi+3]=255; }
1340
- if(bps==16) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o]; img[qi]=img[qi+1]=img[qi+2]= Math.min(255,~~(px*scl)); img[qi+3]=255; } // ladoga.tif
1341
- if(bps==32) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=(off>>>2)+i, px=f32[o]; img[qi]=img[qi+1]=img[qi+2]= ~~(0.5+255*px); img[qi+3]=255; }
1342
- }
1343
- }
1344
- else if(intp==2)
1345
- {
1346
- if(bps== 8)
1347
- {
1348
- if(smpls==1) for(var i=0; i<area; i++) { img[4*i]=img[4*i+1]=img[4*i+2]=data[i]; img[4*i+3]=255; }
1349
- if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*3 ; img[qi]=data[ti]; img[qi+1]=data[ti+1]; img[qi+2]=data[ti+2]; img[qi+3]=255; }
1350
- if(smpls>=4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*smpls; img[qi]=data[ti]; img[qi+1]=data[ti+1]; img[qi+2]=data[ti+2]; img[qi+3]=data[ti+3]; }
1351
- }
1352
- else if(bps==16){ // 3x 16-bit channel
1353
- if(smpls==4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*8+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=data[ti+6]; }
1354
- if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*6+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=255; }
1355
- }
1356
- else if(bps==32){
1357
- var ndt = new Float32Array(data.buffer); // t339 is [3,3,3]
1358
- // check the endianity
1359
- var min = 0; for(var i=0; i<ndt.length; i++) min = Math.min(min,ndt[i]);
1360
- if(min<0) for(var i=0; i<data.length; i+=4) { var t=data[i]; data[i]=data[i+3]; data[i+3]=t; t=data[i+1]; data[i+1]=data[i+2]; data[i+2]=t; }
1361
- // gamma correction
1362
- var pmap = []; for(var i=0; i<65536; i++) pmap.push(gamma(i/65535));
1363
- for(var i=0; i<ndt.length; i++) { var cv = Math.max(0, Math.min(1, ndt[i])); ndt[i] = pmap[~~(0.5+cv*65535)]; }
1364
-
1365
- if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*3;
1366
- img[qi]=~~(0.5+ndt[ti]*255); img[qi+1]=~~(0.5+ndt[ti+1]*255); img[qi+2]=~~(0.5+ndt[ti+2]*255); img[qi+3]=255; }
1367
- else if(smpls==4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*4;
1368
- img[qi]=~~(0.5+ndt[ti]*255); img[qi+1]=~~(0.5+ndt[ti+1]*255); img[qi+2]=~~(0.5+ndt[ti+2]*255); img[qi+3]=~~(0.5+ndt[ti+3]*255); }
1369
- else throw smpls;
1370
- }
1371
- else throw bps;
1372
- }
1373
- else if(intp==3)
1374
- {
1375
- var map = out["t320"];
1376
- var cn = 1<<bps;
1377
-
1378
- var nexta = bps==8 && smpls>1 && out["t338"] && out["t338"][0]!=0;
1379
-
1380
- for(var y=0; y<h; y++)
1381
- for(var x=0; x<w; x++) {
1382
- var i = y*w+x;
1383
- var qi=i<<2, mi=0;
1384
- var dof = y*bpl;
1385
- if(false) {}
1386
- else if(bps==1) mi=(data[dof+(x>>>3)]>>>(7- (x&7)))& 1;
1387
- else if(bps==2) mi=(data[dof+(x>>>2)]>>>(6-2*(x&3)))& 3;
1388
- else if(bps==4) mi=(data[dof+(x>>>1)]>>>(4-4*(x&1)))&15;
1389
- else if(bps==8) mi= data[dof+x*smpls];
1390
- else throw bps;
1391
- img[qi]=(map[mi]>>8); img[qi+1]=(map[cn+mi]>>8); img[qi+2]=(map[cn+cn+mi]>>8); img[qi+3]=nexta ? data[dof+x*smpls+1] : 255;
1392
- }
1393
- }
1394
- else if(intp==5)
1395
- {
1396
- var gotAlpha = smpls>4 ? 1 : 0;
1397
- for(var i=0; i<area; i++) {
1398
- var qi=i<<2, si=i*smpls;
1399
-
1400
- if(window.UDOC) {
1401
- var C=data[si], M=data[si+1], Y=data[si+2], K=data[si+3];
1402
- var c = UDOC.C.cmykToRgb([C*(1/255), M*(1/255), Y*(1/255), K*(1/255)]);
1403
- img[qi] = ~~(0.5+255*c[0]); img[qi+1] = ~~(0.5+255*c[1]); img[qi+2] = ~~(0.5+255*c[2]);
1404
- }
1405
- else {
1406
- var C=255-data[si], M=255-data[si+1], Y=255-data[si+2], K=(255-data[si+3])*(1/255);
1407
- img[qi]=~~(C*K+0.5); img[qi+1]=~~(M*K+0.5); img[qi+2]=~~(Y*K+0.5);
1408
- }
1409
-
1410
- img[qi+3]=255*(1-gotAlpha)+data[si+4]*gotAlpha;
1411
- }
1412
- }
1413
- else if(intp==6 && out["t278"]) { // only for DSC_1538.TIF
1414
- var rps = out["t278"][0];
1415
- for(var y=0; y<h; y+=rps) {
1416
- var i=(y*w), len = rps*w;
1417
-
1418
- for(var j=0; j<len; j++) {
1419
- var qi = 4*(i+j), si = 3*i+4*(j>>>1);
1420
- var Y = data[si+(j&1)], Cb=data[si+2]-128, Cr=data[si+3]-128;
1421
-
1422
- var r = Y + ( (Cr >> 2) + (Cr >> 3) + (Cr >> 5) ) ;
1423
- var g = Y - ( (Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ( (Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5)) ;
1424
- var b = Y + ( Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6)) ;
1425
-
1426
- img[qi ]=Math.max(0,Math.min(255,r));
1427
- img[qi+1]=Math.max(0,Math.min(255,g));
1428
- img[qi+2]=Math.max(0,Math.min(255,b));
1429
- img[qi+3]=255;
1430
- }
1431
- }
1432
- }
1433
- else if(intp==32845) {
1434
-
1435
- for(var y=0; y<h; y++)
1436
- for(var x=0; x<w; x++) {
1437
- var si = (y*w+x)*6, qi=(y*w+x)*4;
1438
- var L = (data[si+1]<<8) | data[si];
1439
-
1440
- var L = Math.pow(2, (L + 0.5) / 256 - 64);
1441
- var u = (data[si+3] + 0.5) / 410;
1442
- var v = (data[si+5] + 0.5) / 410;
1443
-
1444
- // Luv to xyY
1445
- var sX = (9 * u) / (6 * u - 16 * v + 12);
1446
- var sY = (4 * v) / (6 * u - 16 * v + 12);
1447
- var bY = L;
1448
-
1449
- // xyY to XYZ
1450
- var X = (sX*bY)/sY, Y = bY, Z = (1-sX-sY)*bY/sY;
1451
-
1452
-
1453
- var r = 2.690*X -1.276*Y -0.414*Z
1454
- var g = -1.022*X +1.978*Y +0.044*Z
1455
- var b = 0.061*X -0.224*Y +1.163*Z
1456
-
1457
- img[qi ] = gamma(Math.min(r,1))*255;
1458
- img[qi+1] = gamma(Math.min(g,1))*255;
1459
- img[qi+2] = gamma(Math.min(b,1))*255;
1460
- img[qi+3] = 255;
1461
- }
1462
- }
1463
- else log("Unknown Photometric interpretation: "+intp);
1464
- return img;
1465
- }
1466
-
1467
- UTIF.replaceIMG = function(imgs)
1468
- {
1469
- if(imgs==null) imgs = document.getElementsByTagName("img");
1470
- var sufs = ["tif","tiff","dng","cr2","nef"]
1471
- for (var i=0; i<imgs.length; i++)
1472
- {
1473
- var img=imgs[i], src=img.getAttribute("src"); if(src==null) continue;
1474
- var suff=src.split(".").pop().toLowerCase();
1475
- if(sufs.indexOf(suff)==-1) continue;
1476
- var xhr = new XMLHttpRequest(); UTIF._xhrs.push(xhr); UTIF._imgs.push(img);
1477
- xhr.open("GET", src); xhr.responseType = "arraybuffer";
1478
- xhr.onload = UTIF._imgLoaded; xhr.send();
1479
- }
1480
- }
1481
-
1482
- UTIF._xhrs = []; UTIF._imgs = [];
1483
- UTIF._imgLoaded = function(e) {
1484
- var ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];
1485
- UTIF._xhrs.splice(ind,1); UTIF._imgs.splice(ind,1);
1486
-
1487
- img.setAttribute("src",UTIF.bufferToURI(e.target.response));
1488
- }
1489
-
1490
- UTIF.bufferToURI = function(buff) {
1491
- var ifds = UTIF.decode(buff); //console.log(ifds);
1492
- var vsns = ifds, ma=0, page=vsns[0]; if(ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD);
1493
- for(var i=0; i<vsns.length; i++) {
1494
- var img = vsns[i];
1495
- if(img["t258"]==null || img["t258"].length<3) continue;
1496
- var ar = img["t256"]*img["t257"];
1497
- if(ar>ma) { ma=ar; page=img; }
1498
- }
1499
- UTIF.decodeImage(buff, page, ifds);
1500
- var rgba = UTIF.toRGBA8(page), w=page.width, h=page.height;
1501
-
1502
- var cnv = document.createElement("canvas"); cnv.width=w; cnv.height=h;
1503
- var ctx = cnv.getContext("2d");
1504
- var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer),w,h);
1505
- ctx.putImageData(imgd,0,0);
1506
- return cnv.toDataURL();
1507
- }
1508
-
1509
-
1510
- UTIF._binBE =
1511
- {
1512
- nextZero : function(data, o) { while(data[o]!=0) o++; return o; },
1513
- readUshort : function(buff, p) { return (buff[p]<< 8) | buff[p+1]; },
1514
- readShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+1]; a[1]=buff[p+0]; return UTIF._binBE. i16[0]; },
1515
- readInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE. i32[0]; },
1516
- readUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE.ui32[0]; },
1517
- readASCII : function(buff, p, l) { var s = ""; for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]); return s; },
1518
- readFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+3-i]; return UTIF._binBE.fl32[0]; },
1519
- readDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+7-i]; return UTIF._binBE.fl64[0]; },
1520
-
1521
- writeUshort: function(buff, p, n) { buff[p] = (n>> 8)&255; buff[p+1] = n&255; },
1522
- writeInt : function(buff, p, n) { var a=UTIF._binBE.ui8; UTIF._binBE.i32[0]=n; buff[p+3]=a[0]; buff[p+2]=a[1]; buff[p+1]=a[2]; buff[p+0]=a[3]; },
1523
- writeUint : function(buff, p, n) { buff[p] = (n>>24)&255; buff[p+1] = (n>>16)&255; buff[p+2] = (n>>8)&255; buff[p+3] = (n>>0)&255; },
1524
- writeASCII : function(buff, p, s) { for(var i = 0; i < s.length; i++) buff[p+i] = s.charCodeAt(i); },
1525
- writeDouble: function(buff, p, n)
1526
- {
1527
- UTIF._binBE.fl64[0] = n;
1528
- for (var i = 0; i < 8; i++) buff[p + i] = UTIF._binBE.ui8[7 - i];
1529
- }
1530
- }
1531
- UTIF._binBE.ui8 = new Uint8Array (8);
1532
- UTIF._binBE.i16 = new Int16Array (UTIF._binBE.ui8.buffer);
1533
- UTIF._binBE.i32 = new Int32Array (UTIF._binBE.ui8.buffer);
1534
- UTIF._binBE.ui32 = new Uint32Array (UTIF._binBE.ui8.buffer);
1535
- UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);
1536
- UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);
1537
-
1538
- UTIF._binLE =
1539
- {
1540
- nextZero : UTIF._binBE.nextZero,
1541
- readUshort : function(buff, p) { return (buff[p+1]<< 8) | buff[p]; },
1542
- readShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; return UTIF._binBE. i16[0]; },
1543
- readInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE. i32[0]; },
1544
- readUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE.ui32[0]; },
1545
- readASCII : UTIF._binBE.readASCII,
1546
- readFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl32[0]; },
1547
- readDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl64[0]; },
1548
-
1549
- writeUshort: function(buff, p, n) { buff[p] = (n)&255; buff[p+1] = (n>>8)&255; },
1550
- writeInt : function(buff, p, n) { var a=UTIF._binBE.ui8; UTIF._binBE.i32[0]=n; buff[p+0]=a[0]; buff[p+1]=a[1]; buff[p+2]=a[2]; buff[p+3]=a[3]; },
1551
- writeUint : function(buff, p, n) { buff[p] = (n>>>0)&255; buff[p+1] = (n>>>8)&255; buff[p+2] = (n>>>16)&255; buff[p+3] = (n>>>24)&255; },
1552
- writeASCII : UTIF._binBE.writeASCII
1553
- }
1554
- UTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff)
1555
- {
1556
- //log("copyTile", tw, th, w, h, xoff, yoff);
1557
- var xlim = Math.min(tw, w-xoff);
1558
- var ylim = Math.min(th, h-yoff);
1559
- for(var y=0; y<ylim; y++)
1560
- {
1561
- var tof = (yoff+y)*w+xoff;
1562
- var sof = y*tw;
1563
- for(var x=0; x<xlim; x++) b[tof+x] = tb[sof+x];
1564
- }
1565
- }
1566
-
1567
- UTIF._inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;
1568
- if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;
1569
- if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);
1570
- var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;
1571
- w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1}if(m==2){J=A(N,d,5)+257;
1572
- h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var E=d,j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0}for(var c=0;
1573
- c<Q;c++){var K=A(N,d+c*3,3);b.Q[(b.X[c]<<1)+1]=K;if(K>j)j=K}d+=3*Q;M(b.Q,j);I(b.Q,j,b.u);v=b.w;C=b.d;
1574
- d=l(b.u,(1<<j)-1,J+h,N,d,b.v);var r=V.V(b.v,0,J,b.C);X=(1<<r)-1;var S=V.V(b.v,J,h,b.D);u=(1<<S)-1;M(b.C,r);
1575
- I(b.C,r,v);M(b.D,S);I(b.D,S,C)}while(!0){var T=v[e(N,d)&X];d+=T&15;var p=T>>>4;if(p>>>8==0){W[w++]=p}else if(p==256){break}else{var z=w+p-254;
1576
- if(p>264){var _=b.q[p-257];z=w+(_>>>3)+A(N,d,_&7);d+=_&7}var $=C[e(N,d)&u];d+=$&15;var s=$>>>4,Y=b.c[s],a=(Y>>>4)+n(N,d,Y&15);
1577
- d+=Y&15;while(w<z){W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a]}w=z}}}return W.length==w?W:W.slice(0,w)};
1578
- H.H.W=function(N,W){var R=N.length;if(W<=R)return N;var V=new Uint8Array(R<<1);V.set(N,0);return V};
1579
- H.H.R=function(N,W,R,V,n,A){var l=H.H.e,M=H.H.Z,I=0;while(I<R){var e=N[M(V,n)&W];n+=e&15;var b=e>>>4;
1580
- if(b<=15){A[I]=b;I++}else{var Z=0,m=0;if(b==16){m=3+l(V,n,2);n+=2;Z=A[I-1]}else if(b==17){m=3+l(V,n,3);
1581
- n+=3}else if(b==18){m=11+l(V,n,7);n+=7}var J=I+m;while(I<J){A[I]=Z;I++}}}return n};H.H.V=function(N,W,R,V){var n=0,A=0,l=V.length>>>1;
1582
- while(A<R){var M=N[A+W];V[A<<1]=0;V[(A<<1)+1]=M;if(M>n)n=M;A++}while(A<l){V[A<<1]=0;V[(A<<1)+1]=0;A++}return n};
1583
- H.H.n=function(N,W){var R=H.H.m,V=N.length,n,A,l,M,I,e=R.j;for(var M=0;M<=W;M++)e[M]=0;for(M=1;M<V;M+=2)e[N[M]]++;
1584
- var b=R.K;n=0;e[0]=0;for(A=1;A<=W;A++){n=n+e[A-1]<<1;b[A]=n}for(l=0;l<V;l+=2){I=N[l+1];if(I!=0){N[l]=b[I];
1585
- b[I]++}}};H.H.A=function(N,W,R){var V=N.length,n=H.H.m,A=n.r;for(var l=0;l<V;l+=2)if(N[l+1]!=0){var M=l>>1,I=N[l+1],e=M<<4|I,b=W-I,Z=N[l]<<b,m=Z+(1<<b);
1586
- while(Z!=m){var J=A[Z]>>>15-W;R[J]=e;Z++}}};H.H.l=function(N,W){var R=H.H.m.r,V=15-W;for(var n=0;n<N.length;
1587
- n+=2){var A=N[n]<<W-N[n+1];N[n]=R[A]>>>V}};H.H.M=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8};
1588
- H.H.I=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8;N[V+2]|=R>>>16};H.H.e=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8)>>>(W&7)&(1<<R)-1};
1589
- H.H.b=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)&(1<<R)-1};H.H.Z=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)};
1590
- H.H.i=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16|N[(W>>>3)+3]<<24)>>>(W&7)};H.H.m=function(){var N=Uint16Array,W=Uint32Array;
1591
- return{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(1<<15),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(1<<16),g:new N(1<<15)}}();
1592
- (function(){var N=H.H.m,W=1<<15;for(var R=0;R<W;R++){var V=R;V=(V&2863311530)>>>1|(V&1431655765)<<1;
1593
- V=(V&3435973836)>>>2|(V&858993459)<<2;V=(V&4042322160)>>>4|(V&252645135)<<4;V=(V&4278255360)>>>8|(V&16711935)<<8;
1594
- N.r[R]=(V>>>16|V<<16)>>>17}function n(A,l,M){while(l--!=0)A.push(0,M)}for(var R=0;R<32;R++){N.q[R]=N.S[R]<<3|N.T[R];
1595
- N.c[R]=N.p[R]<<4|N.z[R]}n(N._,144,8);n(N._,255-143,9);n(N._,279-255,7);n(N._,287-279,8);H.H.n(N._,9);
1596
- H.H.A(N._,9,N.J);H.H.l(N._,9);n(N.$,32,5);H.H.n(N.$,5);H.H.A(N.$,5,N.h);H.H.l(N.$,5);n(N.Q,19,0);n(N.C,286,0);
1597
- n(N.D,30,0);n(N.v,320,0)}());return H.H.N}();
1598
-
1599
-
1600
-
1601
- UTIF.LosslessJpegDecode =function(){var b,O;function l(){return b[O++]}function m(){return b[O++]<<8|b[O++]}function a0(h){var V=l(),I=[0,0,0,255],f=[],G=8;
1602
- for(var w=0;w<16;w++)f[w]=l();for(var w=0;w<16;w++){for(var x=0;x<f[w];x++){var T=z(I,0,w+1,1);I[T+3]=l()}}var E=new Uint8Array(1<<G);
1603
- h[V]=[new Uint8Array(I),E];for(var w=0;w<1<<G;w++){var s=G,_=w,Y=0,F=0;while(I[Y+3]==255&&s!=0){F=_>>--s&1;
1604
- Y=I[Y+F]}E[w]=Y}}function z(h,V,I,f){if(h[V+3]!=255)return 0;if(I==0)return V;for(var w=0;w<2;w++){if(h[V+w]==0){h[V+w]=h.length;
1605
- h.push(0,0,f,255)}var x=z(h,h[V+w],I-1,f+1);if(x!=0)return x}return 0}function i(h){var V=h.b,I=h.f;
1606
- while(V<25&&h.a<h.d){var f=h.data[h.a++];if(f==255&&!h.c)h.a++;I=I<<8|f;V+=8}if(V<0)throw"e";h.b=V;h.f=I}function H(h,V){if(V.b<h)i(V);
1607
- return V.f>>(V.b-=h)&65535>>16-h}function g(h,V){var I=h[0],f=0,w=255,x=0;if(V.b<16)i(V);var T=V.f>>V.b-8&255;
1608
- f=h[1][T];w=I[f+3];V.b-=I[f+2];while(w==255){x=V.f>>--V.b&1;f=I[f+x];w=I[f+3]}return w}function P(h,V){if(h<32768>>16-V)h+=-(1<<V)+1;
1609
- return h}function a2(h,V){var I=g(h,V);if(I==0)return 0;if(I==16)return-32768;var f=H(I,V);return P(f,I)}function X(h,V,I,f,w,x){var T=0;
1610
- for(var G=0;G<x;G++){var s=G*V;for(var _=0;_<V;_+=w){T++;for(var Y=0;Y<w;Y++)h[s+_+Y]=a2(f[Y],I)}if(I.e!=0&&T%I.e==0&&G!=0){var F=I.a,t=I.data;
1611
- while(t[F]!=255||!(208<=t[F+1]&&t[F+1]<=215))F--;I.a=F+2;I.f=0;I.b=0}}}function o(h,V){return P(H(h,V),h)}function a1(h,V,I,f,w){var x=b.length-O;
1612
- for(var T=0;T<x;T+=4){var G=b[O+T];b[O+T]=b[O+T+3];b[O+T+3]=G;var G=b[O+T+1];b[O+T+1]=b[O+T+2];b[O+T+2]=G}for(var E=0;
1613
- E<w;E++){var s=32768,_=32768;for(var Y=0;Y<V;Y+=2){var F=g(f,I),t=g(f,I);if(F!=0)s+=o(F,I);if(t!=0)_+=o(t,I);
1614
- h[E*V+Y]=s&65535;h[E*V+Y+1]=_&65535}}}function C(h){b=h;O=0;if(m()!=65496)throw"e";var V=[],I=0,f=0,w=0,x=[],T=[],G=[],E=0,s=0,_=0;
1615
- while(!0){var Y=m();if(Y==65535){O--;continue}var F=m();if(Y==65475){f=l();s=m();_=m();E=l();for(var t=0;
1616
- t<E;t++){var a=l(),J=l(),r=l();if(r!=0)throw"e";V[a]=[t,J>>4,J&15]}}else if(Y==65476){var a3=O+F-2;while(O<a3)a0(T)}else if(Y==65498){O++;
1617
- for(var t=0;t<E;t++){var a5=l(),v=V[a5];G[v[0]]=T[l()>>>4];x[v[0]]=v.slice(1)}I=l();O+=2;break}else if(Y==65501){w=m()}else{O+=F-2}}var a4=f>8?Uint16Array:Uint8Array,$=new a4(s*_*E),M={b:0,f:0,c:I==8,a:O,data:b,d:b.length,e:w};
1618
- if(M.c)a1($,_*E,M,G[0],s);else{var c=[],p=0,D=0;for(var t=0;t<E;t++){var N=x[t],S=N[0],K=N[1];if(S>p)p=S;
1619
- if(K>D)D=K;c.push(S*K)}if(p!=1||D!=1){if(E!=3||c[1]!=1||c[2]!=1)throw"e";if(p!=2||D!=1&&D!=2)throw"e";
1620
- var u=[],Z=0;for(var t=0;t<E;t++){for(var R=0;R<c[t];R++)u.push(G[t]);Z+=c[t]}var B=_/p,e=s/D,d=B*e;
1621
- X($,B*Z,M,u,Z,e);j($,I,B,e,Z-2,Z,Z,f);var A=new Uint16Array(d*c[0]);if(p==2&&D==2){for(var t=0;t<d;t++){A[4*t]=$[6*t];
1622
- A[4*t+1]=$[6*t+1];A[4*t+2]=$[6*t+2];A[4*t+3]=$[6*t+3]}j(A,I,B*4,e,0,1,1,f);for(var t=0;t<d;t++){$[6*t]=A[4*t];
1623
- $[6*t+1]=A[4*t+1];$[6*t+2]=A[4*t+2];$[6*t+3]=A[4*t+3]}}if(p==2&&D==1){for(var t=0;t<d;t++){A[2*t]=$[4*t];
1624
- A[2*t+1]=$[4*t+1]}j(A,I,B*2,e,0,1,1,f);for(var t=0;t<d;t++){$[4*t]=A[2*t];$[4*t+1]=A[2*t+1]}}var n=$.slice(0);
1625
- for(var K=0;K<s;K++){if(D==2)for(var S=0;S<_;S++){var q=(K*_+S)*E,k=((K>>>1)*B+(S>>>1))*Z,y=(K&1)*2+(S&1);
1626
- $[q]=n[k+y];$[q+1]=n[k+4];$[q+2]=n[k+5]}else for(var S=0;S<_;S++){var q=(K*_+S)*E,k=(K*B+(S>>>1))*Z,y=S&1;
1627
- $[q]=n[k+y];$[q+1]=n[k+2];$[q+2]=n[k+3]}}}else{X($,_*E,M,G,E,s);if(w==0)j($,I,_,s,0,E,E,f);else{var U=Math.floor(w/_);
1628
- for(var K=0;K<s;K+=U){var L=$.slice(K*_*E,(K+U)*_*E);j(L,I,_,U,0,E,E,f);$.set(L,K*_*E)}}}}return $}function j(h,V,I,f,w,x,G,E){var s=I*G;
1629
- for(var _=w;_<x;_++)h[_]+=1<<E-1;for(var Y=G;Y<s;Y+=G)for(var _=w;_<x;_++)h[Y+_]+=h[Y+_-G];for(var F=1;
1630
- F<f;F++){var t=F*s;for(var _=w;_<x;_++)h[t+_]+=h[t+_-s];for(var Y=G;Y<s;Y+=G){for(var _=w;_<x;_++){var a=t+Y+_,J=a-s,r=h[a-G],Q=0;
1631
- if(V==0)Q=0;else if(V==1)Q=r;else if(V==2)Q=h[J];else if(V==3)Q=h[J-G];else if(V==4)Q=r+(h[J]-h[J-G]);
1632
- else if(V==5)Q=r+(h[J]-h[J-G]>>>1);else if(V==6)Q=h[J]+(r-h[J-G]>>>1);else if(V==7)Q=r+h[J]>>>1;else throw V;
1633
- h[a]+=Q}}}}return C}();
1634
-
1635
-
1636
- (function(){var G=0,F=1,i=2,b=3,J=4,N=5,E=6,s=7,c=8,T=9,a3=10,f=11,q=12,M=13,m=14,x=15,L=16,$=17,p=18;
1637
- function a5(t){var Z=UTIF._binBE.readUshort,u={b:Z(t,0),i:t[2],C:t[3],u:t[4],q:Z(t,5),k:Z(t,7),e:Z(t,9),l:Z(t,11),s:t[13],d:Z(t,14)};
1638
- if(u.b!=18771||u.i>1||u.q<6||u.q%6||u.e<768||u.e%24||u.l!=768||u.k<u.l||u.k%u.l||u.k-u.e>=u.l||u.s>16||u.s!=u.k/u.l||u.s!=Math.ceil(u.e/u.l)||u.d!=u.q/6||u.u!=12&&u.u!=14&&u.u!=16||u.C!=16&&u.C!=0){throw"Invalid data"}if(u.i==0){throw"Not implemented. We need this file!"}u.h=u.C==16;
1639
- u.m=(u.h?u.l*2/3:u.l>>>1)|0;u.A=u.m+2;u.f=64;u.g=(1<<u.u)-1;u.n=4*u.u;return u}function a7(t,Z){var u=new Array(Z.s),e=4*Z.s,Q=16+e;
1640
- if(e&12)Q+=16-(e&12);for(var V=0,O=16;V<Z.s;O+=4){var o=UTIF._binBE.readUint(t,O);u[V]=t.slice(Q,Q+o);u[V].j=0;u[V].a=0;
1641
- Q+=o;V++}if(Q!=t.length)throw"Invalid data";return u}function a6(t,Z){for(var u=-Z[4],e=0;u<=Z[4];e++,u++){t[e]=u<=-Z[3]?-4:u<=-Z[2]?-3:u<=-Z[1]?-2:u<-Z[0]?-1:u<=Z[0]?0:u<Z[1]?1:u<Z[2]?2:u<Z[3]?3:4}}function a1(t,Z,u){var e=[Z,3*Z+18,5*Z+67,7*Z+276,u];
1642
- t.o=Z;t.w=(e[4]+2*Z)/(2*Z+1)+1|0;t.v=Math.ceil(Math.log2(t.w));t.t=9;a6(t.c,e)}function a2(t){var Z={c:new Int8Array(2<<t.u)};
1643
- a1(Z,0,t.g);return Z}function D(t){var Z=[[],[],[]],u=Math.max(2,t.w+32>>>6);for(var e=0;e<3;e++){for(var Q=0;
1644
- Q<41;Q++){Z[e][Q]=[u,1]}}return Z}function a4(t){for(var Z=-1,u=0;!u;Z++){u=t[t.j]>>>7-t.a&1;t.a++;t.a&=7;
1645
- if(!t.a)t.j++}return Z}function K(t,Z){var u=0,e=8-t.a,Q=t.j,V=t.a;if(Z){if(Z>=e){do{u<<=e;Z-=e;u|=t[t.j]&(1<<e)-1;
1646
- t.j++;e=8}while(Z>=8)}if(Z){u<<=Z;e-=Z;u|=t[t.j]>>>e&(1<<Z)-1}t.a=8-e}return u}function a0(t,Z){var u=0;
1647
- if(Z<t){while(u<=14&&Z<<++u<t);}return u}function r(t,Z,u,e,Q,V,O,o){if(o==null)o=0;var X=V+1,k=X%2,j=0,I=0,a=0,l,R,w=e[Q],S=e[Q-1],H=e[Q-2][X],g=S[X-1],Y=S[X],P=S[X+1],A=w[X-1],v=w[X+1],y=Math.abs,d,C,n,h;
1648
- if(k){d=y(P-Y);C=y(H-Y);n=y(g-Y)}if(k){h=d>n&&C<d?H+g:d<n&&C<n?H+P:P+g;h=h+2*Y>>>2;if(o){w[X]=h;return}l=Z.t*Z.c[t.g+Y-H]+Z.c[t.g+g-Y]}else{h=Y>g&&Y>P||Y<g&&Y<P?v+A+2*Y>>>2:A+v>>>1;
1649
- l=Z.t*Z.c[t.g+Y-g]+Z.c[t.g+g-A]}R=y(l);var W=a4(u);if(W<t.n-Z.v-1){var z=a0(O[R][0],O[R][1]);a=K(u,z)+(W<<z)}else{a=K(u,Z.v)+1}a=a&1?-1-(a>>>1):a>>>1;
1650
- O[R][0]+=y(a);if(O[R][1]==t.f){O[R][0]>>>=1;O[R][1]>>>=1}O[R][1]++;h=l<0?h-a:h+a;if(t.i){if(h<0)h+=Z.w;
1651
- else if(h>t.g)h-=Z.w}w[X]=h>=0?Math.min(h,t.g):0}function U(t,Z,u){var e=t[0].length;for(var Q=Z;Q<=u;
1652
- Q++){t[Q][0]=t[Q-1][1];t[Q][e-1]=t[Q-1][e-2]}}function B(t){U(t,s,q);U(t,i,J);U(t,x,$)}function _(t,Z,u,e,Q,V,O,o,X,k,j,I,a){var l=0,R=1,w=Q<M&&Q>J;
1653
- while(R<t.m){if(l<t.m){r(t,Z,u,e,Q,l,O[X],t.h&&(w&&k||!w&&(j||(l&I)==a)));r(t,Z,u,e,V,l,O[X],t.h&&(!w&&k||w&&(j||(l&I)==a)));
1654
- l+=2}if(l>8){r(t,Z,u,e,Q,R,o[X]);r(t,Z,u,e,V,R,o[X]);R+=2}}B(e)}function a8(t,Z,u,e,Q,V){_(t,Z,u,e,i,s,Q,V,0,0,1,0,8);
1655
- _(t,Z,u,e,c,x,Q,V,1,0,1,0,8);_(t,Z,u,e,b,T,Q,V,2,1,0,3,0);_(t,Z,u,e,a3,L,Q,V,0,0,0,3,2);_(t,Z,u,e,J,f,Q,V,1,0,0,3,2);
1656
- _(t,Z,u,e,q,$,Q,V,2,1,0,3,0)}function a9(t,Z,u,e,Q,V){var O=V.length,o=t.l;if(Q+1==t.s)o=t.e-Q*t.l;var X=6*t.e*e+Q*t.l;
1657
- for(var k=0;k<6;k++){for(var j=0;j<o;j++){var I=V[k%O][j%O],a;if(I==0){a=i+(k>>>1)}else if(I==2){a=x+(k>>>1)}else{a=s+k}var l=t.h?(j*2/3&2147483646|j%3&1)+(j%3>>>1):j>>>1;
1658
- Z[X+j]=u[a][l+1]}X+=t.e}}UTIF._decompressRAF=function(t,Z){var u=a5(t),e=a7(t,u),Q=a2(u),V=new Int16Array(u.e*u.q);
1659
- if(Z==null){Z=u.h?[[1,1,0,1,1,2],[1,1,2,1,1,0],[2,0,1,0,2,1],[1,1,2,1,1,0],[1,1,0,1,1,2],[0,2,1,2,0,1]]:[[0,1],[3,2]]}var O=[[G,b],[F,J],[N,f],[E,q],[M,L],[m,$]],o=[];
1660
- for(var X=0;X<p;X++){o[X]=new Uint16Array(u.A)}for(var k=0;k<u.s;k++){var j=D(Q),I=D(Q);for(var X=0;
1661
- X<p;X++){for(var a=0;a<u.A;a++){o[X][a]=0}}for(var l=0;l<u.d;l++){a8(u,Q,e[k],o,j,I);for(var X=0;X<6;
1662
- X++){for(var a=0;a<u.A;a++){o[O[X][0]][a]=o[O[X][1]][a]}}a9(u,V,o,l,k,Z);for(var X=i;X<p;X++){if([N,E,M,m].indexOf(X)==-1){for(var a=0;
1663
- a<u.A;a++){o[X][a]=0}}}B(o)}}return V}}())
1664
-
1
+ var UTIF = {};
2
+
3
+ // Following lines add a JPEG decoder to UTIF.JpegDecoder
4
+ (function(){"use strict";var W=function a1(){function W(p){this.message="JPEG error: "+p}W.prototype=new Error;W.prototype.name="JpegError";W.constructor=W;return W}(),ak=function ag(){var p=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,ac=799,ah=3406,ao=2276,ar=1567,ai=3784,s=5793,ad=2896;function ak(Q){if(Q==null)Q={};if(Q.w==null)Q.w=-1;this.V=Q.n;this.N=Q.w}function a5(Q,h){var f=0,G=[],n,E,a=16,F;while(a>0&&!Q[a-1]){a--}G.push({children:[],index:0});var C=G[0];for(n=0;n<a;n++)
5
+ {for(E=0;E<Q[n];E++){C=G.pop();C.children[C.index]=h[f];while(C.index>0){C=G.pop()}C.index++;G.push(C);while(G.length<=n){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}f++}if(n+1<a){G.push(F={children:[],index:0});C.children[C.index]=F.children;C=F}}return G[0].children}function a2(Q,h,f){return 64*((Q.P+1)*h+f)}function a7(Q,h,f,G,n,E,a,C,F,d){if(d==null)d=!1;var T=f.m,U=f.Z,z=h,J=0,V=0,r=0,D=0,a8,q=0,X,O,_,N,e,K,x=0,k,g,R,c;function Y(){if(V>0){V--;return J>>V&1}J=Q[h++];if(J===255){var I=Q[h++];if(I){if(I===220&&d){h+=2;var l=Z(Q,h);h+=2;if(l>0&&l!==f.s){throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",l)}}else if(I===217){if(d){var M=q*8;
6
+ if(M>0&&M<f.s/10){throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, "+"possibly caused by incorrect `scanLines` parameter",M)}}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new W("unexpected marker")}}V=7;return J>>>7}function u(I){var l=I;while(!0){l=l[Y()];switch(typeof l){case"number":return l;case"object":continue}throw new W("invalid huffman sequence")}}function m(I){var e=0;while(I>0){e=e<<1|Y();I--}return e}function j(I){if(I===1){return Y()===1?1:-1}var e=m(I);if(e>=1<<I-1){return e}return e+(-1<<I)+1}function v(X,I){var l=u(X.J),M=l===0?0:j(l),N=1;
7
+ X.D[I]=X.Q+=M;while(N<64){var S=u(X.i),i=S&15,A=S>>4;if(i===0){if(A<15){break}N+=16;continue}N+=A;var o=p[N];X.D[I+o]=j(i);N++}}function $(X,I){var l=u(X.J),M=l===0?0:j(l)<<F;X.D[I]=X.Q+=M}function b(X,I){X.D[I]|=Y()<<F}function P(X,I){if(r>0){r--;return}var N=E,l=a;while(N<=l){var M=u(X.i),S=M&15,i=M>>4;if(S===0){if(i<15){r=m(i)+(1<<i)-1;break}N+=16;continue}N+=i;var A=p[N];X.D[I+A]=j(S)*(1<<F);N++}}function a4(X,I){var N=E,l=a,M=0,S,i;while(N<=l){var A=I+p[N],o=X.D[A]<0?-1:1;switch(D){case 0:i=u(X.i);S=i&15;M=i>>4;if(S===0){if(M<15){r=m(M)+(1<<M);D=4}else{M=16;D=1}}else{if(S!==1){throw new W("invalid ACn encoding")}a8=j(S);D=M?2:3}continue;case 1:case 2:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{M--;if(M===0){D=D===2?3:0}}break;case 3:if(X.D[A]){X.D[A]+=o*(Y()<<F)}else{X.D[A]=a8<<F;
8
+ D=0}break;case 4:if(X.D[A]){X.D[A]+=o*(Y()<<F)}break}N++}if(D===4){r--;if(r===0){D=0}}}function H(X,I,x,l,M){var S=x/T|0,i=x%T;q=S*X.A+l;var A=i*X.h+M,o=a2(X,q,A);I(X,o)}function w(X,I,x){q=x/X.P|0;var l=x%X.P,M=a2(X,q,l);I(X,M)}var y=G.length;if(U){if(E===0){K=C===0?$:b}else{K=C===0?P:a4}}else{K=v}if(y===1){g=G[0].P*G[0].c}else{g=T*f.R}while(x<=g){var L=n?Math.min(g-x,n):g;if(L>0){for(O=0;O<y;O++){G[O].Q=0}r=0;if(y===1){X=G[0];for(e=0;e<L;e++){w(X,K,x);x++}}else{for(e=0;e<L;
9
+ e++){for(O=0;O<y;O++){X=G[O];R=X.h;c=X.A;for(_=0;_<c;_++){for(N=0;N<R;N++){H(X,K,x,_,N)}}}x++}}}V=0;k=an(Q,h);if(!k){break}if(k.u){var a6=L>0?"unexpected":"excessive";h=k.offset}if(k.M>=65488&&k.M<=65495){h+=2}else{break}}return h-z}function al(Q,h,f){var G=Q.$,n=Q.D,E,a,C,F,d,T,U,z,J,V,Y,u,m,j,v,$,b;if(!G){throw new W("missing required Quantization Table.")}for(var r=0;r<64;r+=8){J=n[h+r];V=n[h+r+1];Y=n[h+r+2];u=n[h+r+3];m=n[h+r+4];j=n[h+r+5];v=n[h+r+6];$=n[h+r+7];J*=G[r];if((V|Y|u|m|j|v|$)===0){b=s*J+512>>10;f[r]=b;f[r+1]=b;f[r+2]=b;f[r+3]=b;f[r+4]=b;f[r+5]=b;f[r+6]=b;f[r+7]=b;continue}V*=G[r+1];Y*=G[r+2];u*=G[r+3];m*=G[r+4];j*=G[r+5];v*=G[r+6];$*=G[r+7];E=s*J+128>>8;a=s*m+128>>8;C=Y;F=v;d=ad*(V-$)+128>>8;z=ad*(V+$)+128>>8;
10
+ T=u<<4;U=j<<4;E=E+a+1>>1;a=E-a;b=C*ai+F*ar+128>>8;C=C*ar-F*ai+128>>8;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;b=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;f[r]=E+z;f[r+7]=E-z;f[r+1]=a+U;f[r+6]=a-U;f[r+2]=C+T;f[r+5]=C-T;f[r+3]=F+d;f[r+4]=F-d}for(var P=0;P<8;++P){J=f[P];V=f[P+8];Y=f[P+16];u=f[P+24];m=f[P+32];j=f[P+40];v=f[P+48];$=f[P+56];if((V|Y|u|m|j|v|$)===0){b=s*J+8192>>14;if(b<-2040){b=0}else if(b>=2024){b=255}else{b=b+2056>>4}n[h+P]=b;n[h+P+8]=b;n[h+P+16]=b;n[h+P+24]=b;n[h+P+32]=b;n[h+P+40]=b;n[h+P+48]=b;n[h+P+56]=b;continue}E=s*J+2048>>12;a=s*m+2048>>12;C=Y;F=v;d=ad*(V-$)+2048>>12;z=ad*(V+$)+2048>>12;T=u;U=j;E=(E+a+1>>1)+4112;a=E-a;b=C*ai+F*ar+2048>>12;C=C*ar-F*ai+2048>>12;F=b;d=d+U+1>>1;U=d-U;z=z+T+1>>1;T=z-T;E=E+F+1>>1;F=E-F;a=a+C+1>>1;C=a-C;b=d*ao+z*ah+2048>>12;d=d*ah-z*ao+2048>>12;z=b;
11
+ b=T*ac+U*t+2048>>12;T=T*t-U*ac+2048>>12;U=b;J=E+z;$=E-z;V=a+U;v=a-U;Y=C+T;j=C-T;u=F+d;m=F-d;if(J<16){J=0}else if(J>=4080){J=255}else{J>>=4}if(V<16){V=0}else if(V>=4080){V=255}else{V>>=4}if(Y<16){Y=0}else if(Y>=4080){Y=255}else{Y>>=4}if(u<16){u=0}else if(u>=4080){u=255}else{u>>=4}if(m<16){m=0}else if(m>=4080){m=255}else{m>>=4}if(j<16){j=0}else if(j>=4080){j=255}else{j>>=4}if(v<16){v=0}else if(v>=4080){v=255}else{v>>=4}if($<16){$=0}else if($>=4080){$=255}else{$>>=4}n[h+P]=J;
12
+ n[h+P+8]=V;n[h+P+16]=Y;n[h+P+24]=u;n[h+P+32]=m;n[h+P+40]=j;n[h+P+48]=v;n[h+P+56]=$}}function a0(Q,h){var f=h.P,G=h.c,n=new Int16Array(64);for(var E=0;E<G;E++){for(var a=0;a<f;a++){var C=a2(h,E,a);al(h,C,n)}}return h.D}function an(Q,h,f){if(f==null)f=h;var G=Q.length-1,n=f<h?f:h;if(h>=G){return null}var E=Z(Q,h);if(E>=65472&&E<=65534){return{u:null,M:E,offset:h}}var a=Z(Q,n);while(!(a>=65472&&a<=65534)){if(++n>=G){return null}a=Z(Q,n)}return{u:E.toString(16),M:a,offset:n}}ak.prototype={parse(Q,h){if(h==null)h={};
13
+ var f=h.F,E=0,a=null,C=null,F,d,T=0;function G(){var o=Z(Q,E);E+=2;var B=E+o-2,V=an(Q,B,E);if(V&&V.u){B=V.offset}var ab=Q.subarray(E,B);E+=ab.length;return ab}function n(F){var o=Math.ceil(F.o/8/F.X),B=Math.ceil(F.s/8/F.B);for(var Y=0;Y<F.W.length;Y++){R=F.W[Y];var ab=Math.ceil(Math.ceil(F.o/8)*R.h/F.X),af=Math.ceil(Math.ceil(F.s/8)*R.A/F.B),ap=o*R.h,aq=B*R.A,ae=64*aq*(ap+1);R.D=new Int16Array(ae);R.P=ab;R.c=af}F.m=o;F.R=B}var U=[],z=[],J=[],V=Z(Q,E);E+=2;if(V!==65496){throw new W("SOI not found")}V=Z(Q,E);
14
+ E+=2;markerLoop:while(V!==65497){var Y,u,m;switch(V){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var j=G();if(V===65504){if(j[0]===74&&j[1]===70&&j[2]===73&&j[3]===70&&j[4]===0){a={version:{d:j[5],T:j[6]},K:j[7],j:j[8]<<8|j[9],H:j[10]<<8|j[11],S:j[12],I:j[13],C:j.subarray(14,14+3*j[12]*j[13])}}}if(V===65518){if(j[0]===65&&j[1]===100&&j[2]===111&&j[3]===98&&j[4]===101){C={version:j[5]<<8|j[6],k:j[7]<<8|j[8],q:j[9]<<8|j[10],a:j[11]}}}break;
15
+ case 65499:var v=Z(Q,E),b;E+=2;var $=v+E-2;while(E<$){var r=Q[E++],P=new Uint16Array(64);if(r>>4===0){for(u=0;u<64;u++){b=p[u];P[b]=Q[E++]}}else if(r>>4===1){for(u=0;u<64;u++){b=p[u];P[b]=Z(Q,E);E+=2}}else{throw new W("DQT - invalid table spec")}U[r&15]=P}break;case 65472:case 65473:case 65474:if(F){throw new W("Only single frame JPEGs supported")}E+=2;F={};F.G=V===65473;F.Z=V===65474;F.precision=Q[E++];var D=Z(Q,E),a4,q=0,H=0;E+=2;F.s=f||D;F.o=Z(Q,E);E+=2;F.W=[];F._={};var a8=Q[E++];for(Y=0;Y<a8;Y++){a4=Q[E];var w=Q[E+1]>>4,y=Q[E+1]&15;if(q<w){q=w}if(H<y){H=y}var X=Q[E+2];m=F.W.push({h:w,A:y,L:X,$:null});F._[a4]=m-1;E+=3}F.X=q;F.B=H;n(F);break;case 65476:var O=Z(Q,E);E+=2;
16
+ for(Y=2;Y<O;){var _=Q[E++],N=new Uint8Array(16),e=0;for(u=0;u<16;u++,E++){e+=N[u]=Q[E]}var K=new Uint8Array(e);for(u=0;u<e;u++,E++){K[u]=Q[E]}Y+=17+e;(_>>4===0?J:z)[_&15]=a5(N,K)}break;case 65501:E+=2;d=Z(Q,E);E+=2;break;case 65498:var x=++T===1&&!f,R;E+=2;var k=Q[E++],g=[];for(Y=0;Y<k;Y++){var c=Q[E++],L=F._[c];R=F.W[L];R.index=c;var a6=Q[E++];R.J=J[a6>>4];R.i=z[a6&15];g.push(R)}var I=Q[E++],l=Q[E++],M=Q[E++];try{var S=a7(Q,E,F,g,d,I,l,M>>4,M&15,x);E+=S}catch(ex){if(ex instanceof DNLMarkerError){return this.parse(Q,{F:ex.s})}else if(ex instanceof EOIMarkerError){break markerLoop}throw ex}break;case 65500:E+=4;break;case 65535:if(Q[E]!==255){E--}break;default:var i=an(Q,E-2,E-3);if(i&&i.u){E=i.offset;break}if(E>=Q.length-1){break markerLoop}throw new W("JpegImage.parse - unknown marker: "+V.toString(16))}V=Z(Q,E);E+=2}this.width=F.o;this.height=F.s;this.g=a;this.b=C;this.W=[];for(Y=0;Y<F.W.length;Y++){R=F.W[Y];
17
+ var A=U[R.L];if(A){R.$=A}this.W.push({index:R.index,e:a0(F,R),l:R.h/F.X,t:R.A/F.B,P:R.P,c:R.c})}this.p=this.W.length;return undefined},Y(Q,h,f){if(f==null)f=!1;var G=this.width/Q,n=this.height/h,E,a,C,F,d,T,U,z,J,V,Y=0,u,m=this.W.length,j=Q*h*m,v=new Uint8ClampedArray(j),$=new Uint32Array(Q),b=4294967288,r;for(U=0;U<m;U++){E=this.W[U];a=E.l*G;C=E.t*n;Y=U;u=E.e;F=E.P+1<<3;if(a!==r){for(d=0;d<Q;d++){z=0|d*a;$[d]=(z&b)<<3|z&7}r=a}for(T=0;T<h;T++){z=0|T*C;V=F*(z&b)|(z&7)<<3;for(d=0;d<Q;d++){v[Y]=u[V+$[d]];Y+=m}}}var P=this.V;if(!f&&m===4&&!P){P=new Int32Array([-256,255,-256,255,-256,255,-256,255])}if(P){for(U=0;U<j;){for(z=0,J=0;z<m;z++,U++,J+=2){v[U]=(v[U]*P[J]>>8)+P[J+1]}}}return v},get f(){if(this.b){return!!this.b.a}if(this.p===3){if(this.N===0){return!1}else if(this.W[0].index===82&&this.W[1].index===71&&this.W[2].index===66){return!1}return!0}if(this.N===1){return!0}return!1},z:function aj(Q){var h,f,G;
18
+ for(var n=0,E=Q.length;n<E;n+=3){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=h-179.456+1.402*G;Q[n+1]=h+135.459-.344*f-.714*G;Q[n+2]=h-226.816+1.772*f}return Q},O:function aa(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=-122.67195406894+f*(-660635669420364e-19*f+.000437130475926232*G-54080610064599e-18*h+.00048449797120281*n-.154362151871126)+G*(-.000957964378445773*G+.000817076911346625*h-.00477271405408747*n+1.53380253221734)+h*(.000961250184130688*h-.00266257332283933*n+.48357088451265)+n*(-.000336197177618394*n+.484791561490776);
19
+ Q[E++]=107.268039397724+f*(219927104525741e-19*f-.000640992018297945*G+.000659397001245577*h+.000426105652938837*n-.176491792462875)+G*(-.000778269941513683*G+.00130872261408275*h+.000770482631801132*n-.151051492775562)+h*(.00126935368114843*h-.00265090189010898*n+.25802910206845)+n*(-.000318913117588328*n-.213742400323665);Q[E++]=-20.810012546947+f*(-.000570115196973677*f-263409051004589e-19*G+.0020741088115012*h-.00288260236853442*n+.814272968359295)+G*(-153496057440975e-19*G-.000132689043961446*h+.000560833691242812*n-.195152027534049)+h*(.00174418132927582*h-.00255243321439347*n+.116935020465145)+n*(-.000343531996510555*n+.24165260232407)}return Q.subarray(0,E)},r:function a3(Q){var h,f,G;
20
+ for(var n=0,E=Q.length;n<E;n+=4){h=Q[n];f=Q[n+1];G=Q[n+2];Q[n]=434.456-h-1.402*G;Q[n+1]=119.541-h+.344*f+.714*G;Q[n+2]=481.816-h-1.772*f}return Q},U:function as(Q){var h,f,G,n,E=0;for(var a=0,C=Q.length;a<C;a+=4){h=Q[a];f=Q[a+1];G=Q[a+2];n=Q[a+3];Q[E++]=255+h*(-6747147073602441e-20*h+.0008379262121013727*f+.0002894718188643294*G+.003264231057537806*n-1.1185611867203937)+f*(26374107616089404e-21*f-8626949158638572e-20*G-.0002748769067499491*n-.02155688794978967)+G*(-3878099212869363e-20*G-.0003267808279485286*n+.0686742238595345)-n*(.0003361971776183937*n+.7430659151342254);
21
+ Q[E++]=255+h*(.00013596372813588848*h+.000924537132573585*f+.00010567359618683593*G+.0004791864687436512*n-.3109689587515875)+f*(-.00023545346108370344*f+.0002702845253534714*G+.0020200308977307156*n-.7488052167015494)+G*(6834815998235662e-20*G+.00015168452363460973*n-.09751927774728933)-n*(.0003189131175883281*n+.7364883807733168);Q[E++]=255+h*(13598650411385308e-21*h+.00012423956175490851*f+.0004751985097583589*G-36729317476630424e-22*n-.05562186980264034)+f*(.00016141380598724676*f+.0009692239130725186*G+.0007782692450036253*n-.44015232367526463)+G*(5.068882914068769e-7*G+.0017778369011375071*n-.7591454649749609)-n*(.0003435319965105553*n+.7063770186160144)}return Q.subarray(0,E)},getData:function(Q){var h=Q.width,f=Q.height,G=Q.forceRGB,n=Q.isSourcePDF;
22
+ if(this.p>4){throw new W("Unsupported color mode")}var E=this.Y(h,f,n);if(this.p===1&&G){var a=E.length,C=new Uint8ClampedArray(a*3),F=0;for(var d=0;d<a;d++){var T=E[d];C[F++]=T;C[F++]=T;C[F++]=T}return C}else if(this.p===3&&this.f){return this.z(E)}else if(this.p===4){if(this.f){if(G){return this.O(E)}return this.r(E)}else if(G){return this.U(E)}}return E}};return ak}();function a9(p,t){return p[t]<<24>>24}function Z(p,t){return p[t]<<8|p[t+1]}function am(p,t){return(p[t]<<24|p[t+1]<<16|p[t+2]<<8|p[t+3])>>>0}UTIF.JpegDecoder=ak}());
23
+
24
+ //UTIF.JpegDecoder = PDFJS.JpegImage;
25
+
26
+
27
+ UTIF.encodeImage = function(rgba, w, h, metadata)
28
+ {
29
+ var idf = { "t256":[w], "t257":[h], "t258":[8,8,8,8], "t259":[1], "t262":[2], "t273":[1000], // strips offset
30
+ "t277":[4], "t278":[h], /* rows per strip */ "t279":[w*h*4], // strip byte counts
31
+ "t282":[[72,1]], "t283":[[72,1]], "t284":[1], "t286":[[0,1]], "t287":[[0,1]], "t296":[1], "t305": ["Photopea (UTIF.js)"], "t338":[1]
32
+ };
33
+ if (metadata) for (var i in metadata) idf[i] = metadata[i];
34
+
35
+ var prfx = new Uint8Array(UTIF.encode([idf]));
36
+ var img = new Uint8Array(rgba);
37
+ var data = new Uint8Array(1000+w*h*4);
38
+ for(var i=0; i<prfx.length; i++) data[i] = prfx[i];
39
+ for(var i=0; i<img .length; i++) data[1000+i] = img[i];
40
+ return data.buffer;
41
+ }
42
+
43
+ UTIF.encode = function(ifds)
44
+ {
45
+ var LE = false;
46
+ var data = new Uint8Array(20000), offset = 4, bin = LE ? UTIF._binLE : UTIF._binBE;
47
+ data[0]=data[1]=LE?73:77; bin.writeUshort(data,2,42);
48
+
49
+ var ifdo = 8;
50
+ bin.writeUint(data, offset, ifdo); offset+=4;
51
+ for(var i=0; i<ifds.length; i++)
52
+ {
53
+ var noffs = UTIF._writeIFD(bin, UTIF._types.basic, data, ifdo, ifds[i]);
54
+ ifdo = noffs[1];
55
+ if(i<ifds.length-1) {
56
+ if((ifdo&3)!=0) ifdo+=(4-(ifdo&3)); // make each IFD start at multiple of 4
57
+ bin.writeUint(data, noffs[0], ifdo);
58
+ }
59
+ }
60
+ return data.slice(0, ifdo).buffer;
61
+ }
62
+
63
+ UTIF.decode = function(buff, prm)
64
+ {
65
+ if(prm==null) prm = {parseMN:true, debug:false}; // read MakerNote, debug
66
+ var data = new Uint8Array(buff), offset = 0;
67
+
68
+ var id = UTIF._binBE.readASCII(data, offset, 2); offset+=2;
69
+ var bin = id=="II" ? UTIF._binLE : UTIF._binBE;
70
+ var num = bin.readUshort(data, offset); offset+=2;
71
+
72
+ var ifdo = bin.readUint(data, offset); offset+=4;
73
+ var ifds = [];
74
+ while(true) {
75
+ var cnt = bin.readUshort(data,ifdo), typ = bin.readUshort(data,ifdo+4); if(cnt!=0) if(typ<1 || 13<typ) { log("error in TIFF"); break };
76
+ UTIF._readIFD(bin, data, ifdo, ifds, 0, prm);
77
+
78
+ ifdo = bin.readUint(data, ifdo+2+cnt*12);
79
+ if(ifdo==0) break;
80
+ }
81
+ return ifds;
82
+ }
83
+
84
+ UTIF.decodeImage = function(buff, img, ifds)
85
+ {
86
+ if(img.data) return;
87
+ var data = new Uint8Array(buff);
88
+ var id = UTIF._binBE.readASCII(data, 0, 2);
89
+
90
+ if(img["t256"]==null) return; // No width => probably not an image
91
+ img.isLE = id=="II";
92
+ img.width = img["t256"][0]; //delete img["t256"];
93
+ img.height = img["t257"][0]; //delete img["t257"];
94
+
95
+ var cmpr = img["t259"] ? img["t259"][0] : 1; //delete img["t259"];
96
+ var fo = img["t266"] ? img["t266"][0] : 1; //delete img["t266"];
97
+ if(img["t284"] && img["t284"][0]==2) log("PlanarConfiguration 2 should not be used!");
98
+ if(cmpr==7 && img["t258"] && img["t258"].length>3) img["t258"]=img["t258"].slice(0,3);
99
+
100
+ var spp = img["t277"]?img["t277"][0]:1;
101
+ var bps = img["t258"]?img["t258"][0]:1;
102
+ var bipp = bps*spp; // bits per pixel
103
+ /*
104
+ var bipp; // bits per pixel
105
+ if(img["t258"]) bipp = Math.min(32,img["t258"][0])*img["t258"].length;
106
+ else bipp = (img["t277"]?img["t277"][0]:1);
107
+ */
108
+ // Some .NEF files have t258==14, even though they use 16 bits per pixel
109
+ if(cmpr==1 && img["t279"]!=null && img["t278"] && img["t262"][0]==32803) {
110
+ bipp = Math.round((img["t279"][0]*8)/(img.width*img["t278"][0]));
111
+ }
112
+ if(img["t50885"] && img["t50885"][0]==4) bipp = img["t258"][0]*3; // RAW_CANON_40D_SRAW_V103.CR2
113
+ var bipl = Math.ceil(img.width*bipp/8)*8;
114
+ var soff = img["t273"]; if(soff==null || img["t322"]) soff = img["t324"];
115
+ var bcnt = img["t279"]; if(cmpr==1 && soff.length==1) bcnt = [img.height*(bipl>>>3)]; if(bcnt==null || img["t322"]) bcnt = img["t325"];
116
+ //bcnt[0] = Math.min(bcnt[0], data.length); // Hasselblad, "RAW_HASSELBLAD_H3D39II.3FR"
117
+ var bytes = new Uint8Array(img.height*(bipl>>>3)), bilen = 0;
118
+
119
+ if(img["t322"]!=null) // tiled
120
+ {
121
+ var tw = img["t322"][0], th = img["t323"][0];
122
+ var tx = Math.floor((img.width + tw - 1) / tw);
123
+ var ty = Math.floor((img.height + th - 1) / th);
124
+ var tbuff = new Uint8Array(Math.ceil(tw*th*bipp/8)|0);
125
+ console.log("====", tx,ty);
126
+ for(var y=0; y<ty; y++)
127
+ for(var x=0; x<tx; x++)
128
+ {
129
+ var i = y*tx+x; tbuff.fill(0);
130
+ UTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, tbuff, 0, fo,tw,th);
131
+ // Might be required for 7 too. Need to check
132
+ if (cmpr==6) bytes = tbuff;
133
+ else UTIF._copyTile(tbuff, Math.ceil(tw*bipp/8)|0, th, bytes, Math.ceil(img.width*bipp/8)|0, img.height, Math.ceil(x*tw*bipp/8)|0, y*th);
134
+ }
135
+ bilen = bytes.length*8;
136
+ }
137
+ else // stripped
138
+ {
139
+ if(soff==null) return;
140
+ var rps = img["t278"] ? img["t278"][0] : img.height; rps = Math.min(rps, img.height);
141
+ //console.log("====", img.width, rps);
142
+ for(var i=0; i<soff.length; i++)
143
+ {
144
+ UTIF.decode._decompress(img,ifds, data, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen/8)|0, fo,img.width,rps);
145
+ bilen += bipl * rps;
146
+ }
147
+ bilen = Math.min(bilen, bytes.length*8);
148
+ }
149
+ img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen/8)|0);
150
+ }
151
+
152
+ UTIF.decode._decompress = function(img,ifds, data, off, len, cmpr, tgt, toff, fo, w, h) // fill order
153
+ {
154
+ if(img["t271"] && img["t271"][0]=="Panasonic" && img["t45"] && img["t45"][0]==6) cmpr = 34316;
155
+ //console.log("compression", cmpr);
156
+ //var time = Date.now();
157
+ if(false) {}
158
+ else if(cmpr==1/* || (len==tgt.length && cmpr!=32767)*/) for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];
159
+ else if(cmpr==2) UTIF.decode._decodeG2 (data, off, len, tgt, toff, w, fo);
160
+ else if(cmpr==3) UTIF.decode._decodeG3 (data, off, len, tgt, toff, w, fo, img["t292"]?((img["t292"][0]&1)==1):false);
161
+ else if(cmpr==4) UTIF.decode._decodeG4 (data, off, len, tgt, toff, w, fo);
162
+ else if(cmpr==5) UTIF.decode._decodeLZW(data, off, len, tgt, toff,8);
163
+ else if(cmpr==6) UTIF.decode._decodeOldJPEG(img, data, off, len, tgt, toff);
164
+ else if(cmpr==7 || cmpr==34892) UTIF.decode._decodeNewJPEG(img, data, off, len, tgt, toff);
165
+ else if(cmpr==8 || cmpr==32946) { var src = new Uint8Array(data.buffer,off+2,len-6); var bin = UTIF._inflateRaw(src); if(toff+bin.length<=tgt.length) tgt.set(bin,toff); }
166
+ else if(cmpr==9) UTIF.decode._decodeVC5(data,off,len,tgt,toff,img["t33422"]);
167
+ else if(cmpr==32767) UTIF.decode._decodeARW(img, data, off, len, tgt, toff);
168
+ else if(cmpr==32773) UTIF.decode._decodePackBits(data, off, len, tgt, toff);
169
+ else if(cmpr==32809) UTIF.decode._decodeThunder (data, off, len, tgt, toff);
170
+ else if(cmpr==34316) UTIF.decode._decodePanasonic(img,data,off, len, tgt, toff);
171
+ else if(cmpr==34713) //for(var j=0; j<len; j++) tgt[toff+j] = data[off+j];
172
+ UTIF.decode._decodeNikon (img,ifds, data, off, len, tgt, toff);
173
+ else if(cmpr==34676) UTIF.decode._decodeLogLuv32(img,data, off, len, tgt, toff);
174
+ else log("Unknown compression", cmpr);
175
+
176
+ //console.log(Date.now()-time);
177
+
178
+ var bps = (img["t258"]?Math.min(32,img["t258"][0]):1);
179
+ var noc = (img["t277"]?img["t277"][0]:1), bpp=(bps*noc)>>>3, bpl = Math.ceil(bps*noc*w/8);
180
+
181
+ // convert to Little Endian /*
182
+ if(bps==16 && !img.isLE && img["t33422"]==null) // not DNG
183
+ for(var y=0; y<h; y++) {
184
+ //console.log("fixing endianity");
185
+ var roff = toff+y*bpl;
186
+ for(var x=1; x<bpl; x+=2) { var t=tgt[roff+x]; tgt[roff+x]=tgt[roff+x-1]; tgt[roff+x-1]=t; }
187
+ } //*/
188
+
189
+ if(img["t317"] && img["t317"][0]==2)
190
+ {
191
+ for(var y=0; y<h; y++)
192
+ {
193
+ var ntoff = toff+y*bpl;
194
+ if(bps==16) for(var j=bpp; j<bpl; j+=2) {
195
+ var nv = ((tgt[ntoff+j+1]<<8)|tgt[ntoff+j]) + ((tgt[ntoff+j-bpp+1]<<8)|tgt[ntoff+j-bpp]);
196
+ tgt[ntoff+j] = nv&255; tgt[ntoff+j+1] = (nv>>>8)&255;
197
+ }
198
+ else if(noc==3) for(var j= 3; j<bpl; j+=3)
199
+ {
200
+ tgt[ntoff+j ] = (tgt[ntoff+j ] + tgt[ntoff+j-3])&255;
201
+ tgt[ntoff+j+1] = (tgt[ntoff+j+1] + tgt[ntoff+j-2])&255;
202
+ tgt[ntoff+j+2] = (tgt[ntoff+j+2] + tgt[ntoff+j-1])&255;
203
+ }
204
+ else for(var j=bpp; j<bpl; j++) tgt[ntoff+j] = (tgt[ntoff+j] + tgt[ntoff+j-bpp])&255;
205
+ }
206
+ }
207
+ }
208
+
209
+ UTIF.decode._decodePanasonic = function(img, data, off, len, tgt, toff) {
210
+
211
+ var img_buffer = data.buffer;
212
+
213
+ var rawWidth = img["t2"][0];
214
+ var rawHeight = img["t3"][0];
215
+ var bitsPerSample = img["t10"][0];
216
+ var RW2_Format = img["t45"][0];
217
+
218
+ var bidx = 0;
219
+ var imageIndex = 0;
220
+ var vpos = 0;
221
+ var byte = 0;
222
+ var arr_a, arr_b;
223
+ var bytes = (RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16));
224
+ var i, j, sh, pred=[0,0], nonz=[0,0], isOdd, idx = 0, pixel_base;
225
+ var row, col, crow;
226
+ var buffer = new Uint8Array(0x4000);
227
+ var result = new Uint16Array(tgt.buffer);
228
+
229
+ function getDataRaw(bits){
230
+ if (vpos == 0) {
231
+ var arr_a = new Uint8Array(img_buffer, off+imageIndex + 0x1ff8, 0x4000-0x1ff8);
232
+ var arr_b = new Uint8Array(img_buffer, off+imageIndex, 0x1ff8);
233
+ buffer.set(arr_a);
234
+ buffer.set(arr_b, arr_a.length);
235
+ imageIndex += 0x4000;
236
+ }
237
+ if(RW2_Format == 5) {
238
+ for (i = 0; i < 16; i++){
239
+ bytes[i] = buffer[vpos++];
240
+ vpos &= 0x3FFF;
241
+ }
242
+ } else {
243
+ vpos = (vpos - bits) & 0x1ffff;
244
+ byte = vpos >> 3 ^ 0x3ff0;
245
+ return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~((-1) << bits);
246
+ }
247
+ }
248
+ // Raw Format 6
249
+ function getBufferDataRW6(i) {
250
+ return buffer[vpos + 15 - i];
251
+ }
252
+ function readPageRW6() {
253
+ bytes[0] = (getBufferDataRW6(0) << 6) | (getBufferDataRW6(1) >> 2); // 14 bit
254
+ bytes[1] = (((getBufferDataRW6(1) & 0x3) << 12) | (getBufferDataRW6(2) << 4) | (getBufferDataRW6(3) >> 4)) & 0x3fff;
255
+ bytes[2] = (getBufferDataRW6(3) >> 2) & 0x3;
256
+ bytes[3] = ((getBufferDataRW6(3) & 0x3) << 8) | getBufferDataRW6(4);
257
+ bytes[4] = (getBufferDataRW6(5) << 2) | (getBufferDataRW6(6) >> 6);
258
+ bytes[5] = ((getBufferDataRW6(6) & 0x3f) << 4) | (getBufferDataRW6(7) >> 4);
259
+ bytes[6] = (getBufferDataRW6(7) >> 2) & 0x3;
260
+ bytes[7] = ((getBufferDataRW6(7) & 0x3) << 8) | getBufferDataRW6(8);
261
+ bytes[8] = ((getBufferDataRW6(9) << 2) & 0x3fc) | (getBufferDataRW6(10) >> 6);
262
+ bytes[9] = ((getBufferDataRW6(10) << 4) | (getBufferDataRW6(11) >> 4)) & 0x3ff;
263
+ bytes[10] = (getBufferDataRW6(11) >> 2) & 0x3;
264
+ bytes[11] = ((getBufferDataRW6(11) & 0x3) << 8) | getBufferDataRW6(12);
265
+ bytes[12] = (((getBufferDataRW6(13) << 2) & 0x3fc) | getBufferDataRW6(14) >> 6) & 0x3ff;
266
+ bytes[13] = ((getBufferDataRW6(14) << 4) | (getBufferDataRW6(15) >> 4)) & 0x3ff;
267
+ vpos += 16;
268
+ byte = 0;
269
+ }
270
+ function readPageRw6_bps12() {
271
+ bytes[0] = (getBufferDataRW6(0) << 4) | (getBufferDataRW6(1) >> 4);
272
+ bytes[1] = (((getBufferDataRW6(1) & 0xf) << 8) | (getBufferDataRW6(2))) & 0xfff;
273
+ bytes[2] = (getBufferDataRW6(3) >> 6) & 0x3;
274
+ bytes[3] = ((getBufferDataRW6(3) & 0x3f) << 2) | (getBufferDataRW6(4) >> 6);
275
+ bytes[4] = ((getBufferDataRW6(4) & 0x3f) << 2) | (getBufferDataRW6(5) >> 6);
276
+ bytes[5] = ((getBufferDataRW6(5) & 0x3f) << 2) | (getBufferDataRW6(6) >> 6);
277
+ bytes[6] = (getBufferDataRW6(6) >> 4) & 0x3;
278
+ bytes[7] = ((getBufferDataRW6(6) & 0xf) << 4) | (getBufferDataRW6(7) >> 4);
279
+ bytes[8] = ((getBufferDataRW6(7) & 0xf) << 4) | (getBufferDataRW6(8) >> 4);
280
+ bytes[9] = ((getBufferDataRW6(8) & 0xf) << 4) | (getBufferDataRW6(9) >> 4);
281
+ bytes[10] = (getBufferDataRW6(9) >> 2) & 0x3;
282
+ bytes[11] = ((getBufferDataRW6(9) & 0x3) << 6) | (getBufferDataRW6(10) >> 2);
283
+ bytes[12] = ((getBufferDataRW6(10) & 0x3) << 6) | (getBufferDataRW6(11) >> 2);
284
+ bytes[13] = ((getBufferDataRW6(11) & 0x3) << 6) | (getBufferDataRW6(12) >> 2);
285
+ bytes[14] = getBufferDataRW6(12) & 0x3;
286
+ bytes[15] = getBufferDataRW6(13);
287
+ bytes[16] = getBufferDataRW6(14);
288
+ bytes[17] = getBufferDataRW6(15);
289
+
290
+ vpos += 16;
291
+ byte = 0;
292
+ }
293
+ // Main loop
294
+ function resetPredNonzeros(){
295
+ pred[0]=0; pred[1]=0;
296
+ nonz[0]=0; nonz[1]=0;
297
+ }
298
+ if (RW2_Format == 7) {
299
+ throw RW2_Format;
300
+
301
+ // Skatch of version 7
302
+ /*
303
+ var pixels_per_block = bitsPerSample == 14 ? 9 : 10;
304
+ rowbytes = 0|(rawWidth / pixels_per_block * 16);
305
+ for (row = 0; row < rawHeight - 15; row += 16) {
306
+ var rowstoread = Math.min(16, rawHeight - row);
307
+ var readlen = rowbytes*rowstoread;
308
+ buffer = new Uint8Array(image.slice(bidx, bidx+readlen));
309
+ vpos = 0;
310
+ bidx += readlen;
311
+ i = 0;
312
+ for (crow = 0; crow < rowstoread; crow++) {
313
+ idx = (row + crow) * rawWidth;
314
+ for (col = 0; col <= rawWidth - pixels_per_block; col += pixels_per_block) {
315
+ for(j=0; j < pixels_per_block; j++) bytes[j] = buffer[i++];
316
+ if (bitsPerSample == 12) {
317
+ result[idx ] = ((bytes[1] & 0xF) << 8) + bytes[0];
318
+ result[idx + 1] = 16 * bytes[2] + (bytes[1] >> 4);
319
+ result[idx + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
320
+ result[idx + 3] = 16 * bytes[5] + (bytes[4] >> 4);
321
+ result[idx + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
322
+ result[idx + 5] = 16 * bytes[8] + (bytes[7] >> 4);
323
+ result[idx + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
324
+ result[idx + 7] = 16 * bytes[11] + (bytes[10] >> 4);
325
+ result[idx + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
326
+ result[idx + 9] = 16 * bytes[14] + (bytes[13] >> 4);
327
+ } else if (bitsPerSample == 14) {
328
+ result[idx] = bytes[0] + ((bytes[1] & 0x3F) << 8);
329
+ result[idx + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
330
+ result[idx + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
331
+ result[idx + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
332
+ result[idx + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
333
+ result[idx + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
334
+ result[idx + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
335
+ result[idx + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
336
+ result[idx + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
337
+ }
338
+ }
339
+ }
340
+ }
341
+ */
342
+ }
343
+ else if(RW2_Format == 6) {
344
+ var is12bit = bitsPerSample == 12,
345
+ readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6,
346
+ pixelsPerBlock = is12bit ? 14 : 11,
347
+ pixelbase0 = is12bit ? 0x80 : 0x200,
348
+ pixelbase_compare = is12bit ? 0x800 : 0x2000,
349
+ spix_compare = is12bit ? 0x3fff : 0xffff,
350
+ pixel_mask = is12bit ? 0xfff : 0x3fff,
351
+ blocksperrow = rawWidth / pixelsPerBlock,
352
+ rowbytes = blocksperrow * 16,
353
+ bufferSize = is12bit ? 18 : 14;
354
+
355
+ for (row = 0; row < rawHeight - 15; row += 16) {
356
+ var rowstoread = Math.min(16, rawHeight - row);
357
+ var readlen = rowbytes*rowstoread;
358
+ buffer = new Uint8Array(img_buffer, off+bidx, readlen);//new Uint8Array(image.slice(bidx, bidx+readlen));
359
+ vpos = 0;
360
+ bidx += readlen;
361
+ for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) {
362
+ idx = (row + crow) * rawWidth;
363
+ for (var rblock = 0; rblock < blocksperrow; rblock++) {
364
+ readPageRw6Fn();
365
+ resetPredNonzeros();
366
+ sh=0; pixel_base=0;
367
+ for (i = 0; i < pixelsPerBlock; i++){
368
+ isOdd = i & 1;
369
+ if (i % 3 == 2) {
370
+ var base = byte < bufferSize ? bytes[byte++] : 0;
371
+ if (base == 3) base = 4;
372
+ pixel_base = pixelbase0 << base;
373
+ sh = 1 << base;
374
+ }
375
+ var epixel = byte < bufferSize ? bytes[byte++] : 0;
376
+ if (pred[isOdd]) {
377
+ epixel *= sh;
378
+ if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base)
379
+ epixel += nonz[isOdd] - pixel_base;
380
+ nonz[isOdd] = epixel;
381
+ } else {
382
+ pred[isOdd] = epixel;
383
+ if (epixel)
384
+ nonz[isOdd] = epixel;
385
+ else
386
+ epixel = nonz[isOdd];
387
+ }
388
+ result[idx + col++] = (epixel - 0xf) <= spix_compare ? (epixel - 0xf) & spix_compare : ((epixel + 0x7ffffff1) >> 0x1f) & pixel_mask;
389
+ }
390
+ }
391
+ }
392
+ }
393
+ }
394
+ else if (RW2_Format == 5) {
395
+ var blockSize = bitsPerSample == 12 ? 10 : 9;
396
+ for (row = 0; row < rawHeight; row++) {
397
+ for (col = 0; col < rawWidth; col+=blockSize) {
398
+ getDataRaw(0);
399
+ // Tuhle podminku pouziva i RW2_Format 7
400
+ if (bitsPerSample == 12) {
401
+ result[idx++] = ((bytes[1] & 0xF) << 8) + bytes[0];
402
+ result[idx++] = 16 * bytes[2] + (bytes[1] >> 4);
403
+ result[idx++] = ((bytes[4] & 0xF) << 8) + bytes[3];
404
+ result[idx++] = 16 * bytes[5] + (bytes[4] >> 4);
405
+ result[idx++] = ((bytes[7] & 0xF) << 8) + bytes[6];
406
+ result[idx++] = 16 * bytes[8] + (bytes[7] >> 4);
407
+ result[idx++] = ((bytes[10] & 0xF) << 8) + bytes[9];
408
+ result[idx++] = 16 * bytes[11] + (bytes[10] >> 4);
409
+ result[idx++] = ((bytes[13] & 0xF) << 8) + bytes[12];
410
+ result[idx++] = 16 * bytes[14] + (bytes[13] >> 4);
411
+ } else if (bitsPerSample == 14) {
412
+ result[idx++] = bytes[0] + ((bytes[1] & 0x3F) << 8);
413
+ result[idx++] = (bytes[1] >> 6) + 4 * (bytes[2]) + ((bytes[3] & 0xF) << 10);
414
+ result[idx++] = (bytes[3] >> 4) + 16 * (bytes[4]) + ((bytes[5] & 3) << 12);
415
+ result[idx++] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
416
+ result[idx++] = bytes[7] + ((bytes[8] & 0x3F) << 8);
417
+ result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
418
+ result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
419
+ result[idx++] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
420
+ result[idx++] = bytes[14] + ((bytes[15] & 0x3F) << 8);
421
+ }
422
+ }
423
+ }
424
+ //console.log(result[1000000 - 1])
425
+ } else if(RW2_Format == 4) {
426
+ for (row = 0; row < rawHeight; row++){
427
+ for(col = 0; col < rawWidth; col++){
428
+ i = col % 14;
429
+ isOdd = i & 1;
430
+ if (i==0) resetPredNonzeros();
431
+ if (i%3 == 2)
432
+ sh = 4 >> (3 - getDataRaw(2));
433
+ if (nonz[isOdd]) {
434
+ j = getDataRaw(8);
435
+ if(j != 0){
436
+ pred[isOdd] -= 0x80 << sh;
437
+ if (pred[isOdd] < 0 || sh == 4)
438
+ pred[isOdd] &= ~((-1) << sh);
439
+ pred[isOdd] += j << sh;
440
+ }
441
+ } else {
442
+ nonz[isOdd] = getDataRaw(8);
443
+ if(nonz[isOdd] || i > 11)
444
+ pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4);
445
+ }
446
+ result[idx++] = pred[col & 1];
447
+ }
448
+ }
449
+ }
450
+ else throw RW2_Format;
451
+ }
452
+
453
+
454
+ UTIF.decode._decodeVC5 = function(){var x=[1,0,1,0,2,2,1,1,3,7,1,2,5,25,1,3,6,48,1,4,6,54,1,5,7,111,1,8,7,99,1,6,7,105,12,0,7,107,1,7,8,209,20,0,8,212,1,9,8,220,1,10,9,393,1,11,9,394,32,0,9,416,1,12,9,427,1,13,10,887,1,18,10,784,1,14,10,790,1,15,10,835,60,0,10,852,1,16,10,885,1,17,11,1571,1,19,11,1668,1,20,11,1669,100,0,11,1707,1,21,11,1772,1,22,12,3547,1,29,12,3164,1,24,12,3166,1,25,12,3140,1,23,12,3413,1,26,12,3537,1,27,12,3539,1,28,13,7093,1,35,13,6283,1,30,13,6331,1,31,13,6335,180,0,13,6824,1,32,13,7072,1,33,13,7077,320,0,13,7076,1,34,14,12565,1,36,14,12661,1,37,14,12669,1,38,14,13651,1,39,14,14184,1,40,15,28295,1,46,15,28371,1,47,15,25320,1,42,15,25336,1,43,15,25128,1,41,15,27300,1,44,15,28293,1,45,16,50259,1,48,16,50643,1,49,16,50675,1,50,16,56740,1,53,16,56584,1,51,16,56588,1,52,17,113483,1,61,17,113482,1,60,17,101285,1,55,17,101349,1,56,17,109205,1,57,17,109207,1,58,17,100516,1,54,17,113171,1,59,18,202568,1,62,18,202696,1,63,18,218408,1,64,18,218412,1,65,18,226340,1,66,18,226356,1,67,18,226358,1,68,19,402068,1,69,19,405138,1,70,19,405394,1,71,19,436818,1,72,19,436826,1,73,19,452714,1,75,19,452718,1,76,19,452682,1,74,20,804138,1,77,20,810279,1,78,20,810790,1,79,20,873638,1,80,20,873654,1,81,20,905366,1,82,20,905430,1,83,20,905438,1,84,21,1608278,1,85,21,1620557,1,86,21,1621582,1,87,21,1621583,1,88,21,1747310,1,89,21,1810734,1,90,21,1810735,1,91,21,1810863,1,92,21,1810879,1,93,22,3621725,1,99,22,3621757,1,100,22,3241112,1,94,22,3494556,1,95,22,3494557,1,96,22,3494622,1,97,22,3494623,1,98,23,6482227,1,102,23,6433117,1,101,23,6989117,1,103,23,6989119,1,105,23,6989118,1,104,23,7243449,1,106,23,7243512,1,107,24,13978233,1,111,24,12964453,1,109,24,12866232,1,108,24,14486897,1,113,24,13978232,1,110,24,14486896,1,112,24,14487026,1,114,24,14487027,1,115,25,25732598,1,225,25,25732597,1,189,25,25732596,1,188,25,25732595,1,203,25,25732594,1,202,25,25732593,1,197,25,25732592,1,207,25,25732591,1,169,25,25732590,1,223,25,25732589,1,159,25,25732522,1,235,25,25732579,1,152,25,25732575,1,192,25,25732489,1,179,25,25732573,1,201,25,25732472,1,172,25,25732576,1,149,25,25732488,1,178,25,25732566,1,120,25,25732571,1,219,25,25732577,1,150,25,25732487,1,127,25,25732506,1,211,25,25732548,1,125,25,25732588,1,158,25,25732486,1,247,25,25732467,1,238,25,25732508,1,163,25,25732552,1,228,25,25732603,1,183,25,25732513,1,217,25,25732587,1,168,25,25732520,1,122,25,25732484,1,128,25,25732562,1,249,25,25732505,1,187,25,25732504,1,186,25,25732483,1,136,25,25928905,1,181,25,25732560,1,255,25,25732500,1,230,25,25732482,1,135,25,25732555,1,233,25,25732568,1,222,25,25732583,1,145,25,25732481,1,134,25,25732586,1,167,25,25732521,1,248,25,25732518,1,209,25,25732480,1,243,25,25732512,1,216,25,25732509,1,164,25,25732547,1,140,25,25732479,1,157,25,25732544,1,239,25,25732574,1,191,25,25732564,1,251,25,25732478,1,156,25,25732546,1,139,25,25732498,1,242,25,25732557,1,133,25,25732477,1,162,25,25732515,1,213,25,25732584,1,165,25,25732514,1,212,25,25732476,1,227,25,25732494,1,198,25,25732531,1,236,25,25732530,1,234,25,25732529,1,117,25,25732528,1,215,25,25732527,1,124,25,25732526,1,123,25,25732525,1,254,25,25732524,1,253,25,25732523,1,148,25,25732570,1,218,25,25732580,1,146,25,25732581,1,147,25,25732569,1,224,25,25732533,1,143,25,25732540,1,184,25,25732541,1,185,25,25732585,1,166,25,25732556,1,132,25,25732485,1,129,25,25732563,1,250,25,25732578,1,151,25,25732501,1,119,25,25732502,1,193,25,25732536,1,176,25,25732496,1,245,25,25732553,1,229,25,25732516,1,206,25,25732582,1,144,25,25732517,1,208,25,25732558,1,137,25,25732543,1,241,25,25732466,1,237,25,25732507,1,190,25,25732542,1,240,25,25732551,1,131,25,25732554,1,232,25,25732565,1,252,25,25732475,1,171,25,25732493,1,205,25,25732492,1,204,25,25732491,1,118,25,25732490,1,214,25,25928904,1,180,25,25732549,1,126,25,25732602,1,182,25,25732539,1,175,25,25732545,1,141,25,25732559,1,138,25,25732537,1,177,25,25732534,1,153,25,25732503,1,194,25,25732606,1,160,25,25732567,1,121,25,25732538,1,174,25,25732497,1,246,25,25732550,1,130,25,25732572,1,200,25,25732474,1,170,25,25732511,1,221,25,25732601,1,196,25,25732532,1,142,25,25732519,1,210,25,25732495,1,199,25,25732605,1,155,25,25732535,1,154,25,25732499,1,244,25,25732510,1,220,25,25732600,1,195,25,25732607,1,161,25,25732604,1,231,25,25732473,1,173,25,25732599,1,226,26,51465122,1,116,26,51465123,0,1],o,C,k,P=[3,3,3,3,2,2,2,1,1,1],V=24576,ar=16384,H=8192,az=ar|H;
455
+ function d(t){var E=t[1],h=t[0][E>>>3]>>>7-(E&7)&1;t[1]++;return h}function ag(t,E){if(o==null){o={};
456
+ for(var h=0;h<x.length;h+=4)o[x[h+1]]=x.slice(h,h+4)}var L=d(t),g=o[L];while(g==null){L=L<<1|d(t);g=o[L]}var n=g[3];
457
+ if(n!=0)n=d(t)==0?n:-n;E[0]=g[2];E[1]=n}function m(t,E){for(var h=0;h<E;h++){if((t&1)==1)t++;t=t>>>1}return t}function A(t,E){return t>>E}function O(t,E,h,L,g,n){E[h]=A(A(11*t[g]-4*t[g+n]+t[g+n+n]+4,3)+t[L],1);
458
+ E[h+n]=A(A(5*t[g]+4*t[g+n]-t[g+n+n]+4,3)-t[L],1)}function J(t,E,h,L,g,n){var W=t[g-n]-t[g+n],j=t[g],$=t[L];
459
+ E[h]=A(A(W+4,3)+j+$,1);E[h+n]=A(A(-W+4,3)+j-$,1)}function y(t,E,h,L,g,n){E[h]=A(A(5*t[g]+4*t[g-n]-t[g-n-n]+4,3)+t[L],1);
460
+ E[h+n]=A(A(11*t[g]-4*t[g-n]+t[g-n-n]+4,3)-t[L],1)}function q(t){t=t<0?0:t>4095?4095:t;t=k[t]>>>2;return t}function av(t,E,h,L,g,n){L=new Uint16Array(L.buffer);
461
+ var W=Date.now(),j=UTIF._binBE,$=E+h,r,u,X,I,ax,a3,R,ai,aa,ap,ah,ae,aD,al,i,aE,T,B;E+=4;var a5=n[0]==1;
462
+ while(E<$){var S=j.readShort(t,E),s=j.readUshort(t,E+2);E+=4;if(S==12)r=s;else if(S==20)u=s;else if(S==21)X=s;
463
+ else if(S==48)I=s;else if(S==53)ax=s;else if(S==35)a3=s;else if(S==62)R=s;else if(S==101)ai=s;else if(S==109)aa=s;
464
+ else if(S==84)ap=s;else if(S==106)ah=s;else if(S==107)ae=s;else if(S==108)aD=s;else if(S==102)al=s;else if(S==104)i=s;
465
+ else if(S==105)aE=s;else{var F=S<0?-S:S,D=F&65280,_=0;if(F&az){if(F&H){_=s&65535;_+=(F&255)<<16}else{_=s&65535}}if((F&V)==V){if(T==null){T=[];
466
+ for(var M=0;M<4;M++)T[M]=new Int16Array((u>>>1)*(X>>>1));B=new Int16Array((u>>>1)*(X>>>1));C=new Int16Array(1024);
467
+ for(var M=0;M<1024;M++){var aG=M-512,p=Math.abs(aG),r=Math.floor(768*p*p*p/(255*255*255))+p;C[M]=Math.sign(aG)*r}k=new Uint16Array(4096);
468
+ var aA=(1<<16)-1;for(var M=0;M<4096;M++){var at=M,a1=aA*(Math.pow(113,at/4095)-1)/112;k[M]=Math.min(a1,aA)}}var w=T[R],v=m(u,1+P[I]),N=m(X,1+P[I]);
469
+ if(I==0){for(var b=0;b<N;b++)for(var G=0;G<v;G++){var c=E+(b*v+G)*2;w[b*(u>>>1)+G]=t[c]<<8|t[c+1]}}else{var a7=[t,E*8],a4=[],ay=0,aw=v*N,f=[0,0],Q=0,s=0;
470
+ while(ay<aw){ag(a7,f);Q=f[0];s=f[1];while(Q>0){a4[ay++]=s;Q--}}var l=(I-1)%3,aF=l!=1?v:0,a2=l!=0?N:0;
471
+ for(var b=0;b<N;b++){var af=(b+a2)*(u>>>1)+aF,au=b*v;for(var G=0;G<v;G++)w[af+G]=C[a4[au+G]+512]*ax}if(l==2){var i=u>>>1,an=v*2,a9=N*2;
472
+ for(var b=0;b<N;b++){for(var G=0;G<an;G++){var M=b*2*i+G,a=b*i+G,e=N*i+a;if(b==0)O(w,B,M,e,a,i);else if(b==N-1)y(w,B,M,e,a,i);
473
+ else J(w,B,M,e,a,i)}}var Z=w;w=B;B=Z;for(var b=0;b<a9;b++){for(var G=0;G<v;G++){var M=b*i+2*G,a=b*i+G,e=v+a;
474
+ if(G==0)O(w,B,M,e,a,1);else if(G==v-1)y(w,B,M,e,a,1);else J(w,B,M,e,a,1)}}var Z=w;w=B;B=Z;var aC=[],aB=2-~~((I-1)/3);
475
+ for(var K=0;K<3;K++)aC[K]=aa>>14-K*2&3;var a6=aC[aB];if(a6!=0)for(var b=0;b<a9;b++)for(var G=0;G<an;
476
+ G++){var M=b*i+G;w[M]=w[M]<<a6}}}if(I==9&&R==3){var a8=T[0],ab=T[1],aq=T[2],as=T[3];for(var b=0;b<X;
477
+ b+=2)for(var G=0;G<u;G+=2){var U=b*u+G,c=(b>>>1)*(u>>>1)+(G>>>1),z=a8[c],ao=ab[c]-2048,ak=aq[c]-2048,ad=as[c]-2048,aj=(ao<<1)+z,a0=(ak<<1)+z,aH=z+ad,am=z-ad;
478
+ if(a5){L[U]=q(aH);L[U+1]=q(a0);L[U+u]=q(aj);L[U+u+1]=q(am)}else{L[U]=q(aj);L[U+1]=q(aH);L[U+u]=q(am);
479
+ L[U+u+1]=q(a0)}}}E+=_*4}else if(F==16388){E+=_*4}else if(D==8192||D==8448||D==9216){}else throw F.toString(16)}}console.log(Date.now()-W)}return av}()
480
+
481
+
482
+
483
+ UTIF.decode._decodeLogLuv32 = function(img, data, off, len, tgt, toff) {
484
+ var w = img.width, qw=w*4;
485
+ var io = 0, out = new Uint8Array(qw);
486
+
487
+ while(io<len) {
488
+ var oo=0;
489
+ while(oo<qw) {
490
+ var c = data[off+io]; io++;
491
+ if(c<128) { for(var j=0; j<c; j++) out[oo+j] = data[off+io+j]; oo+=c; io+=c; }
492
+ else { c=c-126; for(var j=0; j<c; j++) out[oo+j] = data[off+io ]; oo+=c; io++ ; }
493
+ }
494
+
495
+ for(var x=0; x<w; x++) {
496
+ tgt[toff+0] = out[x];
497
+ tgt[toff+1] = out[x+w];
498
+ tgt[toff+2] = out[x+w*2];
499
+ tgt[toff+4] = out[x+w*3];
500
+ toff+=6;
501
+ }
502
+ }
503
+ }
504
+
505
+ UTIF.decode._ljpeg_diff = function(data, prm, huff) {
506
+ var getbithuff = UTIF.decode._getbithuff;
507
+ var len, diff;
508
+ len = getbithuff(data, prm, huff[0], huff);
509
+ diff = getbithuff(data, prm, len, 0);
510
+ if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1;
511
+ return diff;
512
+ }
513
+ UTIF.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) {
514
+ var raw_width = img["t256"][0], height=img["t257"][0], tiff_bps=img["t258"][0];
515
+ var bin=(img.isLE ? UTIF._binLE : UTIF._binBE);
516
+ //console.log(raw_width, height, tiff_bps, raw_width*height, src_length);
517
+ var arw2 = (raw_width*height == src_length) || (raw_width*height*1.5 == src_length);
518
+ //arw2 = true;
519
+ //console.log("ARW2: ", arw2, raw_width*height, src_length, tgt.length);
520
+ if(!arw2) { //"sony_arw_load_raw"; // not arw2
521
+ height+=8;
522
+ var prm = [off,0,0,0];
523
+ var huff = new Uint16Array(32770);
524
+ var tab = [ 0xf11,0xf10,0xe0f,0xd0e,0xc0d,0xb0c,0xa0b,0x90a,0x809,
525
+ 0x708,0x607,0x506,0x405,0x304,0x303,0x300,0x202,0x201 ];
526
+ var i, c, n, col, row, sum=0;
527
+ var ljpeg_diff = UTIF.decode._ljpeg_diff;
528
+
529
+ huff[0] = 15;
530
+ for (n=i=0; i < 18; i++) {
531
+ var lim = 32768 >>> (tab[i] >>> 8);
532
+ for(var c=0; c<lim; c++) huff[++n] = tab[i];
533
+ }
534
+ for (col = raw_width; col--; )
535
+ for (row=0; row < height+1; row+=2) {
536
+ if (row == height) row = 1;
537
+ sum += ljpeg_diff(inp, prm, huff);
538
+ if (row < height) {
539
+ var clr = (sum)&4095;
540
+ UTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));
541
+ }
542
+ }
543
+ return;
544
+ }
545
+ if(raw_width*height*1.5==src_length) {
546
+ //console.log("weird compression");
547
+ for(var i=0; i<src_length; i+=3) { var b0=inp[off+i+0], b1=inp[off+i+1], b2=inp[off+i+2];
548
+ tgt[toff+i]=(b1<<4)|(b0>>>4); tgt[toff+i+1]=(b0<<4)|(b2>>>4); tgt[toff+i+2]=(b2<<4)|(b1>>>4); }
549
+ return;
550
+ }
551
+
552
+ var pix = new Uint16Array(16);
553
+ var row, col, val, max, min, imax, imin, sh, bit, i, dp;
554
+
555
+ var data = new Uint8Array(raw_width+1);
556
+ for (row=0; row < height; row++) {
557
+ //fread (data, 1, raw_width, ifp);
558
+ for(var j=0; j<raw_width; j++) data[j]=inp[off++];
559
+ for (dp=0, col=0; col < raw_width-30; dp+=16) {
560
+ max = 0x7ff & (val = bin.readUint(data,dp));
561
+ min = 0x7ff & (val >>> 11);
562
+ imax = 0x0f & (val >>> 22);
563
+ imin = 0x0f & (val >>> 26);
564
+ for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++);
565
+ for (bit=30, i=0; i < 16; i++)
566
+ if (i == imax) pix[i] = max;
567
+ else if (i == imin) pix[i] = min;
568
+ else {
569
+ pix[i] = ((bin.readUshort(data, dp+(bit >> 3)) >>> (bit & 7) & 0x7f) << sh) + min;
570
+ if (pix[i] > 0x7ff) pix[i] = 0x7ff;
571
+ bit += 7;
572
+ }
573
+ for (i=0; i < 16; i++, col+=2) {
574
+ //RAW(row,col) = curve[pix[i] << 1] >> 2;
575
+ var clr = pix[i]<<1; //clr = 0xffff;
576
+ UTIF.decode._putsF(tgt, (row*raw_width+col)*tiff_bps, clr<<(16-tiff_bps));
577
+ }
578
+ col -= col & 1 ? 1:31;
579
+ }
580
+ }
581
+ }
582
+
583
+ UTIF.decode._decodeNikon = function(img,imgs, data, off, src_length, tgt, toff)
584
+ {
585
+ var nikon_tree = [
586
+ [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */
587
+ 5,4,3,6,2,7,1,0,8,9,11,10,12 ],
588
+ [ 0, 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */
589
+ 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 ],
590
+ [ 0, 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */
591
+ 5,4,6,3,7,2,8,1,9,0,10,11,12 ],
592
+ [ 0, 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */
593
+ 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 ],
594
+ [ 0, 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */
595
+ 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 ],
596
+ [ 0, 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */
597
+ 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 ] ];
598
+
599
+ var raw_width = img["t256"][0], height=img["t257"][0], tiff_bps=img["t258"][0];
600
+
601
+ var tree = 0, split = 0;
602
+ var make_decoder = UTIF.decode._make_decoder;
603
+ var getbithuff = UTIF.decode._getbithuff;
604
+
605
+ var mn = imgs[0].exifIFD.makerNote, md = mn["t150"]?mn["t150"]:mn["t140"], mdo=0; //console.log(mn,md);
606
+ //console.log(md[0].toString(16), md[1].toString(16), tiff_bps);
607
+ var ver0 = md[mdo++], ver1 = md[mdo++];
608
+ if (ver0 == 0x49 || ver1 == 0x58) mdo+=2110;
609
+ if (ver0 == 0x46) tree = 2;
610
+ if (tiff_bps == 14) tree += 3;
611
+
612
+ var vpred = [[0,0],[0,0]], bin=(img.isLE ? UTIF._binLE : UTIF._binBE);
613
+ for(var i=0; i<2; i++) for(var j=0; j<2; j++) { vpred[i][j] = bin.readShort(md,mdo); mdo+=2; } // not sure here ... [i][j] or [j][i]
614
+ //console.log(vpred);
615
+
616
+
617
+ var max = 1 << tiff_bps & 0x7fff, step=0;
618
+ var csize = bin.readShort(md,mdo); mdo+=2;
619
+ if (csize > 1) step = Math.floor(max / (csize-1));
620
+ if (ver0 == 0x44 && ver1 == 0x20 && step > 0) split = bin.readShort(md,562);
621
+
622
+
623
+ var i;
624
+ var row, col;
625
+ var len, shl, diff;
626
+ var min_v = 0;
627
+ var hpred = [0,0];
628
+ var huff = make_decoder(nikon_tree[tree]);
629
+
630
+ //var g_input_offset=0, bitbuf=0, vbits=0, reset=0;
631
+ var prm = [off,0,0,0];
632
+ //console.log(split); split = 170;
633
+
634
+ for (min_v=row=0; row < height; row++) {
635
+ if (split && row == split) {
636
+ //free (huff);
637
+ huff = make_decoder (nikon_tree[tree+1]);
638
+ //max_v += (min_v = 16) << 1;
639
+ }
640
+ for (col=0; col < raw_width; col++) {
641
+ i = getbithuff(data,prm,huff[0],huff);
642
+ len = i & 15;
643
+ shl = i >>> 4;
644
+ diff = (((getbithuff(data,prm,len-shl,0) << 1) + 1) << shl) >>> 1;
645
+ if ((diff & (1 << (len-1))) == 0)
646
+ diff -= (1 << len) - (shl==0?1:0);
647
+ if (col < 2) hpred[col] = vpred[row & 1][col] += diff;
648
+ else hpred[col & 1] += diff;
649
+
650
+ var clr = Math.min(Math.max(hpred[col & 1],0),(1<<tiff_bps)-1);
651
+ var bti = (row*raw_width+col)*tiff_bps;
652
+ UTIF.decode._putsF(tgt, bti, clr<<(16-tiff_bps));
653
+ }
654
+ }
655
+ }
656
+ // put 16 bits
657
+ UTIF.decode._putsF= function(dt, pos, val) { val = val<<(8-(pos&7)); var o=(pos>>>3); dt[o]|=val>>>16; dt[o+1]|=val>>>8; dt[o+2]|=val; }
658
+
659
+
660
+ UTIF.decode._getbithuff = function(data,prm,nbits, huff) {
661
+ var zero_after_ff = 0;
662
+ var get_byte = UTIF.decode._get_byte;
663
+ var c;
664
+
665
+ var off=prm[0], bitbuf=prm[1], vbits=prm[2], reset=prm[3];
666
+
667
+ //if (nbits > 25) return 0;
668
+ //if (nbits < 0) return bitbuf = vbits = reset = 0;
669
+ if (nbits == 0 || vbits < 0) return 0;
670
+ while (!reset && vbits < nbits && (c = data[off++]) != -1 &&
671
+ !(reset = zero_after_ff && c == 0xff && data[off++])) {
672
+ //console.log("byte read into c");
673
+ bitbuf = (bitbuf << 8) + c;
674
+ vbits += 8;
675
+ }
676
+ c = (bitbuf << (32-vbits)) >>> (32-nbits);
677
+ if (huff) {
678
+ vbits -= huff[c+1] >>> 8; //console.log(c, huff[c]>>8);
679
+ c = huff[c+1]&255;
680
+ } else
681
+ vbits -= nbits;
682
+ if (vbits < 0) throw "e";
683
+
684
+ prm[0]=off; prm[1]=bitbuf; prm[2]=vbits; prm[3]=reset;
685
+
686
+ return c;
687
+ }
688
+
689
+ UTIF.decode._make_decoder = function(source) {
690
+ var max, len, h, i, j;
691
+ var huff = [];
692
+
693
+ for (max=16; max!=0 && !source[max]; max--);
694
+ var si=17;
695
+
696
+ huff[0] = max;
697
+ for (h=len=1; len <= max; len++)
698
+ for (i=0; i < source[len]; i++, ++si)
699
+ for (j=0; j < 1 << (max-len); j++)
700
+ if (h <= 1 << max)
701
+ huff[h++] = (len << 8) | source[si];
702
+ return huff;
703
+ }
704
+
705
+ UTIF.decode._decodeNewJPEG = function(img, data, off, len, tgt, toff)
706
+ {
707
+ len = Math.min(len, data.length-off);
708
+ var tables = img["t347"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len);
709
+
710
+ if (tables) {
711
+ var SOI = 216, EOI = 217, boff = 0;
712
+ for (var i=0; i<(tlen-1); i++)
713
+ {
714
+ // Skip EOI marker from JPEGTables
715
+ if (tables[i]==255 && tables[i+1]==EOI) break;
716
+ buff[boff++] = tables[i];
717
+ }
718
+
719
+ // Skip SOI marker from data
720
+ var byte1 = data[off], byte2 = data[off + 1];
721
+ if (byte1!=255 || byte2!=SOI)
722
+ {
723
+ buff[boff++] = byte1;
724
+ buff[boff++] = byte2;
725
+ }
726
+ for (var i=2; i<len; i++) buff[boff++] = data[off+i];
727
+ }
728
+ else for (var i=0; i<len; i++) buff[i] = data[off+i];
729
+
730
+ if(img["t262"][0]==32803 || (img["t259"][0]==7 && img["t262"][0]==34892)) // lossless JPEG (used in DNG files)
731
+ {
732
+ var bps = img["t258"][0];//, dcdr = new LosslessJpegDecoder();
733
+ //var time = Date.now();
734
+ var out = UTIF.LosslessJpegDecode(buff), olen=out.length; //console.log(olen);
735
+ //var out = ULLJPG(buff), olen=out.length; //console.log(olen);
736
+ //console.log(Date.now()-time);
737
+
738
+ if(false) {}
739
+ else if(bps==16) {
740
+ if(img.isLE) for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]&255); tgt[toff+(i<<1)+1] = (out[i]>>>8); }
741
+ else for(var i=0; i<olen; i++ ) { tgt[toff+(i<<1)] = (out[i]>>>8); tgt[toff+(i<<1)+1] = (out[i]&255); }
742
+ }
743
+ else if(bps==14 || bps==12 || bps==10) { // 4 * 14 == 56 == 7 * 8
744
+ var rst = 16-bps;
745
+ for(var i=0; i<olen; i++) UTIF.decode._putsF(tgt, i*bps, out[i]<<rst);
746
+ }
747
+ else if(bps==8) {
748
+ for(var i=0; i<olen; i++) tgt[toff+i]=out[i];
749
+ }
750
+ else throw new Error("unsupported bit depth "+bps);
751
+ }
752
+ else
753
+ {
754
+ var parser = new UTIF.JpegDecoder(); parser.parse(buff);
755
+ var decoded = parser.getData({"width":parser.width,"height":parser.height,"forceRGB":true,"isSourcePDF":false});
756
+ for (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];
757
+ }
758
+
759
+ // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in
760
+ // RGB format, so updating the tag value
761
+ if(img["t262"][0] == 6) img["t262"][0] = 2;
762
+ }
763
+
764
+ UTIF.decode._decodeOldJPEGInit = function(img, data, off, len)
765
+ {
766
+ var SOI = 216, EOI = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS = 218;
767
+ var joff = 0, soff = 0, tables, sosMarker, isTiled = false, i, j, k;
768
+ var jpgIchgFmt = img["t513"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0;
769
+ var jpgIchgFmtLen = img["t514"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0;
770
+ var soffTag = img["t324"] || img["t273"] || jpgIchgFmt;
771
+ var ycbcrss = img["t530"], ssx = 0, ssy = 0;
772
+ var spp = img["t277"]?img["t277"][0]:1;
773
+ var jpgresint = img["t515"];
774
+
775
+ if(soffTag)
776
+ {
777
+ soff = soffTag[0];
778
+ isTiled = (soffTag.length > 1);
779
+ }
780
+
781
+ if(!isTiled)
782
+ {
783
+ if(data[off]==255 && data[off+1]==SOI) return { jpegOffset: off };
784
+ if(jpgIchgFmt!=null)
785
+ {
786
+ if(data[off+jifoff]==255 && data[off+jifoff+1]==SOI) joff = off+jifoff;
787
+ else log("JPEGInterchangeFormat does not point to SOI");
788
+
789
+ if(jpgIchgFmtLen==null) log("JPEGInterchangeFormatLength field is missing");
790
+ else if(jifoff >= soff || (jifoff+jiflen) <= soff) log("JPEGInterchangeFormatLength field value is invalid");
791
+
792
+ if(joff != null) return { jpegOffset: joff };
793
+ }
794
+ }
795
+
796
+ if(ycbcrss!=null) { ssx = ycbcrss[0]; ssy = ycbcrss[1]; }
797
+
798
+ if(jpgIchgFmt!=null)
799
+ if(jpgIchgFmtLen!=null)
800
+ if(jiflen >= 2 && (jifoff+jiflen) <= soff)
801
+ {
802
+ if(data[off+jifoff+jiflen-2]==255 && data[off+jifoff+jiflen-1]==SOI) tables = new Uint8Array(jiflen-2);
803
+ else tables = new Uint8Array(jiflen);
804
+
805
+ for(i=0; i<tables.length; i++) tables[i] = data[off+jifoff+i];
806
+ log("Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables");
807
+ }
808
+ else log("JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile");
809
+
810
+ if(tables == null)
811
+ {
812
+ var ooff = 0, out = [];
813
+ out[ooff++] = 255; out[ooff++] = SOI;
814
+
815
+ var qtables = img["t519"];
816
+ if(qtables==null) throw new Error("JPEGQTables tag is missing");
817
+ for(i=0; i<qtables.length; i++)
818
+ {
819
+ out[ooff++] = 255; out[ooff++] = DQT; out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;
820
+ for(j=0; j<64; j++) out[ooff++] = data[off+qtables[i]+j];
821
+ }
822
+
823
+ for(k=0; k<2; k++)
824
+ {
825
+ var htables = img[(k == 0) ? "t520" : "t521"];
826
+ if(htables==null) throw new Error(((k == 0) ? "JPEGDCTables" : "JPEGACTables") + " tag is missing");
827
+ for(i=0; i<htables.length; i++)
828
+ {
829
+ out[ooff++] = 255; out[ooff++] = DHT;
830
+ //out[ooff++] = 0; out[ooff++] = 67; out[ooff++] = i;
831
+ var nc = 19;
832
+ for(j=0; j<16; j++) nc += data[off+htables[i]+j];
833
+
834
+ out[ooff++] = (nc >>> 8); out[ooff++] = nc & 255;
835
+ out[ooff++] = (i | (k << 4));
836
+ for(j=0; j<16; j++) out[ooff++] = data[off+htables[i]+j];
837
+ for(j=0; j<nc; j++) out[ooff++] = data[off+htables[i]+16+j];
838
+ }
839
+ }
840
+
841
+ out[ooff++] = 255; out[ooff++] = SOF0;
842
+ out[ooff++] = 0; out[ooff++] = 8 + 3*spp; out[ooff++] = 8;
843
+ out[ooff++] = (img.height >>> 8) & 255; out[ooff++] = img.height & 255;
844
+ out[ooff++] = (img.width >>> 8) & 255; out[ooff++] = img.width & 255;
845
+ out[ooff++] = spp;
846
+ if(spp==1) { out[ooff++] = 1; out[ooff++] = 17; out[ooff++] = 0; }
847
+ else for(i=0; i<3; i++)
848
+ {
849
+ out[ooff++] = i + 1;
850
+ out[ooff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));
851
+ out[ooff++] = i;
852
+ }
853
+
854
+ if(jpgresint!=null && jpgresint[0]!=0)
855
+ {
856
+ out[ooff++] = 255; out[ooff++] = DRI; out[ooff++] = 0; out[ooff++] = 4;
857
+ out[ooff++] = (jpgresint[0] >>> 8) & 255;
858
+ out[ooff++] = jpgresint[0] & 255;
859
+ }
860
+
861
+ tables = new Uint8Array(out);
862
+ }
863
+
864
+ var sofpos = -1;
865
+ i = 0;
866
+ while(i < (tables.length - 1)) {
867
+ if(tables[i]==255 && tables[i+1]==SOF0) { sofpos = i; break; }
868
+ i++;
869
+ }
870
+
871
+ if(sofpos == -1)
872
+ {
873
+ var tmptab = new Uint8Array(tables.length + 10 + 3*spp);
874
+ tmptab.set(tables);
875
+ var tmpoff = tables.length;
876
+ sofpos = tables.length;
877
+ tables = tmptab;
878
+
879
+ tables[tmpoff++] = 255; tables[tmpoff++] = SOF0;
880
+ tables[tmpoff++] = 0; tables[tmpoff++] = 8 + 3*spp; tables[tmpoff++] = 8;
881
+ tables[tmpoff++] = (img.height >>> 8) & 255; tables[tmpoff++] = img.height & 255;
882
+ tables[tmpoff++] = (img.width >>> 8) & 255; tables[tmpoff++] = img.width & 255;
883
+ tables[tmpoff++] = spp;
884
+ if(spp==1) { tables[tmpoff++] = 1; tables[tmpoff++] = 17; tables[tmpoff++] = 0; }
885
+ else for(i=0; i<3; i++)
886
+ {
887
+ tables[tmpoff++] = i + 1;
888
+ tables[tmpoff++] = (i != 0) ? 17 : (((ssx & 15) << 4) | (ssy & 15));
889
+ tables[tmpoff++] = i;
890
+ }
891
+ }
892
+
893
+ if(data[soff]==255 && data[soff+1]==SOS)
894
+ {
895
+ var soslen = (data[soff+2]<<8) | data[soff+3];
896
+ sosMarker = new Uint8Array(soslen+2);
897
+ sosMarker[0] = data[soff]; sosMarker[1] = data[soff+1]; sosMarker[2] = data[soff+2]; sosMarker[3] = data[soff+3];
898
+ for(i=0; i<(soslen-2); i++) sosMarker[i+4] = data[soff+i+4];
899
+ }
900
+ else
901
+ {
902
+ sosMarker = new Uint8Array(2 + 6 + 2*spp);
903
+ var sosoff = 0;
904
+ sosMarker[sosoff++] = 255; sosMarker[sosoff++] = SOS;
905
+ sosMarker[sosoff++] = 0; sosMarker[sosoff++] = 6 + 2*spp; sosMarker[sosoff++] = spp;
906
+ if(spp==1) { sosMarker[sosoff++] = 1; sosMarker[sosoff++] = 0; }
907
+ else for(i=0; i<3; i++)
908
+ {
909
+ sosMarker[sosoff++] = i+1; sosMarker[sosoff++] = (i << 4) | i;
910
+ }
911
+ sosMarker[sosoff++] = 0; sosMarker[sosoff++] = 63; sosMarker[sosoff++] = 0;
912
+ }
913
+
914
+ return { jpegOffset: off, tables: tables, sosMarker: sosMarker, sofPosition: sofpos };
915
+ }
916
+
917
+ UTIF.decode._decodeOldJPEG = function(img, data, off, len, tgt, toff)
918
+ {
919
+ var i, dlen, tlen, buff, buffoff;
920
+ var jpegData = UTIF.decode._decodeOldJPEGInit(img, data, off, len);
921
+
922
+ if(jpegData.jpegOffset!=null)
923
+ {
924
+ dlen = off+len-jpegData.jpegOffset;
925
+ buff = new Uint8Array(dlen);
926
+ for(i=0; i<dlen; i++) buff[i] = data[jpegData.jpegOffset+i];
927
+ }
928
+ else
929
+ {
930
+ tlen = jpegData.tables.length;
931
+ buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2);
932
+ buff.set(jpegData.tables);
933
+ buffoff = tlen;
934
+
935
+ buff[jpegData.sofPosition+5] = (img.height >>> 8) & 255; buff[jpegData.sofPosition+6] = img.height & 255;
936
+ buff[jpegData.sofPosition+7] = (img.width >>> 8) & 255; buff[jpegData.sofPosition+8] = img.width & 255;
937
+
938
+ if(data[off]!=255 || data[off+1]!=SOS)
939
+ {
940
+ buff.set(jpegData.sosMarker, buffoff);
941
+ buffoff += sosMarker.length;
942
+ }
943
+ for(i=0; i<len; i++) buff[buffoff++] = data[off+i];
944
+ buff[buffoff++] = 255; buff[buffoff++] = EOI;
945
+ }
946
+
947
+ var parser = new UTIF.JpegDecoder(); parser.parse(buff);
948
+ var decoded = parser.getData({"width":parser.width,"height":parser.height,"forceRGB":true,"isSourcePDF":false});
949
+ for (var i=0; i<decoded.length; i++) tgt[toff + i] = decoded[i];
950
+
951
+ // PhotometricInterpretation is 6 (YCbCr) for JPEG, but after decoding we populate data in
952
+ // RGB format, so updating the tag value
953
+ if(img["t262"] && img["t262"][0] == 6) img["t262"][0] = 2;
954
+ }
955
+
956
+ UTIF.decode._decodePackBits = function(data, off, len, tgt, toff)
957
+ {
958
+ var sa = new Int8Array(data.buffer), ta = new Int8Array(tgt.buffer), lim = off+len;
959
+ while(off<lim)
960
+ {
961
+ var n = sa[off]; off++;
962
+ if(n>=0 && n<128) for(var i=0; i< n+1; i++) { ta[toff]=sa[off]; toff++; off++; }
963
+ if(n>=-127 && n<0) { for(var i=0; i<-n+1; i++) { ta[toff]=sa[off]; toff++; } off++; }
964
+ }
965
+ return toff;
966
+ }
967
+
968
+ UTIF.decode._decodeThunder = function(data, off, len, tgt, toff)
969
+ {
970
+ var d2 = [ 0, 1, 0, -1 ], d3 = [ 0, 1, 2, 3, 0, -3, -2, -1 ];
971
+ var lim = off+len, qoff = toff*2, px = 0;
972
+ while(off<lim)
973
+ {
974
+ var b = data[off], msk = (b>>>6), n = (b&63); off++;
975
+ if(msk==3) { px=(n&15); tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }
976
+ if(msk==0) for(var i=0; i<n; i++) { tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; }
977
+ if(msk==2) for(var i=0; i<2; i++) { var d=(n>>>(3*(1-i)))&7; if(d!=4) { px+=d3[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }
978
+ if(msk==1) for(var i=0; i<3; i++) { var d=(n>>>(2*(2-i)))&3; if(d!=2) { px+=d2[d]; tgt[qoff>>>1] |= (px<<(4*(1-qoff&1))); qoff++; } }
979
+ }
980
+ }
981
+
982
+ UTIF.decode._dmap = { "1":0,"011":1,"000011":2,"0000011":3, "010":-1,"000010":-2,"0000010":-3 };
983
+ UTIF.decode._lens = ( function()
984
+ {
985
+ var addKeys = function(lens, arr, i0, inc) { for(var i=0; i<arr.length; i++) lens[arr[i]] = i0 + i*inc; }
986
+
987
+ var termW = "00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101," // 15
988
+ + "101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010," // 31
989
+ + "00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010," // 47
990
+ + "00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100";
991
+
992
+ var termB = "0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000," // 15
993
+ + "0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001," // 31
994
+ + "000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111," // 47
995
+ + "000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111";
996
+
997
+ var makeW = "11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,"
998
+ + "011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011";
999
+
1000
+ var makeB = "0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,"
1001
+ + "0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,"
1002
+ + "0000001011011,0000001100100,0000001100101";
1003
+
1004
+ var makeA = "00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111";
1005
+
1006
+ termW = termW.split(","); termB = termB.split(","); makeW = makeW.split(","); makeB = makeB.split(","); makeA = makeA.split(",");
1007
+
1008
+ var lensW = {}, lensB = {};
1009
+ addKeys(lensW, termW, 0, 1); addKeys(lensW, makeW, 64,64); addKeys(lensW, makeA, 1792,64);
1010
+ addKeys(lensB, termB, 0, 1); addKeys(lensB, makeB, 64,64); addKeys(lensB, makeA, 1792,64);
1011
+ return [lensW, lensB];
1012
+ } )();
1013
+
1014
+ UTIF.decode._decodeG4 = function(data, off, slen, tgt, toff, w, fo)
1015
+ {
1016
+ var U = UTIF.decode, boff=off<<3, len=0, wrd=""; // previous starts with 1
1017
+ var line=[], pline=[]; for(var i=0; i<w; i++) pline.push(0); pline=U._makeDiff(pline);
1018
+ var a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;
1019
+ var y=0, mode="", toRead=0;
1020
+ var bipl = Math.ceil(w/8)*8;
1021
+
1022
+ while((boff>>>3)<off+slen)
1023
+ {
1024
+ b1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr); // could be precomputed
1025
+ var bit =0;
1026
+ if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1027
+ if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1028
+ boff++; wrd+=bit;
1029
+ if(mode=="H")
1030
+ {
1031
+ if(U._lens[clr][wrd]!=null)
1032
+ {
1033
+ var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1034
+ if(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=""; }
1035
+ }
1036
+ }
1037
+ else
1038
+ {
1039
+ if(wrd=="0001") { wrd=""; U._addNtimes(line,b2-a0,clr); a0=b2; }
1040
+ if(wrd=="001" ) { wrd=""; mode="H"; toRead=2; }
1041
+ if(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=""; clr=1-clr; }
1042
+ }
1043
+ if(line.length==w && mode=="")
1044
+ {
1045
+ U._writeBits(line, tgt, toff*8+y*bipl);
1046
+ clr=0; y++; a0=0;
1047
+ pline=U._makeDiff(line); line=[];
1048
+ }
1049
+ //if(wrd.length>150) { log(wrd); break; throw "e"; }
1050
+ }
1051
+ }
1052
+
1053
+ UTIF.decode._findDiff = function(line, x, clr) { for(var i=0; i<line.length; i+=2) if(line[i]>=x && line[i+1]==clr) return line[i]; }
1054
+
1055
+ UTIF.decode._makeDiff = function(line)
1056
+ {
1057
+ var out = []; if(line[0]==1) out.push(0,1);
1058
+ for(var i=1; i<line.length; i++) if(line[i-1]!=line[i]) out.push(i, line[i]);
1059
+ out.push(line.length,0,line.length,1); return out;
1060
+ }
1061
+
1062
+ UTIF.decode._decodeG2 = function(data, off, slen, tgt, toff, w, fo)
1063
+ {
1064
+ var U = UTIF.decode, boff=off<<3, len=0, wrd="";
1065
+ var line=[];
1066
+ var clr = 0;
1067
+ var y=0;
1068
+ var bipl = Math.ceil(w/8)*8;
1069
+
1070
+ while((boff>>>3)<off+slen) {
1071
+ var bit =0;
1072
+ if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1073
+ if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1074
+ boff++; wrd+=bit;
1075
+
1076
+ len = U._lens[clr][wrd];
1077
+ if(len!=null) {
1078
+ U._addNtimes(line,len,clr); wrd="";
1079
+ if(len<64) clr = 1-clr;
1080
+ if(line.length==w) { U._writeBits(line, tgt, toff*8+y*bipl); line=[]; y++; clr=0; if((boff&7)!=0) boff+=8-(boff&7); if(len>=64) boff+=8; }
1081
+ }
1082
+ }
1083
+ }
1084
+
1085
+ UTIF.decode._decodeG3 = function(data, off, slen, tgt, toff, w, fo, twoDim)
1086
+ {
1087
+ var U = UTIF.decode, boff=off<<3, len=0, wrd="";
1088
+ var line=[], pline=[]; for(var i=0; i<w; i++) line.push(0);
1089
+ var a0=0, a1=0, a2=0, b1=0, b2=0, clr=0;
1090
+ var y=-1, mode="", toRead=0, is1D=true;
1091
+ var bipl = Math.ceil(w/8)*8;
1092
+ while((boff>>>3)<off+slen)
1093
+ {
1094
+ b1 = U._findDiff(pline, a0+(a0==0?0:1), 1-clr), b2 = U._findDiff(pline, b1, clr); // could be precomputed
1095
+ var bit =0;
1096
+ if(fo==1) bit = (data[boff>>>3]>>>(7-(boff&7)))&1;
1097
+ if(fo==2) bit = (data[boff>>>3]>>>( (boff&7)))&1;
1098
+ boff++; wrd+=bit;
1099
+
1100
+ if(is1D)
1101
+ {
1102
+ if(U._lens[clr][wrd]!=null)
1103
+ {
1104
+ var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1105
+ if(dl<64) { U._addNtimes(line,len,clr); clr=1-clr; len=0; }
1106
+ }
1107
+ }
1108
+ else
1109
+ {
1110
+ if(mode=="H")
1111
+ {
1112
+ if(U._lens[clr][wrd]!=null)
1113
+ {
1114
+ var dl=U._lens[clr][wrd]; wrd=""; len+=dl;
1115
+ if(dl<64) { U._addNtimes(line,len,clr); a0+=len; clr=1-clr; len=0; toRead--; if(toRead==0) mode=""; }
1116
+ }
1117
+ }
1118
+ else
1119
+ {
1120
+ if(wrd=="0001") { wrd=""; U._addNtimes(line,b2-a0,clr); a0=b2; }
1121
+ if(wrd=="001" ) { wrd=""; mode="H"; toRead=2; }
1122
+ if(U._dmap[wrd]!=null) { a1 = b1+U._dmap[wrd]; U._addNtimes(line, a1-a0, clr); a0=a1; wrd=""; clr=1-clr; }
1123
+ }
1124
+ }
1125
+ if(wrd.endsWith("000000000001")) // needed for some files
1126
+ {
1127
+ if(y>=0) U._writeBits(line, tgt, toff*8+y*bipl);
1128
+ if(twoDim) {
1129
+ if(fo==1) is1D = ((data[boff>>>3]>>>(7-(boff&7)))&1)==1;
1130
+ if(fo==2) is1D = ((data[boff>>>3]>>>( (boff&7)))&1)==1;
1131
+ boff++;
1132
+ }
1133
+ //log("EOL",y, "next 1D:", is1D);
1134
+ wrd=""; clr=0; y++; a0=0;
1135
+ pline=U._makeDiff(line); line=[];
1136
+ }
1137
+ }
1138
+ if(line.length==w) U._writeBits(line, tgt, toff*8+y*bipl);
1139
+ }
1140
+
1141
+ UTIF.decode._addNtimes = function(arr, n, val) { for(var i=0; i<n; i++) arr.push(val); }
1142
+
1143
+ UTIF.decode._writeBits = function(bits, tgt, boff)
1144
+ {
1145
+ for(var i=0; i<bits.length; i++) tgt[(boff+i)>>>3] |= (bits[i]<<(7-((boff+i)&7)));
1146
+ }
1147
+
1148
+ UTIF.decode._decodeLZW=UTIF.decode._decodeLZW=function(){var e,U,Z,u,K=0,V=0,g=0,N=0,O=function(){var S=e>>>3,A=U[S]<<16|U[S+1]<<8|U[S+2],j=A>>>24-(e&7)-V&(1<<V)-1;
1149
+ e+=V;return j},h=new Uint32Array(4096*4),w=0,m=function(S){if(S==w)return;w=S;g=1<<S;N=g+1;for(var A=0;
1150
+ A<N+1;A++){h[4*A]=h[4*A+3]=A;h[4*A+1]=65535;h[4*A+2]=1}},i=function(S){V=S+1;K=N+1},D=function(S){var A=S<<2,j=h[A+2],a=u+j-1;
1151
+ while(A!=65535){Z[a--]=h[A];A=h[A+1]}u+=j},L=function(S,A){var j=K<<2,a=S<<2;h[j]=h[(A<<2)+3];h[j+1]=a;
1152
+ h[j+2]=h[a+2]+1;h[j+3]=h[a+3];K++;if(K+1==1<<V&&V!=12)V++},T=function(S,A,j,a,n,q){e=A<<3;U=S;Z=a;u=n;
1153
+ var B=A+j<<3,_=0,t=0;m(q);i(q);while(e<B&&(_=O())!=N){if(_==g){i(q);_=O();if(_==N)break;D(_)}else{if(_<K){D(_);
1154
+ L(t,_)}else{L(t,t);D(K-1)}}t=_}return u};return T}();
1155
+
1156
+ UTIF.tags = {};
1157
+ //UTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };
1158
+ // start at tag 250
1159
+ UTIF._types = function() {
1160
+ var main = new Array(250); main.fill(0);
1161
+ main = main.concat([0,0,0,0,4,3,3,3,3,3,0,0,3,0,0,0,3,0,0,2,2,2,2,4,3,0,0,3,4,4,3,3,5,5,3,2,5,5,0,0,0,0,4,4,0,0,3,3,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,2,2,3,5,5,3,0,3,3,4,4,4,3,4,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
1162
+ var rest = {33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7};
1163
+ return {
1164
+ basic: {
1165
+ main: main,
1166
+ rest: rest
1167
+ },
1168
+ gps: {
1169
+ main: [1,2,5,2,5,1,5,5,0,9],
1170
+ rest: {18:2,29:2}
1171
+ }
1172
+ }
1173
+ }();
1174
+
1175
+ UTIF._readIFD = function(bin, data, offset, ifds, depth, prm)
1176
+ {
1177
+ var cnt = bin.readUshort(data, offset); offset+=2;
1178
+ var ifd = {};
1179
+
1180
+ if(prm.debug) log(" ".repeat(depth),ifds.length-1,">>>----------------");
1181
+ for(var i=0; i<cnt; i++)
1182
+ {
1183
+ var tag = bin.readUshort(data, offset); offset+=2;
1184
+ var type = bin.readUshort(data, offset); offset+=2;
1185
+ var num = bin.readUint (data, offset); offset+=4;
1186
+ var voff = bin.readUint (data, offset); offset+=4;
1187
+
1188
+ var arr = [];
1189
+ //ifd["t"+tag+"-"+UTIF.tags[tag]] = arr;
1190
+ if(type== 1 || type==7) { var no=(num<5 ? offset-4 : voff); if(no+num>data.buffer.byteLength) num=data.buffer.byteLength-no; arr = new Uint8Array(data.buffer, no, num); }
1191
+ if(type== 2) { var o0 = (num<5 ? offset-4 : voff), c=data[o0], len=Math.max(0, Math.min(num-1,data.length-o0));
1192
+ if(c<128 || len==0) arr.push( bin.readASCII(data, o0, len) );
1193
+ else arr = new Uint8Array(data.buffer, o0, len); }
1194
+ if(type== 3) { for(var j=0; j<num; j++) arr.push(bin.readUshort(data, (num<3 ? offset-4 : voff)+2*j)); }
1195
+ if(type== 4
1196
+ || type==13) { for(var j=0; j<num; j++) arr.push(bin.readUint (data, (num<2 ? offset-4 : voff)+4*j)); }
1197
+ if(type== 5 || type==10) {
1198
+ var ri = type==5 ? bin.readUint : bin.readInt;
1199
+ for(var j=0; j<num; j++) arr.push([ri(data, voff+j*8), ri(data,voff+j*8+4)]); }
1200
+ if(type== 8) { for(var j=0; j<num; j++) arr.push(bin.readShort (data, (num<3 ? offset-4 : voff)+2*j)); }
1201
+ if(type== 9) { for(var j=0; j<num; j++) arr.push(bin.readInt (data, (num<2 ? offset-4 : voff)+4*j)); }
1202
+ if(type==11) { for(var j=0; j<num; j++) arr.push(bin.readFloat (data, voff+j*4)); }
1203
+ if(type==12) { for(var j=0; j<num; j++) arr.push(bin.readDouble(data, voff+j*8)); }
1204
+
1205
+ if(num!=0 && arr.length==0) { log(tag, "unknown TIFF tag type: ", type, "num:",num); if(i==0)return; continue; }
1206
+ if(prm.debug) log(" ".repeat(depth), tag, type, UTIF.tags[tag], arr);
1207
+
1208
+ ifd["t"+tag] = arr;
1209
+
1210
+ if(tag==330 && ifd["t272"] && ifd["t272"][0]=="DSLR-A100") { }
1211
+ else if(tag==330 || tag==34665 || tag==34853 || (tag==50740 && bin.readUshort(data,bin.readUint(arr,0))<300 ) ||tag==61440) {
1212
+ var oarr = tag==50740 ? [bin.readUint(arr,0)] : arr;
1213
+ var subfd = [];
1214
+ for(var j=0; j<oarr.length; j++) UTIF._readIFD(bin, data, oarr[j], subfd, depth+1, prm);
1215
+ if(tag== 330) ifd.subIFD = subfd;
1216
+ if(tag==34665) ifd.exifIFD = subfd[0];
1217
+ if(tag==34853) ifd.gpsiIFD = subfd[0]; //console.log("gps", subfd[0]); }
1218
+ if(tag==50740) ifd.dngPrvt = subfd[0];
1219
+ if(tag==61440) ifd.fujiIFD = subfd[0];
1220
+ }
1221
+ if(tag==37500 && prm.parseMN) {
1222
+ var mn = arr;
1223
+ //console.log(bin.readASCII(mn,0,mn.length), mn);
1224
+ if(bin.readASCII(mn,0,5)=="Nikon") ifd.makerNote = UTIF["decode"](mn.slice(10).buffer)[0];
1225
+ else if(bin.readASCII(mn,0,5)=="OLYMP" || bin.readASCII(mn,0,9)=="OM SYSTEM") { // ???
1226
+ var inds = [8208,8224,8240,8256,8272];
1227
+ var subsub = []; UTIF._readIFD(bin, mn, mn[1]==77 ? 16 : (mn[5]==85 ? 12 : 8), subsub, depth+1, prm);
1228
+ var obj = ifd.makerNote = subsub.pop();
1229
+ for(var j=0; j<inds.length; j++) {
1230
+ var k="t"+inds[j]; if(obj[k]==null) continue;
1231
+ UTIF._readIFD(bin, mn, obj[k][0], subsub, depth+1, prm);
1232
+ obj[k] = subsub.pop();
1233
+ }
1234
+ if(obj["t12288"]) {
1235
+ UTIF._readIFD(bin, obj["t12288"], 0, subsub, depth+1, prm);
1236
+ obj["t12288"]=subsub.pop();
1237
+ }
1238
+ }
1239
+ else if(bin.readUshort(data,voff)<300 && bin.readUshort(data,voff+4)<=12){
1240
+ var subsub=[]; UTIF._readIFD(bin, data, voff, subsub, depth+1, prm);
1241
+ ifd.makerNote = subsub[0];
1242
+ }
1243
+ }
1244
+ }
1245
+ ifds.push(ifd);
1246
+ if(prm.debug) log(" ".repeat(depth),"<<<---------------");
1247
+ return offset;
1248
+ }
1249
+
1250
+ UTIF._writeIFD = function(bin, types, data, offset, ifd)
1251
+ {
1252
+ var keys = Object.keys(ifd), knum=keys.length; if(ifd["exifIFD"]) knum--; if(ifd["gpsiIFD"]) knum--;
1253
+ bin.writeUshort(data, offset, knum); offset+=2;
1254
+
1255
+ var eoff = offset + knum*12 + 4;
1256
+
1257
+ for(var ki=0; ki<keys.length; ki++)
1258
+ {
1259
+ var key = keys[ki]; if(key=="t34665" || key=="t34853") continue;
1260
+ if(key=="exifIFD") key="t34665"; if(key=="gpsiIFD") key="t34853";
1261
+ var tag = parseInt(key.slice(1)), type = types.main[tag]; if(type==null) type=types.rest[tag];
1262
+ if(type==null || type==0) throw new Error("unknown type of tag: "+tag);
1263
+ //console.log(offset+":", tag, type, eoff);
1264
+ var val = ifd[key];
1265
+ if(tag==34665) {
1266
+ var outp = UTIF._writeIFD(bin, types, data, eoff, ifd["exifIFD"]);
1267
+ val = [eoff]; eoff = outp[1];
1268
+ }
1269
+ if(tag==34853) {
1270
+ var outp = UTIF._writeIFD(bin, UTIF._types.gps, data, eoff, ifd["gpsiIFD"]);
1271
+ val = [eoff]; eoff = outp[1];
1272
+ }
1273
+ if(type==2) val=val[0]+"\u0000"; var num = val.length;
1274
+ bin.writeUshort(data, offset, tag ); offset+=2;
1275
+ bin.writeUshort(data, offset, type); offset+=2;
1276
+ bin.writeUint (data, offset, num ); offset+=4;
1277
+
1278
+ var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num; //if(dlen<1) throw "e";
1279
+ var toff = offset;
1280
+ if(dlen>4) { bin.writeUint(data, offset, eoff); toff=eoff; }
1281
+
1282
+ if (type== 1 || type==7) { for(var i=0; i<num; i++) data[toff+i] = val[i]; }
1283
+ else if(type== 2) { bin.writeASCII(data, toff, val); }
1284
+ else if(type== 3) { for(var i=0; i<num; i++) bin.writeUshort(data, toff+2*i, val[i]); }
1285
+ else if(type== 4) { for(var i=0; i<num; i++) bin.writeUint (data, toff+4*i, val[i]); }
1286
+ else if(type== 5 || type==10) {
1287
+ var wr = type==5?bin.writeUint:bin.writeInt;
1288
+ for(var i=0; i<num; i++) {
1289
+ var v=val[i],nu=v[0],de=v[1]; if(nu==null) throw "e"; wr(data, toff+8*i, nu); wr(data, toff+8*i+4, de); } }
1290
+ else if(type== 9) { for(var i=0; i<num; i++) bin.writeInt (data, toff+4*i, val[i]); }
1291
+ else if(type==12) { for(var i=0; i<num; i++) bin.writeDouble(data, toff+8*i, val[i]); }
1292
+ else throw type;
1293
+
1294
+ if(dlen>4) { dlen += (dlen&1); eoff += dlen; }
1295
+ offset += 4;
1296
+ }
1297
+ return [offset, eoff];
1298
+ }
1299
+
1300
+ UTIF.toRGBA8 = function(out, scl)
1301
+ {
1302
+ function gamma(x) { return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055; }
1303
+
1304
+
1305
+ var w = out.width, h = out.height, area = w*h, qarea = area*4, data = out.data;
1306
+ var img = new Uint8Array(area*4);
1307
+ //console.log(out);
1308
+ // 0: WhiteIsZero, 1: BlackIsZero, 2: RGB, 3: Palette color, 4: Transparency mask, 5: CMYK
1309
+ var intp = (out["t262"] ? out["t262"][0]: 2), bps = (out["t258"]?Math.min(32,out["t258"][0]):1);
1310
+ if(out["t262"]==null && bps==1) intp=0;
1311
+
1312
+ var smpls = out["t277"]?out["t277"][0] : (out["t258"]?out["t258"].length : [1,1,3,1,1,4,3][intp]);
1313
+ var sfmt = out["t339"]?out["t339"][0] : null; if(intp==1 && bps==32 && sfmt!=3) throw "e"; // sample format
1314
+ var bpl = Math.ceil(smpls*bps*w/8);
1315
+
1316
+ //log("interpretation: ", intp, "smpls", smpls, "bps", bps, "sample format",sfmt, out);
1317
+
1318
+ if(false) {}
1319
+ else if(intp==0)
1320
+ {
1321
+ scl = 1/256; // "Photopeatest.tif"
1322
+ for(var y=0; y<h; y++) {
1323
+ var off = y*bpl, io = y*w;
1324
+ if(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))& 1; img[qi]=img[qi+1]=img[qi+2]=( 1-px)*255; img[qi+3]=255; }
1325
+ if(bps== 4) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>1)])>>(4-4*(i&1)))&15; img[qi]=img[qi+1]=img[qi+2]=(15-px)* 17; img[qi+3]=255; }
1326
+ if(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i]; img[qi]=img[qi+1]=img[qi+2]=255-px; img[qi+3]=255; }
1327
+ if(bps==16) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o]; img[qi]=img[qi+1]=img[qi+2]= Math.min(255,255-(~~(px*scl))); img[qi+3]=255; } // ladoga.tif
1328
+ }
1329
+ }
1330
+ else if(intp==1)
1331
+ {
1332
+ if(scl==null) scl=1/256;
1333
+ var f32 = ((data.length&3)==0) ? new Float32Array(data.buffer) : null;
1334
+
1335
+ for(var y=0; y<h; y++) {
1336
+ var off = y*bpl, io = y*w;
1337
+ if(bps== 1) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>3)])>>(7- (i&7)))&1; img[qi]=img[qi+1]=img[qi+2]=(px)*255; img[qi+3]=255; }
1338
+ if(bps== 2) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=((data[off+(i>>2)])>>(6-2*(i&3)))&3; img[qi]=img[qi+1]=img[qi+2]=(px)* 85; img[qi+3]=255; }
1339
+ if(bps== 8) for(var i=0; i<w; i++) { var qi=(io+i)<<2, px=data[off+i*smpls]; img[qi]=img[qi+1]=img[qi+2]= px; img[qi+3]=255; }
1340
+ if(bps==16) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=off+(2*i), px=(data[o+1]<<8)|data[o]; img[qi]=img[qi+1]=img[qi+2]= Math.min(255,~~(px*scl)); img[qi+3]=255; } // ladoga.tif
1341
+ if(bps==32) for(var i=0; i<w; i++) { var qi=(io+i)<<2, o=(off>>>2)+i, px=f32[o]; img[qi]=img[qi+1]=img[qi+2]= ~~(0.5+255*px); img[qi+3]=255; }
1342
+ }
1343
+ }
1344
+ else if(intp==2)
1345
+ {
1346
+ if(bps== 8)
1347
+ {
1348
+ if(smpls==1) for(var i=0; i<area; i++) { img[4*i]=img[4*i+1]=img[4*i+2]=data[i]; img[4*i+3]=255; }
1349
+ if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*3 ; img[qi]=data[ti]; img[qi+1]=data[ti+1]; img[qi+2]=data[ti+2]; img[qi+3]=255; }
1350
+ if(smpls>=4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*smpls; img[qi]=data[ti]; img[qi+1]=data[ti+1]; img[qi+2]=data[ti+2]; img[qi+3]=data[ti+3]; }
1351
+ }
1352
+ else if(bps==16){ // 3x 16-bit channel
1353
+ if(smpls==4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*8+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=data[ti+6]; }
1354
+ if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*6+1; img[qi]=data[ti]; img[qi+1]=data[ti+2]; img[qi+2]=data[ti+4]; img[qi+3]=255; }
1355
+ }
1356
+ else if(bps==32){
1357
+ var ndt = new Float32Array(data.buffer); // t339 is [3,3,3]
1358
+ // check the endianity
1359
+ var min = 0; for(var i=0; i<ndt.length; i++) min = Math.min(min,ndt[i]);
1360
+ if(min<0) for(var i=0; i<data.length; i+=4) { var t=data[i]; data[i]=data[i+3]; data[i+3]=t; t=data[i+1]; data[i+1]=data[i+2]; data[i+2]=t; }
1361
+ // gamma correction
1362
+ var pmap = []; for(var i=0; i<65536; i++) pmap.push(gamma(i/65535));
1363
+ for(var i=0; i<ndt.length; i++) { var cv = Math.max(0, Math.min(1, ndt[i])); ndt[i] = pmap[~~(0.5+cv*65535)]; }
1364
+
1365
+ if(smpls==3) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*3;
1366
+ img[qi]=~~(0.5+ndt[ti]*255); img[qi+1]=~~(0.5+ndt[ti+1]*255); img[qi+2]=~~(0.5+ndt[ti+2]*255); img[qi+3]=255; }
1367
+ else if(smpls==4) for(var i=0; i<area; i++) { var qi=i<<2, ti=i*4;
1368
+ img[qi]=~~(0.5+ndt[ti]*255); img[qi+1]=~~(0.5+ndt[ti+1]*255); img[qi+2]=~~(0.5+ndt[ti+2]*255); img[qi+3]=~~(0.5+ndt[ti+3]*255); }
1369
+ else throw smpls;
1370
+ }
1371
+ else throw bps;
1372
+ }
1373
+ else if(intp==3)
1374
+ {
1375
+ var map = out["t320"];
1376
+ var cn = 1<<bps;
1377
+
1378
+ var nexta = bps==8 && smpls>1 && out["t338"] && out["t338"][0]!=0;
1379
+
1380
+ for(var y=0; y<h; y++)
1381
+ for(var x=0; x<w; x++) {
1382
+ var i = y*w+x;
1383
+ var qi=i<<2, mi=0;
1384
+ var dof = y*bpl;
1385
+ if(false) {}
1386
+ else if(bps==1) mi=(data[dof+(x>>>3)]>>>(7- (x&7)))& 1;
1387
+ else if(bps==2) mi=(data[dof+(x>>>2)]>>>(6-2*(x&3)))& 3;
1388
+ else if(bps==4) mi=(data[dof+(x>>>1)]>>>(4-4*(x&1)))&15;
1389
+ else if(bps==8) mi= data[dof+x*smpls];
1390
+ else throw bps;
1391
+ img[qi]=(map[mi]>>8); img[qi+1]=(map[cn+mi]>>8); img[qi+2]=(map[cn+cn+mi]>>8); img[qi+3]=nexta ? data[dof+x*smpls+1] : 255;
1392
+ }
1393
+ }
1394
+ else if(intp==5)
1395
+ {
1396
+ var gotAlpha = smpls>4 ? 1 : 0;
1397
+ for(var i=0; i<area; i++) {
1398
+ var qi=i<<2, si=i*smpls;
1399
+
1400
+ if(window.UDOC) {
1401
+ var C=data[si], M=data[si+1], Y=data[si+2], K=data[si+3];
1402
+ var c = UDOC.C.cmykToRgb([C*(1/255), M*(1/255), Y*(1/255), K*(1/255)]);
1403
+ img[qi] = ~~(0.5+255*c[0]); img[qi+1] = ~~(0.5+255*c[1]); img[qi+2] = ~~(0.5+255*c[2]);
1404
+ }
1405
+ else {
1406
+ var C=255-data[si], M=255-data[si+1], Y=255-data[si+2], K=(255-data[si+3])*(1/255);
1407
+ img[qi]=~~(C*K+0.5); img[qi+1]=~~(M*K+0.5); img[qi+2]=~~(Y*K+0.5);
1408
+ }
1409
+
1410
+ img[qi+3]=255*(1-gotAlpha)+data[si+4]*gotAlpha;
1411
+ }
1412
+ }
1413
+ else if(intp==6 && out["t278"]) { // only for DSC_1538.TIF
1414
+ var rps = out["t278"][0];
1415
+ for(var y=0; y<h; y+=rps) {
1416
+ var i=(y*w), len = rps*w;
1417
+
1418
+ for(var j=0; j<len; j++) {
1419
+ var qi = 4*(i+j), si = 3*i+4*(j>>>1);
1420
+ var Y = data[si+(j&1)], Cb=data[si+2]-128, Cr=data[si+3]-128;
1421
+
1422
+ var r = Y + ( (Cr >> 2) + (Cr >> 3) + (Cr >> 5) ) ;
1423
+ var g = Y - ( (Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ( (Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5)) ;
1424
+ var b = Y + ( Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6)) ;
1425
+
1426
+ img[qi ]=Math.max(0,Math.min(255,r));
1427
+ img[qi+1]=Math.max(0,Math.min(255,g));
1428
+ img[qi+2]=Math.max(0,Math.min(255,b));
1429
+ img[qi+3]=255;
1430
+ }
1431
+ }
1432
+ }
1433
+ else if(intp==32845) {
1434
+
1435
+ for(var y=0; y<h; y++)
1436
+ for(var x=0; x<w; x++) {
1437
+ var si = (y*w+x)*6, qi=(y*w+x)*4;
1438
+ var L = (data[si+1]<<8) | data[si];
1439
+
1440
+ var L = Math.pow(2, (L + 0.5) / 256 - 64);
1441
+ var u = (data[si+3] + 0.5) / 410;
1442
+ var v = (data[si+5] + 0.5) / 410;
1443
+
1444
+ // Luv to xyY
1445
+ var sX = (9 * u) / (6 * u - 16 * v + 12);
1446
+ var sY = (4 * v) / (6 * u - 16 * v + 12);
1447
+ var bY = L;
1448
+
1449
+ // xyY to XYZ
1450
+ var X = (sX*bY)/sY, Y = bY, Z = (1-sX-sY)*bY/sY;
1451
+
1452
+
1453
+ var r = 2.690*X -1.276*Y -0.414*Z
1454
+ var g = -1.022*X +1.978*Y +0.044*Z
1455
+ var b = 0.061*X -0.224*Y +1.163*Z
1456
+
1457
+ img[qi ] = gamma(Math.min(r,1))*255;
1458
+ img[qi+1] = gamma(Math.min(g,1))*255;
1459
+ img[qi+2] = gamma(Math.min(b,1))*255;
1460
+ img[qi+3] = 255;
1461
+ }
1462
+ }
1463
+ else log("Unknown Photometric interpretation: "+intp);
1464
+ return img;
1465
+ }
1466
+
1467
+ UTIF.replaceIMG = function(imgs)
1468
+ {
1469
+ if(imgs==null) imgs = document.getElementsByTagName("img");
1470
+ var sufs = ["tif","tiff","dng","cr2","nef"]
1471
+ for (var i=0; i<imgs.length; i++)
1472
+ {
1473
+ var img=imgs[i], src=img.getAttribute("src"); if(src==null) continue;
1474
+ var suff=src.split(".").pop().toLowerCase();
1475
+ if(sufs.indexOf(suff)==-1) continue;
1476
+ var xhr = new XMLHttpRequest(); UTIF._xhrs.push(xhr); UTIF._imgs.push(img);
1477
+ xhr.open("GET", src); xhr.responseType = "arraybuffer";
1478
+ xhr.onload = UTIF._imgLoaded; xhr.send();
1479
+ }
1480
+ }
1481
+
1482
+ UTIF._xhrs = []; UTIF._imgs = [];
1483
+ UTIF._imgLoaded = function(e) {
1484
+ var ind = UTIF._xhrs.indexOf(e.target), img = UTIF._imgs[ind];
1485
+ UTIF._xhrs.splice(ind,1); UTIF._imgs.splice(ind,1);
1486
+
1487
+ img.setAttribute("src",UTIF.bufferToURI(e.target.response));
1488
+ }
1489
+
1490
+ UTIF.bufferToURI = function(buff) {
1491
+ var ifds = UTIF.decode(buff); //console.log(ifds);
1492
+ var vsns = ifds, ma=0, page=vsns[0]; if(ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD);
1493
+ for(var i=0; i<vsns.length; i++) {
1494
+ var img = vsns[i];
1495
+ if(img["t258"]==null || img["t258"].length<3) continue;
1496
+ var ar = img["t256"]*img["t257"];
1497
+ if(ar>ma) { ma=ar; page=img; }
1498
+ }
1499
+ UTIF.decodeImage(buff, page, ifds);
1500
+ var rgba = UTIF.toRGBA8(page), w=page.width, h=page.height;
1501
+
1502
+ var cnv = document.createElement("canvas"); cnv.width=w; cnv.height=h;
1503
+ var ctx = cnv.getContext("2d");
1504
+ var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer),w,h);
1505
+ ctx.putImageData(imgd,0,0);
1506
+ return cnv.toDataURL();
1507
+ }
1508
+
1509
+
1510
+ UTIF._binBE =
1511
+ {
1512
+ nextZero : function(data, o) { while(data[o]!=0) o++; return o; },
1513
+ readUshort : function(buff, p) { return (buff[p]<< 8) | buff[p+1]; },
1514
+ readShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+1]; a[1]=buff[p+0]; return UTIF._binBE. i16[0]; },
1515
+ readInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE. i32[0]; },
1516
+ readUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+3]; a[1]=buff[p+2]; a[2]=buff[p+1]; a[3]=buff[p+0]; return UTIF._binBE.ui32[0]; },
1517
+ readASCII : function(buff, p, l) { var s = ""; for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]); return s; },
1518
+ readFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+3-i]; return UTIF._binBE.fl32[0]; },
1519
+ readDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+7-i]; return UTIF._binBE.fl64[0]; },
1520
+
1521
+ writeUshort: function(buff, p, n) { buff[p] = (n>> 8)&255; buff[p+1] = n&255; },
1522
+ writeInt : function(buff, p, n) { var a=UTIF._binBE.ui8; UTIF._binBE.i32[0]=n; buff[p+3]=a[0]; buff[p+2]=a[1]; buff[p+1]=a[2]; buff[p+0]=a[3]; },
1523
+ writeUint : function(buff, p, n) { buff[p] = (n>>24)&255; buff[p+1] = (n>>16)&255; buff[p+2] = (n>>8)&255; buff[p+3] = (n>>0)&255; },
1524
+ writeASCII : function(buff, p, s) { for(var i = 0; i < s.length; i++) buff[p+i] = s.charCodeAt(i); },
1525
+ writeDouble: function(buff, p, n)
1526
+ {
1527
+ UTIF._binBE.fl64[0] = n;
1528
+ for (var i = 0; i < 8; i++) buff[p + i] = UTIF._binBE.ui8[7 - i];
1529
+ }
1530
+ }
1531
+ UTIF._binBE.ui8 = new Uint8Array (8);
1532
+ UTIF._binBE.i16 = new Int16Array (UTIF._binBE.ui8.buffer);
1533
+ UTIF._binBE.i32 = new Int32Array (UTIF._binBE.ui8.buffer);
1534
+ UTIF._binBE.ui32 = new Uint32Array (UTIF._binBE.ui8.buffer);
1535
+ UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer);
1536
+ UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer);
1537
+
1538
+ UTIF._binLE =
1539
+ {
1540
+ nextZero : UTIF._binBE.nextZero,
1541
+ readUshort : function(buff, p) { return (buff[p+1]<< 8) | buff[p]; },
1542
+ readShort : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; return UTIF._binBE. i16[0]; },
1543
+ readInt : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE. i32[0]; },
1544
+ readUint : function(buff, p) { var a=UTIF._binBE.ui8; a[0]=buff[p+0]; a[1]=buff[p+1]; a[2]=buff[p+2]; a[3]=buff[p+3]; return UTIF._binBE.ui32[0]; },
1545
+ readASCII : UTIF._binBE.readASCII,
1546
+ readFloat : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<4;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl32[0]; },
1547
+ readDouble : function(buff, p) { var a=UTIF._binBE.ui8; for(var i=0;i<8;i++) a[i]=buff[p+ i]; return UTIF._binBE.fl64[0]; },
1548
+
1549
+ writeUshort: function(buff, p, n) { buff[p] = (n)&255; buff[p+1] = (n>>8)&255; },
1550
+ writeInt : function(buff, p, n) { var a=UTIF._binBE.ui8; UTIF._binBE.i32[0]=n; buff[p+0]=a[0]; buff[p+1]=a[1]; buff[p+2]=a[2]; buff[p+3]=a[3]; },
1551
+ writeUint : function(buff, p, n) { buff[p] = (n>>>0)&255; buff[p+1] = (n>>>8)&255; buff[p+2] = (n>>>16)&255; buff[p+3] = (n>>>24)&255; },
1552
+ writeASCII : UTIF._binBE.writeASCII
1553
+ }
1554
+ UTIF._copyTile = function(tb, tw, th, b, w, h, xoff, yoff)
1555
+ {
1556
+ //log("copyTile", tw, th, w, h, xoff, yoff);
1557
+ var xlim = Math.min(tw, w-xoff);
1558
+ var ylim = Math.min(th, h-yoff);
1559
+ for(var y=0; y<ylim; y++)
1560
+ {
1561
+ var tof = (yoff+y)*w+xoff;
1562
+ var sof = y*tw;
1563
+ for(var x=0; x<xlim; x++) b[tof+x] = tb[sof+x];
1564
+ }
1565
+ }
1566
+
1567
+ UTIF._inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;
1568
+ if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;
1569
+ if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);
1570
+ var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;
1571
+ w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1}if(m==2){J=A(N,d,5)+257;
1572
+ h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var E=d,j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0}for(var c=0;
1573
+ c<Q;c++){var K=A(N,d+c*3,3);b.Q[(b.X[c]<<1)+1]=K;if(K>j)j=K}d+=3*Q;M(b.Q,j);I(b.Q,j,b.u);v=b.w;C=b.d;
1574
+ d=l(b.u,(1<<j)-1,J+h,N,d,b.v);var r=V.V(b.v,0,J,b.C);X=(1<<r)-1;var S=V.V(b.v,J,h,b.D);u=(1<<S)-1;M(b.C,r);
1575
+ I(b.C,r,v);M(b.D,S);I(b.D,S,C)}while(!0){var T=v[e(N,d)&X];d+=T&15;var p=T>>>4;if(p>>>8==0){W[w++]=p}else if(p==256){break}else{var z=w+p-254;
1576
+ if(p>264){var _=b.q[p-257];z=w+(_>>>3)+A(N,d,_&7);d+=_&7}var $=C[e(N,d)&u];d+=$&15;var s=$>>>4,Y=b.c[s],a=(Y>>>4)+n(N,d,Y&15);
1577
+ d+=Y&15;while(w<z){W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a]}w=z}}}return W.length==w?W:W.slice(0,w)};
1578
+ H.H.W=function(N,W){var R=N.length;if(W<=R)return N;var V=new Uint8Array(R<<1);V.set(N,0);return V};
1579
+ H.H.R=function(N,W,R,V,n,A){var l=H.H.e,M=H.H.Z,I=0;while(I<R){var e=N[M(V,n)&W];n+=e&15;var b=e>>>4;
1580
+ if(b<=15){A[I]=b;I++}else{var Z=0,m=0;if(b==16){m=3+l(V,n,2);n+=2;Z=A[I-1]}else if(b==17){m=3+l(V,n,3);
1581
+ n+=3}else if(b==18){m=11+l(V,n,7);n+=7}var J=I+m;while(I<J){A[I]=Z;I++}}}return n};H.H.V=function(N,W,R,V){var n=0,A=0,l=V.length>>>1;
1582
+ while(A<R){var M=N[A+W];V[A<<1]=0;V[(A<<1)+1]=M;if(M>n)n=M;A++}while(A<l){V[A<<1]=0;V[(A<<1)+1]=0;A++}return n};
1583
+ H.H.n=function(N,W){var R=H.H.m,V=N.length,n,A,l,M,I,e=R.j;for(var M=0;M<=W;M++)e[M]=0;for(M=1;M<V;M+=2)e[N[M]]++;
1584
+ var b=R.K;n=0;e[0]=0;for(A=1;A<=W;A++){n=n+e[A-1]<<1;b[A]=n}for(l=0;l<V;l+=2){I=N[l+1];if(I!=0){N[l]=b[I];
1585
+ b[I]++}}};H.H.A=function(N,W,R){var V=N.length,n=H.H.m,A=n.r;for(var l=0;l<V;l+=2)if(N[l+1]!=0){var M=l>>1,I=N[l+1],e=M<<4|I,b=W-I,Z=N[l]<<b,m=Z+(1<<b);
1586
+ while(Z!=m){var J=A[Z]>>>15-W;R[J]=e;Z++}}};H.H.l=function(N,W){var R=H.H.m.r,V=15-W;for(var n=0;n<N.length;
1587
+ n+=2){var A=N[n]<<W-N[n+1];N[n]=R[A]>>>V}};H.H.M=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8};
1588
+ H.H.I=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8;N[V+2]|=R>>>16};H.H.e=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8)>>>(W&7)&(1<<R)-1};
1589
+ H.H.b=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)&(1<<R)-1};H.H.Z=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)};
1590
+ H.H.i=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16|N[(W>>>3)+3]<<24)>>>(W&7)};H.H.m=function(){var N=Uint16Array,W=Uint32Array;
1591
+ return{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(1<<15),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(1<<16),g:new N(1<<15)}}();
1592
+ (function(){var N=H.H.m,W=1<<15;for(var R=0;R<W;R++){var V=R;V=(V&2863311530)>>>1|(V&1431655765)<<1;
1593
+ V=(V&3435973836)>>>2|(V&858993459)<<2;V=(V&4042322160)>>>4|(V&252645135)<<4;V=(V&4278255360)>>>8|(V&16711935)<<8;
1594
+ N.r[R]=(V>>>16|V<<16)>>>17}function n(A,l,M){while(l--!=0)A.push(0,M)}for(var R=0;R<32;R++){N.q[R]=N.S[R]<<3|N.T[R];
1595
+ N.c[R]=N.p[R]<<4|N.z[R]}n(N._,144,8);n(N._,255-143,9);n(N._,279-255,7);n(N._,287-279,8);H.H.n(N._,9);
1596
+ H.H.A(N._,9,N.J);H.H.l(N._,9);n(N.$,32,5);H.H.n(N.$,5);H.H.A(N.$,5,N.h);H.H.l(N.$,5);n(N.Q,19,0);n(N.C,286,0);
1597
+ n(N.D,30,0);n(N.v,320,0)}());return H.H.N}();
1598
+
1599
+
1600
+
1601
+ UTIF.LosslessJpegDecode =function(){var b,O;function l(){return b[O++]}function m(){return b[O++]<<8|b[O++]}function a0(h){var V=l(),I=[0,0,0,255],f=[],G=8;
1602
+ for(var w=0;w<16;w++)f[w]=l();for(var w=0;w<16;w++){for(var x=0;x<f[w];x++){var T=z(I,0,w+1,1);I[T+3]=l()}}var E=new Uint8Array(1<<G);
1603
+ h[V]=[new Uint8Array(I),E];for(var w=0;w<1<<G;w++){var s=G,_=w,Y=0,F=0;while(I[Y+3]==255&&s!=0){F=_>>--s&1;
1604
+ Y=I[Y+F]}E[w]=Y}}function z(h,V,I,f){if(h[V+3]!=255)return 0;if(I==0)return V;for(var w=0;w<2;w++){if(h[V+w]==0){h[V+w]=h.length;
1605
+ h.push(0,0,f,255)}var x=z(h,h[V+w],I-1,f+1);if(x!=0)return x}return 0}function i(h){var V=h.b,I=h.f;
1606
+ while(V<25&&h.a<h.d){var f=h.data[h.a++];if(f==255&&!h.c)h.a++;I=I<<8|f;V+=8}if(V<0)throw"e";h.b=V;h.f=I}function H(h,V){if(V.b<h)i(V);
1607
+ return V.f>>(V.b-=h)&65535>>16-h}function g(h,V){var I=h[0],f=0,w=255,x=0;if(V.b<16)i(V);var T=V.f>>V.b-8&255;
1608
+ f=h[1][T];w=I[f+3];V.b-=I[f+2];while(w==255){x=V.f>>--V.b&1;f=I[f+x];w=I[f+3]}return w}function P(h,V){if(h<32768>>16-V)h+=-(1<<V)+1;
1609
+ return h}function a2(h,V){var I=g(h,V);if(I==0)return 0;if(I==16)return-32768;var f=H(I,V);return P(f,I)}function X(h,V,I,f,w,x){var T=0;
1610
+ for(var G=0;G<x;G++){var s=G*V;for(var _=0;_<V;_+=w){T++;for(var Y=0;Y<w;Y++)h[s+_+Y]=a2(f[Y],I)}if(I.e!=0&&T%I.e==0&&G!=0){var F=I.a,t=I.data;
1611
+ while(t[F]!=255||!(208<=t[F+1]&&t[F+1]<=215))F--;I.a=F+2;I.f=0;I.b=0}}}function o(h,V){return P(H(h,V),h)}function a1(h,V,I,f,w){var x=b.length-O;
1612
+ for(var T=0;T<x;T+=4){var G=b[O+T];b[O+T]=b[O+T+3];b[O+T+3]=G;var G=b[O+T+1];b[O+T+1]=b[O+T+2];b[O+T+2]=G}for(var E=0;
1613
+ E<w;E++){var s=32768,_=32768;for(var Y=0;Y<V;Y+=2){var F=g(f,I),t=g(f,I);if(F!=0)s+=o(F,I);if(t!=0)_+=o(t,I);
1614
+ h[E*V+Y]=s&65535;h[E*V+Y+1]=_&65535}}}function C(h){b=h;O=0;if(m()!=65496)throw"e";var V=[],I=0,f=0,w=0,x=[],T=[],G=[],E=0,s=0,_=0;
1615
+ while(!0){var Y=m();if(Y==65535){O--;continue}var F=m();if(Y==65475){f=l();s=m();_=m();E=l();for(var t=0;
1616
+ t<E;t++){var a=l(),J=l(),r=l();if(r!=0)throw"e";V[a]=[t,J>>4,J&15]}}else if(Y==65476){var a3=O+F-2;while(O<a3)a0(T)}else if(Y==65498){O++;
1617
+ for(var t=0;t<E;t++){var a5=l(),v=V[a5];G[v[0]]=T[l()>>>4];x[v[0]]=v.slice(1)}I=l();O+=2;break}else if(Y==65501){w=m()}else{O+=F-2}}var a4=f>8?Uint16Array:Uint8Array,$=new a4(s*_*E),M={b:0,f:0,c:I==8,a:O,data:b,d:b.length,e:w};
1618
+ if(M.c)a1($,_*E,M,G[0],s);else{var c=[],p=0,D=0;for(var t=0;t<E;t++){var N=x[t],S=N[0],K=N[1];if(S>p)p=S;
1619
+ if(K>D)D=K;c.push(S*K)}if(p!=1||D!=1){if(E!=3||c[1]!=1||c[2]!=1)throw"e";if(p!=2||D!=1&&D!=2)throw"e";
1620
+ var u=[],Z=0;for(var t=0;t<E;t++){for(var R=0;R<c[t];R++)u.push(G[t]);Z+=c[t]}var B=_/p,e=s/D,d=B*e;
1621
+ X($,B*Z,M,u,Z,e);j($,I,B,e,Z-2,Z,Z,f);var A=new Uint16Array(d*c[0]);if(p==2&&D==2){for(var t=0;t<d;t++){A[4*t]=$[6*t];
1622
+ A[4*t+1]=$[6*t+1];A[4*t+2]=$[6*t+2];A[4*t+3]=$[6*t+3]}j(A,I,B*4,e,0,1,1,f);for(var t=0;t<d;t++){$[6*t]=A[4*t];
1623
+ $[6*t+1]=A[4*t+1];$[6*t+2]=A[4*t+2];$[6*t+3]=A[4*t+3]}}if(p==2&&D==1){for(var t=0;t<d;t++){A[2*t]=$[4*t];
1624
+ A[2*t+1]=$[4*t+1]}j(A,I,B*2,e,0,1,1,f);for(var t=0;t<d;t++){$[4*t]=A[2*t];$[4*t+1]=A[2*t+1]}}var n=$.slice(0);
1625
+ for(var K=0;K<s;K++){if(D==2)for(var S=0;S<_;S++){var q=(K*_+S)*E,k=((K>>>1)*B+(S>>>1))*Z,y=(K&1)*2+(S&1);
1626
+ $[q]=n[k+y];$[q+1]=n[k+4];$[q+2]=n[k+5]}else for(var S=0;S<_;S++){var q=(K*_+S)*E,k=(K*B+(S>>>1))*Z,y=S&1;
1627
+ $[q]=n[k+y];$[q+1]=n[k+2];$[q+2]=n[k+3]}}}else{X($,_*E,M,G,E,s);if(w==0)j($,I,_,s,0,E,E,f);else{var U=Math.floor(w/_);
1628
+ for(var K=0;K<s;K+=U){var L=$.slice(K*_*E,(K+U)*_*E);j(L,I,_,U,0,E,E,f);$.set(L,K*_*E)}}}}return $}function j(h,V,I,f,w,x,G,E){var s=I*G;
1629
+ for(var _=w;_<x;_++)h[_]+=1<<E-1;for(var Y=G;Y<s;Y+=G)for(var _=w;_<x;_++)h[Y+_]+=h[Y+_-G];for(var F=1;
1630
+ F<f;F++){var t=F*s;for(var _=w;_<x;_++)h[t+_]+=h[t+_-s];for(var Y=G;Y<s;Y+=G){for(var _=w;_<x;_++){var a=t+Y+_,J=a-s,r=h[a-G],Q=0;
1631
+ if(V==0)Q=0;else if(V==1)Q=r;else if(V==2)Q=h[J];else if(V==3)Q=h[J-G];else if(V==4)Q=r+(h[J]-h[J-G]);
1632
+ else if(V==5)Q=r+(h[J]-h[J-G]>>>1);else if(V==6)Q=h[J]+(r-h[J-G]>>>1);else if(V==7)Q=r+h[J]>>>1;else throw V;
1633
+ h[a]+=Q}}}}return C}();
1634
+
1635
+
1636
+ (function(){var G=0,F=1,i=2,b=3,J=4,N=5,E=6,s=7,c=8,T=9,a3=10,f=11,q=12,M=13,m=14,x=15,L=16,$=17,p=18;
1637
+ function a5(t){var Z=UTIF._binBE.readUshort,u={b:Z(t,0),i:t[2],C:t[3],u:t[4],q:Z(t,5),k:Z(t,7),e:Z(t,9),l:Z(t,11),s:t[13],d:Z(t,14)};
1638
+ if(u.b!=18771||u.i>1||u.q<6||u.q%6||u.e<768||u.e%24||u.l!=768||u.k<u.l||u.k%u.l||u.k-u.e>=u.l||u.s>16||u.s!=u.k/u.l||u.s!=Math.ceil(u.e/u.l)||u.d!=u.q/6||u.u!=12&&u.u!=14&&u.u!=16||u.C!=16&&u.C!=0){throw"Invalid data"}if(u.i==0){throw"Not implemented. We need this file!"}u.h=u.C==16;
1639
+ u.m=(u.h?u.l*2/3:u.l>>>1)|0;u.A=u.m+2;u.f=64;u.g=(1<<u.u)-1;u.n=4*u.u;return u}function a7(t,Z){var u=new Array(Z.s),e=4*Z.s,Q=16+e;
1640
+ if(e&12)Q+=16-(e&12);for(var V=0,O=16;V<Z.s;O+=4){var o=UTIF._binBE.readUint(t,O);u[V]=t.slice(Q,Q+o);u[V].j=0;u[V].a=0;
1641
+ Q+=o;V++}if(Q!=t.length)throw"Invalid data";return u}function a6(t,Z){for(var u=-Z[4],e=0;u<=Z[4];e++,u++){t[e]=u<=-Z[3]?-4:u<=-Z[2]?-3:u<=-Z[1]?-2:u<-Z[0]?-1:u<=Z[0]?0:u<Z[1]?1:u<Z[2]?2:u<Z[3]?3:4}}function a1(t,Z,u){var e=[Z,3*Z+18,5*Z+67,7*Z+276,u];
1642
+ t.o=Z;t.w=(e[4]+2*Z)/(2*Z+1)+1|0;t.v=Math.ceil(Math.log2(t.w));t.t=9;a6(t.c,e)}function a2(t){var Z={c:new Int8Array(2<<t.u)};
1643
+ a1(Z,0,t.g);return Z}function D(t){var Z=[[],[],[]],u=Math.max(2,t.w+32>>>6);for(var e=0;e<3;e++){for(var Q=0;
1644
+ Q<41;Q++){Z[e][Q]=[u,1]}}return Z}function a4(t){for(var Z=-1,u=0;!u;Z++){u=t[t.j]>>>7-t.a&1;t.a++;t.a&=7;
1645
+ if(!t.a)t.j++}return Z}function K(t,Z){var u=0,e=8-t.a,Q=t.j,V=t.a;if(Z){if(Z>=e){do{u<<=e;Z-=e;u|=t[t.j]&(1<<e)-1;
1646
+ t.j++;e=8}while(Z>=8)}if(Z){u<<=Z;e-=Z;u|=t[t.j]>>>e&(1<<Z)-1}t.a=8-e}return u}function a0(t,Z){var u=0;
1647
+ if(Z<t){while(u<=14&&Z<<++u<t);}return u}function r(t,Z,u,e,Q,V,O,o){if(o==null)o=0;var X=V+1,k=X%2,j=0,I=0,a=0,l,R,w=e[Q],S=e[Q-1],H=e[Q-2][X],g=S[X-1],Y=S[X],P=S[X+1],A=w[X-1],v=w[X+1],y=Math.abs,d,C,n,h;
1648
+ if(k){d=y(P-Y);C=y(H-Y);n=y(g-Y)}if(k){h=d>n&&C<d?H+g:d<n&&C<n?H+P:P+g;h=h+2*Y>>>2;if(o){w[X]=h;return}l=Z.t*Z.c[t.g+Y-H]+Z.c[t.g+g-Y]}else{h=Y>g&&Y>P||Y<g&&Y<P?v+A+2*Y>>>2:A+v>>>1;
1649
+ l=Z.t*Z.c[t.g+Y-g]+Z.c[t.g+g-A]}R=y(l);var W=a4(u);if(W<t.n-Z.v-1){var z=a0(O[R][0],O[R][1]);a=K(u,z)+(W<<z)}else{a=K(u,Z.v)+1}a=a&1?-1-(a>>>1):a>>>1;
1650
+ O[R][0]+=y(a);if(O[R][1]==t.f){O[R][0]>>>=1;O[R][1]>>>=1}O[R][1]++;h=l<0?h-a:h+a;if(t.i){if(h<0)h+=Z.w;
1651
+ else if(h>t.g)h-=Z.w}w[X]=h>=0?Math.min(h,t.g):0}function U(t,Z,u){var e=t[0].length;for(var Q=Z;Q<=u;
1652
+ Q++){t[Q][0]=t[Q-1][1];t[Q][e-1]=t[Q-1][e-2]}}function B(t){U(t,s,q);U(t,i,J);U(t,x,$)}function _(t,Z,u,e,Q,V,O,o,X,k,j,I,a){var l=0,R=1,w=Q<M&&Q>J;
1653
+ while(R<t.m){if(l<t.m){r(t,Z,u,e,Q,l,O[X],t.h&&(w&&k||!w&&(j||(l&I)==a)));r(t,Z,u,e,V,l,O[X],t.h&&(!w&&k||w&&(j||(l&I)==a)));
1654
+ l+=2}if(l>8){r(t,Z,u,e,Q,R,o[X]);r(t,Z,u,e,V,R,o[X]);R+=2}}B(e)}function a8(t,Z,u,e,Q,V){_(t,Z,u,e,i,s,Q,V,0,0,1,0,8);
1655
+ _(t,Z,u,e,c,x,Q,V,1,0,1,0,8);_(t,Z,u,e,b,T,Q,V,2,1,0,3,0);_(t,Z,u,e,a3,L,Q,V,0,0,0,3,2);_(t,Z,u,e,J,f,Q,V,1,0,0,3,2);
1656
+ _(t,Z,u,e,q,$,Q,V,2,1,0,3,0)}function a9(t,Z,u,e,Q,V){var O=V.length,o=t.l;if(Q+1==t.s)o=t.e-Q*t.l;var X=6*t.e*e+Q*t.l;
1657
+ for(var k=0;k<6;k++){for(var j=0;j<o;j++){var I=V[k%O][j%O],a;if(I==0){a=i+(k>>>1)}else if(I==2){a=x+(k>>>1)}else{a=s+k}var l=t.h?(j*2/3&2147483646|j%3&1)+(j%3>>>1):j>>>1;
1658
+ Z[X+j]=u[a][l+1]}X+=t.e}}UTIF._decompressRAF=function(t,Z){var u=a5(t),e=a7(t,u),Q=a2(u),V=new Int16Array(u.e*u.q);
1659
+ if(Z==null){Z=u.h?[[1,1,0,1,1,2],[1,1,2,1,1,0],[2,0,1,0,2,1],[1,1,2,1,1,0],[1,1,0,1,1,2],[0,2,1,2,0,1]]:[[0,1],[3,2]]}var O=[[G,b],[F,J],[N,f],[E,q],[M,L],[m,$]],o=[];
1660
+ for(var X=0;X<p;X++){o[X]=new Uint16Array(u.A)}for(var k=0;k<u.s;k++){var j=D(Q),I=D(Q);for(var X=0;
1661
+ X<p;X++){for(var a=0;a<u.A;a++){o[X][a]=0}}for(var l=0;l<u.d;l++){a8(u,Q,e[k],o,j,I);for(var X=0;X<6;
1662
+ X++){for(var a=0;a<u.A;a++){o[O[X][0]][a]=o[O[X][1]][a]}}a9(u,V,o,l,k,Z);for(var X=i;X<p;X++){if([N,E,M,m].indexOf(X)==-1){for(var a=0;
1663
+ a<u.A;a++){o[X][a]=0}}}B(o)}}return V}}())
1664
+
1665
1665
  export default UTIF;