ag-psd 30.1.1 → 31.0.0

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 (285) hide show
  1. package/.v8-cache/v24.13.1-x64-cf738c9d/017325ac +0 -0
  2. package/.v8-cache/v24.13.1-x64-cf738c9d/01e5e61b +0 -0
  3. package/.v8-cache/v24.13.1-x64-cf738c9d/043c7b90 +0 -0
  4. package/.v8-cache/v24.13.1-x64-cf738c9d/05135617 +0 -0
  5. package/.v8-cache/v24.13.1-x64-cf738c9d/059f8558 +0 -0
  6. package/.v8-cache/v24.13.1-x64-cf738c9d/06423db9 +0 -0
  7. package/.v8-cache/v24.13.1-x64-cf738c9d/06e765df +0 -0
  8. package/.v8-cache/v24.13.1-x64-cf738c9d/0706ecb8 +0 -0
  9. package/.v8-cache/v24.13.1-x64-cf738c9d/0930679d +0 -0
  10. package/.v8-cache/v24.13.1-x64-cf738c9d/09519a62 +0 -0
  11. package/.v8-cache/v24.13.1-x64-cf738c9d/0a6607b0 +0 -0
  12. package/.v8-cache/v24.13.1-x64-cf738c9d/0ad8fa6e +0 -0
  13. package/.v8-cache/v24.13.1-x64-cf738c9d/0d390e10 +0 -0
  14. package/.v8-cache/v24.13.1-x64-cf738c9d/0db754a7 +0 -0
  15. package/.v8-cache/v24.13.1-x64-cf738c9d/0dfa7b16 +0 -0
  16. package/.v8-cache/v24.13.1-x64-cf738c9d/0e9e09db +0 -0
  17. package/.v8-cache/v24.13.1-x64-cf738c9d/1130885f +0 -0
  18. package/.v8-cache/v24.13.1-x64-cf738c9d/1222cb8c +0 -0
  19. package/.v8-cache/v24.13.1-x64-cf738c9d/15e2c039 +0 -0
  20. package/.v8-cache/v24.13.1-x64-cf738c9d/15f0e479 +0 -0
  21. package/.v8-cache/v24.13.1-x64-cf738c9d/1a2d469d +0 -0
  22. package/.v8-cache/v24.13.1-x64-cf738c9d/1b300c82 +0 -0
  23. package/.v8-cache/v24.13.1-x64-cf738c9d/1bc3d370 +0 -0
  24. package/.v8-cache/v24.13.1-x64-cf738c9d/1e44e5af +0 -0
  25. package/.v8-cache/v24.13.1-x64-cf738c9d/1efa10a1 +0 -0
  26. package/.v8-cache/v24.13.1-x64-cf738c9d/1f6c8743 +0 -0
  27. package/.v8-cache/v24.13.1-x64-cf738c9d/20477c23 +0 -0
  28. package/.v8-cache/v24.13.1-x64-cf738c9d/20b27e40 +0 -0
  29. package/.v8-cache/v24.13.1-x64-cf738c9d/20dfa422 +0 -0
  30. package/.v8-cache/v24.13.1-x64-cf738c9d/257c62ba +0 -0
  31. package/.v8-cache/v24.13.1-x64-cf738c9d/25d60154 +0 -0
  32. package/.v8-cache/v24.13.1-x64-cf738c9d/26f822f3 +0 -0
  33. package/.v8-cache/v24.13.1-x64-cf738c9d/2a19133e +0 -0
  34. package/.v8-cache/v24.13.1-x64-cf738c9d/2a1e2a8d +0 -0
  35. package/.v8-cache/v24.13.1-x64-cf738c9d/2b02fded +0 -0
  36. package/.v8-cache/v24.13.1-x64-cf738c9d/2b069ee0 +0 -0
  37. package/.v8-cache/v24.13.1-x64-cf738c9d/2c76dc0d +0 -0
  38. package/.v8-cache/v24.13.1-x64-cf738c9d/2de09439 +0 -0
  39. package/.v8-cache/v24.13.1-x64-cf738c9d/2deb286a +0 -0
  40. package/.v8-cache/v24.13.1-x64-cf738c9d/2e44f5f0 +0 -0
  41. package/.v8-cache/v24.13.1-x64-cf738c9d/2fb229a9 +0 -0
  42. package/.v8-cache/v24.13.1-x64-cf738c9d/3144b401 +0 -0
  43. package/.v8-cache/v24.13.1-x64-cf738c9d/32018e44 +0 -0
  44. package/.v8-cache/v24.13.1-x64-cf738c9d/341402c3 +0 -0
  45. package/.v8-cache/v24.13.1-x64-cf738c9d/34e0fa2e +0 -0
  46. package/.v8-cache/v24.13.1-x64-cf738c9d/37481985 +0 -0
  47. package/.v8-cache/v24.13.1-x64-cf738c9d/3bbf643e +0 -0
  48. package/.v8-cache/v24.13.1-x64-cf738c9d/3ceff89e +0 -0
  49. package/.v8-cache/v24.13.1-x64-cf738c9d/404f5cdc +0 -0
  50. package/.v8-cache/v24.13.1-x64-cf738c9d/4087aa2b +0 -0
  51. package/.v8-cache/v24.13.1-x64-cf738c9d/4376c1f9 +0 -0
  52. package/.v8-cache/v24.13.1-x64-cf738c9d/44903df4 +0 -0
  53. package/.v8-cache/v24.13.1-x64-cf738c9d/44d58dc8 +0 -0
  54. package/.v8-cache/v24.13.1-x64-cf738c9d/4511bacf +0 -0
  55. package/.v8-cache/v24.13.1-x64-cf738c9d/47da0ce8 +0 -0
  56. package/.v8-cache/v24.13.1-x64-cf738c9d/48cd54a9 +0 -0
  57. package/.v8-cache/v24.13.1-x64-cf738c9d/49d22b79 +0 -0
  58. package/.v8-cache/v24.13.1-x64-cf738c9d/4d938476 +0 -0
  59. package/.v8-cache/v24.13.1-x64-cf738c9d/4ec6d390 +0 -0
  60. package/.v8-cache/v24.13.1-x64-cf738c9d/4f5702bd +0 -0
  61. package/.v8-cache/v24.13.1-x64-cf738c9d/514cc428 +0 -0
  62. package/.v8-cache/v24.13.1-x64-cf738c9d/557d3b42 +0 -0
  63. package/.v8-cache/v24.13.1-x64-cf738c9d/56abbff7 +0 -0
  64. package/.v8-cache/v24.13.1-x64-cf738c9d/57b540ee +0 -0
  65. package/.v8-cache/v24.13.1-x64-cf738c9d/57d3380b +0 -0
  66. package/.v8-cache/v24.13.1-x64-cf738c9d/5e20c081 +0 -0
  67. package/.v8-cache/v24.13.1-x64-cf738c9d/6024ce3f +0 -0
  68. package/.v8-cache/v24.13.1-x64-cf738c9d/61735b23 +0 -0
  69. package/.v8-cache/v24.13.1-x64-cf738c9d/63dbdb75 +0 -0
  70. package/.v8-cache/v24.13.1-x64-cf738c9d/651c4ada +0 -0
  71. package/.v8-cache/v24.13.1-x64-cf738c9d/652a0d59 +0 -0
  72. package/.v8-cache/v24.13.1-x64-cf738c9d/6a0e89ee +0 -0
  73. package/.v8-cache/v24.13.1-x64-cf738c9d/6af33b91 +0 -0
  74. package/.v8-cache/v24.13.1-x64-cf738c9d/6c2562d2 +0 -0
  75. package/.v8-cache/v24.13.1-x64-cf738c9d/6cbfc0ec +0 -0
  76. package/.v8-cache/v24.13.1-x64-cf738c9d/6dae0cfa +0 -0
  77. package/.v8-cache/v24.13.1-x64-cf738c9d/6e2529ce +0 -0
  78. package/.v8-cache/v24.13.1-x64-cf738c9d/6f08372c +0 -0
  79. package/.v8-cache/v24.13.1-x64-cf738c9d/7100ee08 +0 -0
  80. package/.v8-cache/v24.13.1-x64-cf738c9d/71df9cb3 +0 -0
  81. package/.v8-cache/v24.13.1-x64-cf738c9d/72e1d543 +0 -0
  82. package/.v8-cache/v24.13.1-x64-cf738c9d/75519c80 +0 -0
  83. package/.v8-cache/v24.13.1-x64-cf738c9d/75e41e43 +0 -0
  84. package/.v8-cache/v24.13.1-x64-cf738c9d/79bf115c +0 -0
  85. package/.v8-cache/v24.13.1-x64-cf738c9d/7a39347c +0 -0
  86. package/.v8-cache/v24.13.1-x64-cf738c9d/7b83e3d3 +0 -0
  87. package/.v8-cache/v24.13.1-x64-cf738c9d/7cd71bc5 +0 -0
  88. package/.v8-cache/v24.13.1-x64-cf738c9d/7da78512 +0 -0
  89. package/.v8-cache/v24.13.1-x64-cf738c9d/7ea06cea +0 -0
  90. package/.v8-cache/v24.13.1-x64-cf738c9d/82c3b573 +0 -0
  91. package/.v8-cache/v24.13.1-x64-cf738c9d/84c186e4 +0 -0
  92. package/.v8-cache/v24.13.1-x64-cf738c9d/8568576b +0 -0
  93. package/.v8-cache/v24.13.1-x64-cf738c9d/8607bd36 +0 -0
  94. package/.v8-cache/v24.13.1-x64-cf738c9d/87372817 +0 -0
  95. package/.v8-cache/v24.13.1-x64-cf738c9d/87cf2209 +0 -0
  96. package/.v8-cache/v24.13.1-x64-cf738c9d/882aaa05 +0 -0
  97. package/.v8-cache/v24.13.1-x64-cf738c9d/8a4d3de8 +0 -0
  98. package/.v8-cache/v24.13.1-x64-cf738c9d/8e223473 +0 -0
  99. package/.v8-cache/v24.13.1-x64-cf738c9d/92b7aefd +0 -0
  100. package/.v8-cache/v24.13.1-x64-cf738c9d/932f0770 +0 -0
  101. package/.v8-cache/v24.13.1-x64-cf738c9d/937c03a1 +0 -0
  102. package/.v8-cache/v24.13.1-x64-cf738c9d/991e4758 +0 -0
  103. package/.v8-cache/v24.13.1-x64-cf738c9d/9af658fb +0 -0
  104. package/.v8-cache/v24.13.1-x64-cf738c9d/9ed80ba5 +0 -0
  105. package/.v8-cache/v24.13.1-x64-cf738c9d/9f0dc993 +0 -0
  106. package/.v8-cache/v24.13.1-x64-cf738c9d/a19c0c4f +0 -0
  107. package/.v8-cache/v24.13.1-x64-cf738c9d/a6409d95 +0 -0
  108. package/.v8-cache/v24.13.1-x64-cf738c9d/a79a40bb +0 -0
  109. package/.v8-cache/v24.13.1-x64-cf738c9d/a7e80865 +0 -0
  110. package/.v8-cache/v24.13.1-x64-cf738c9d/ac9802c6 +0 -0
  111. package/.v8-cache/v24.13.1-x64-cf738c9d/acc36e66 +0 -0
  112. package/.v8-cache/v24.13.1-x64-cf738c9d/ad11e2dc +0 -0
  113. package/.v8-cache/v24.13.1-x64-cf738c9d/b0c8fcd8 +0 -0
  114. package/.v8-cache/v24.13.1-x64-cf738c9d/b1762958 +0 -0
  115. package/.v8-cache/v24.13.1-x64-cf738c9d/b3c2fab7 +0 -0
  116. package/.v8-cache/v24.13.1-x64-cf738c9d/b5b3329b +0 -0
  117. package/.v8-cache/v24.13.1-x64-cf738c9d/b69ed3a3 +0 -0
  118. package/.v8-cache/v24.13.1-x64-cf738c9d/b806679e +0 -0
  119. package/.v8-cache/v24.13.1-x64-cf738c9d/bc1cdd48 +0 -0
  120. package/.v8-cache/v24.13.1-x64-cf738c9d/bc7ebd1d +0 -0
  121. package/.v8-cache/v24.13.1-x64-cf738c9d/bdff1628 +0 -0
  122. package/.v8-cache/v24.13.1-x64-cf738c9d/c0b789d2 +0 -0
  123. package/.v8-cache/v24.13.1-x64-cf738c9d/c314aece +0 -0
  124. package/.v8-cache/v24.13.1-x64-cf738c9d/c399a5dc +0 -0
  125. package/.v8-cache/v24.13.1-x64-cf738c9d/c681cbc8 +0 -0
  126. package/.v8-cache/v24.13.1-x64-cf738c9d/c6834ffc +0 -0
  127. package/.v8-cache/v24.13.1-x64-cf738c9d/c6f12ed5 +0 -0
  128. package/.v8-cache/v24.13.1-x64-cf738c9d/cb0f0a3d +0 -0
  129. package/.v8-cache/v24.13.1-x64-cf738c9d/cbcb7c95 +0 -0
  130. package/.v8-cache/v24.13.1-x64-cf738c9d/cdd9107c +0 -0
  131. package/.v8-cache/v24.13.1-x64-cf738c9d/cdf2c4a3 +0 -0
  132. package/.v8-cache/v24.13.1-x64-cf738c9d/cfc49f4f +0 -0
  133. package/.v8-cache/v24.13.1-x64-cf738c9d/cff9434a +0 -0
  134. package/.v8-cache/v24.13.1-x64-cf738c9d/d02dd6f7 +0 -0
  135. package/.v8-cache/v24.13.1-x64-cf738c9d/d0507bf3 +0 -0
  136. package/.v8-cache/v24.13.1-x64-cf738c9d/d60fce19 +0 -0
  137. package/.v8-cache/v24.13.1-x64-cf738c9d/d733d619 +0 -0
  138. package/.v8-cache/v24.13.1-x64-cf738c9d/d75b7803 +0 -0
  139. package/.v8-cache/v24.13.1-x64-cf738c9d/dc86f000 +0 -0
  140. package/.v8-cache/v24.13.1-x64-cf738c9d/de74e659 +0 -0
  141. package/.v8-cache/v24.13.1-x64-cf738c9d/defa4f7f +0 -0
  142. package/.v8-cache/v24.13.1-x64-cf738c9d/e03e2acd +0 -0
  143. package/.v8-cache/v24.13.1-x64-cf738c9d/e0e3f52c +0 -0
  144. package/.v8-cache/v24.13.1-x64-cf738c9d/e158d332 +0 -0
  145. package/.v8-cache/v24.13.1-x64-cf738c9d/e6735171 +0 -0
  146. package/.v8-cache/v24.13.1-x64-cf738c9d/e6745c2b +0 -0
  147. package/.v8-cache/v24.13.1-x64-cf738c9d/e6b99945 +0 -0
  148. package/.v8-cache/v24.13.1-x64-cf738c9d/e6d8ceb8 +0 -0
  149. package/.v8-cache/v24.13.1-x64-cf738c9d/e7ffec37 +0 -0
  150. package/.v8-cache/v24.13.1-x64-cf738c9d/ea33b6de +0 -0
  151. package/.v8-cache/v24.13.1-x64-cf738c9d/eaafa3c4 +0 -0
  152. package/.v8-cache/v24.13.1-x64-cf738c9d/ebb50fca +0 -0
  153. package/.v8-cache/v24.13.1-x64-cf738c9d/ec805f2e +0 -0
  154. package/.v8-cache/v24.13.1-x64-cf738c9d/edaef8f1 +0 -0
  155. package/.v8-cache/v24.13.1-x64-cf738c9d/ee4401c8 +0 -0
  156. package/.v8-cache/v24.13.1-x64-cf738c9d/eeeebdfe +0 -0
  157. package/.v8-cache/v24.13.1-x64-cf738c9d/f3d51676 +0 -0
  158. package/.v8-cache/v24.13.1-x64-cf738c9d/f7b50a75 +0 -0
  159. package/.v8-cache/v24.13.1-x64-cf738c9d/fa58ca72 +0 -0
  160. package/.v8-cache/v24.13.1-x64-cf738c9d/fbca6276 +0 -0
  161. package/.v8-cache/v24.13.1-x64-cf738c9d/fc97d72d +0 -0
  162. package/.v8-cache/v24.13.1-x64-cf738c9d/fd0a2987 +0 -0
  163. package/CHANGELOG.md +9 -0
  164. package/README.md +65 -1
  165. package/README_PSD.md +1 -1
  166. package/TODO.md +2 -0
  167. package/dist/abr.d.ts +196 -196
  168. package/dist/abr.js +364 -378
  169. package/dist/abr.js.map +1 -1
  170. package/dist/additionalInfo.d.ts +26 -26
  171. package/dist/additionalInfo.js +3478 -3516
  172. package/dist/additionalInfo.js.map +1 -1
  173. package/dist/ase.d.ts +32 -32
  174. package/dist/ase.js +81 -82
  175. package/dist/ase.js.map +1 -1
  176. package/dist/bundle.js +12380 -12445
  177. package/dist/csh.d.ts +10 -10
  178. package/dist/csh.js +35 -47
  179. package/dist/csh.js.map +1 -1
  180. package/dist/descriptor.d.ts +601 -601
  181. package/dist/descriptor.js +2003 -2038
  182. package/dist/descriptor.js.map +1 -1
  183. package/dist/effectsHelpers.d.ts +5 -5
  184. package/dist/effectsHelpers.js +286 -308
  185. package/dist/effectsHelpers.js.map +1 -1
  186. package/dist/engineData.d.ts +2 -2
  187. package/dist/engineData.js +334 -341
  188. package/dist/engineData.js.map +1 -1
  189. package/dist/engineData2.d.ts +2 -2
  190. package/dist/engineData2.js +409 -411
  191. package/dist/engineData2.js.map +1 -1
  192. package/dist/helpers.d.ts +74 -74
  193. package/dist/helpers.js +353 -348
  194. package/dist/helpers.js.map +1 -1
  195. package/dist/imageResources.d.ts +17 -17
  196. package/dist/imageResources.js +1040 -1079
  197. package/dist/imageResources.js.map +1 -1
  198. package/dist/index.d.ts +20 -22
  199. package/dist/index.js +61 -56
  200. package/dist/index.js.map +1 -1
  201. package/dist/initializeCanvas.d.ts +1 -1
  202. package/dist/initializeCanvas.js +9 -10
  203. package/dist/initializeCanvas.js.map +1 -1
  204. package/dist/jpeg.d.ts +1 -1
  205. package/dist/jpeg.js +1020 -1021
  206. package/dist/jpeg.js.map +1 -1
  207. package/dist/psd.d.ts +1877 -1873
  208. package/dist/psd.js +45 -45
  209. package/dist/psd.js.map +1 -1
  210. package/dist/psdReader.d.ts +52 -45
  211. package/dist/psdReader.js +1385 -1293
  212. package/dist/psdReader.js.map +1 -1
  213. package/dist/psdWriter.d.ts +34 -33
  214. package/dist/psdWriter.js +834 -805
  215. package/dist/psdWriter.js.map +1 -1
  216. package/dist/text.d.ts +179 -179
  217. package/dist/text.js +552 -577
  218. package/dist/text.js.map +1 -1
  219. package/dist/utf8.d.ts +4 -6
  220. package/dist/utf8.js +156 -157
  221. package/dist/utf8.js.map +1 -1
  222. package/dist-es/abr.d.ts +196 -196
  223. package/dist-es/abr.js +364 -374
  224. package/dist-es/abr.js.map +1 -1
  225. package/dist-es/additionalInfo.d.ts +26 -26
  226. package/dist-es/additionalInfo.js +3478 -3510
  227. package/dist-es/additionalInfo.js.map +1 -1
  228. package/dist-es/ase.d.ts +32 -32
  229. package/dist-es/ase.js +81 -78
  230. package/dist-es/ase.js.map +1 -1
  231. package/dist-es/csh.d.ts +10 -10
  232. package/dist-es/csh.js +35 -43
  233. package/dist-es/csh.js.map +1 -1
  234. package/dist-es/descriptor.d.ts +601 -601
  235. package/dist-es/descriptor.js +2003 -2005
  236. package/dist-es/descriptor.js.map +1 -1
  237. package/dist-es/effectsHelpers.d.ts +5 -5
  238. package/dist-es/effectsHelpers.js +286 -303
  239. package/dist-es/effectsHelpers.js.map +1 -1
  240. package/dist-es/engineData.d.ts +2 -2
  241. package/dist-es/engineData.js +334 -336
  242. package/dist-es/engineData.js.map +1 -1
  243. package/dist-es/engineData2.d.ts +2 -2
  244. package/dist-es/engineData2.js +409 -407
  245. package/dist-es/engineData2.js.map +1 -1
  246. package/dist-es/helpers.d.ts +74 -74
  247. package/dist-es/helpers.js +353 -330
  248. package/dist-es/helpers.js.map +1 -1
  249. package/dist-es/imageResources.d.ts +17 -17
  250. package/dist-es/imageResources.js +1040 -1076
  251. package/dist-es/imageResources.js.map +1 -1
  252. package/dist-es/index.d.ts +20 -22
  253. package/dist-es/index.js +61 -33
  254. package/dist-es/index.js.map +1 -1
  255. package/dist-es/initializeCanvas.d.ts +1 -1
  256. package/dist-es/initializeCanvas.js +9 -6
  257. package/dist-es/initializeCanvas.js.map +1 -1
  258. package/dist-es/jpeg.d.ts +1 -1
  259. package/dist-es/jpeg.js +1020 -1017
  260. package/dist-es/jpeg.js.map +1 -1
  261. package/dist-es/psd.d.ts +1877 -1873
  262. package/dist-es/psd.js +45 -42
  263. package/dist-es/psd.js.map +1 -1
  264. package/dist-es/psdReader.d.ts +52 -45
  265. package/dist-es/psdReader.js +1385 -1255
  266. package/dist-es/psdReader.js.map +1 -1
  267. package/dist-es/psdWriter.d.ts +34 -33
  268. package/dist-es/psdWriter.js +834 -776
  269. package/dist-es/psdWriter.js.map +1 -1
  270. package/dist-es/text.d.ts +179 -179
  271. package/dist-es/text.js +552 -572
  272. package/dist-es/text.js.map +1 -1
  273. package/dist-es/utf8.d.ts +4 -6
  274. package/dist-es/utf8.js +156 -150
  275. package/dist-es/utf8.js.map +1 -1
  276. package/package.json +4 -3
  277. package/publish.js +24 -0
  278. package/src/additionalInfo.ts +15 -11
  279. package/src/helpers.ts +13 -3
  280. package/src/index.ts +4 -6
  281. package/src/psd.ts +4 -0
  282. package/src/psdReader.ts +136 -43
  283. package/src/psdWriter.ts +118 -24
  284. package/tsconfig-es6.json +2 -1
  285. package/tsconfig.json +5 -3
@@ -1,1080 +1,1041 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.resourceHandlersMap = exports.resourceHandlers = void 0;
15
- var base64_js_1 = require("base64-js");
16
- var psdReader_1 = require("./psdReader");
17
- var psdWriter_1 = require("./psdWriter");
18
- var helpers_1 = require("./helpers");
19
- var utf8_1 = require("./utf8");
20
- var descriptor_1 = require("./descriptor");
21
- exports.resourceHandlers = [];
22
- exports.resourceHandlersMap = {};
23
- function addHandler(key, has, read, write) {
24
- var handler = { key: key, has: has, read: read, write: write };
25
- exports.resourceHandlers.push(handler);
26
- exports.resourceHandlersMap[handler.key] = handler;
27
- }
28
- var LOG_MOCK_HANDLERS = false;
29
- var RESOLUTION_UNITS = [undefined, 'PPI', 'PPCM'];
30
- var MEASUREMENT_UNITS = [undefined, 'Inches', 'Centimeters', 'Points', 'Picas', 'Columns'];
31
- var hex = '0123456789abcdef';
32
- function charToNibble(code) {
33
- return code <= 57 ? code - 48 : code - 87;
34
- }
35
- function byteAt(value, index) {
36
- return (charToNibble(value.charCodeAt(index)) << 4) | charToNibble(value.charCodeAt(index + 1));
37
- }
38
- function readUtf8String(reader, length) {
39
- var buffer = (0, psdReader_1.readBytes)(reader, length);
40
- return (0, utf8_1.decodeString)(buffer);
41
- }
42
- function writeUtf8String(writer, value) {
43
- var buffer = (0, utf8_1.encodeString)(value);
44
- (0, psdWriter_1.writeBytes)(writer, buffer);
45
- }
46
- function readEncodedString(reader) {
47
- var length = (0, psdReader_1.readUint8)(reader);
48
- var buffer = (0, psdReader_1.readBytes)(reader, length);
49
- var notAscii = false;
50
- for (var i = 0; i < buffer.byteLength; i++) {
51
- if (buffer[i] & 0x80) {
52
- notAscii = true;
53
- break;
54
- }
55
- }
56
- if (notAscii) {
57
- var decoder = new TextDecoder('gbk');
58
- return decoder.decode(buffer);
59
- }
60
- else {
61
- return (0, utf8_1.decodeString)(buffer);
62
- }
63
- }
64
- function writeEncodedString(writer, value) {
65
- var ascii = '';
66
- for (var i = 0, code = value.codePointAt(i++); code !== undefined; code = value.codePointAt(i++)) {
67
- ascii += code > 0x7f ? '?' : String.fromCodePoint(code);
68
- }
69
- var buffer = (0, utf8_1.encodeString)(ascii);
70
- (0, psdWriter_1.writeUint8)(writer, buffer.byteLength);
71
- (0, psdWriter_1.writeBytes)(writer, buffer);
72
- }
73
- helpers_1.MOCK_HANDLERS && addHandler(1028, // IPTC-NAA record
74
- function (// IPTC-NAA record
75
- target) { return target._ir1028 !== undefined; }, function (reader, target, left) {
76
- LOG_MOCK_HANDLERS && console.log('image resource 1028', left());
77
- target._ir1028 = (0, psdReader_1.readBytes)(reader, left());
78
- }, function (writer, target) {
79
- (0, psdWriter_1.writeBytes)(writer, target._ir1028);
80
- });
81
- addHandler(1061, function (target) { return target.captionDigest !== undefined; }, function (reader, target) {
82
- var captionDigest = '';
83
- for (var i = 0; i < 16; i++) {
84
- var byte = (0, psdReader_1.readUint8)(reader);
85
- captionDigest += hex[byte >> 4];
86
- captionDigest += hex[byte & 0xf];
87
- }
88
- target.captionDigest = captionDigest;
89
- }, function (writer, target) {
90
- for (var i = 0; i < 16; i++) {
91
- (0, psdWriter_1.writeUint8)(writer, byteAt(target.captionDigest, i * 2));
92
- }
93
- });
94
- addHandler(1060, function (target) { return target.xmpMetadata !== undefined; }, function (reader, target, left) {
95
- target.xmpMetadata = readUtf8String(reader, left());
96
- }, function (writer, target) {
97
- writeUtf8String(writer, target.xmpMetadata);
98
- });
99
- var Inte = (0, helpers_1.createEnum)('Inte', 'perceptual', {
100
- 'perceptual': 'Img ',
101
- 'saturation': 'Grp ',
102
- 'relative colorimetric': 'Clrm',
103
- 'absolute colorimetric': 'AClr',
104
- });
105
- helpers_1.MOCK_HANDLERS && addHandler(1085, // Windows DEVMODE. Variable OS specific info for Windows.
106
- function (// Windows DEVMODE. Variable OS specific info for Windows.
107
- target) { return target._ir1085 !== undefined; }, function (reader, target, left) {
108
- target._ir1085 = (0, psdReader_1.readBytes)(reader, left());
109
- }, function (writer, target) {
110
- (0, psdWriter_1.writeBytes)(writer, target._ir1085);
111
- });
112
- addHandler(1082, function (target) { return target.printInformation !== undefined; }, function (reader, target) {
113
- var _a, _b;
114
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
115
- target.printInformation = {
116
- printerName: desc.printerName || '',
117
- renderingIntent: Inte.decode((_a = desc.Inte) !== null && _a !== void 0 ? _a : 'Inte.Img '),
118
- };
119
- var info = target.printInformation;
120
- if (desc.PstS !== undefined)
121
- info.printerManagesColors = desc.PstS;
122
- if (desc['Nm '] !== undefined)
123
- info.printerProfile = desc['Nm '];
124
- if (desc.MpBl !== undefined)
125
- info.blackPointCompensation = desc.MpBl;
126
- if (desc.printSixteenBit !== undefined)
127
- info.printSixteenBit = desc.printSixteenBit;
128
- if (desc.hardProof !== undefined)
129
- info.hardProof = desc.hardProof;
130
- if (desc.printProofSetup) {
131
- if ('Bltn' in desc.printProofSetup) {
132
- info.proofSetup = { builtin: desc.printProofSetup.Bltn.split('.')[1] };
133
- }
134
- else {
135
- info.proofSetup = {
136
- profile: desc.printProofSetup.profile,
137
- renderingIntent: Inte.decode((_b = desc.printProofSetup.Inte) !== null && _b !== void 0 ? _b : 'Inte.Img '),
138
- blackPointCompensation: !!desc.printProofSetup.MpBl,
139
- paperWhite: !!desc.printProofSetup.paperWhite,
140
- };
141
- }
142
- }
143
- }, function (writer, target) {
144
- var _a, _b;
145
- var info = target.printInformation;
146
- var desc = {};
147
- if (info.printerManagesColors) {
148
- desc.PstS = true;
149
- }
150
- else {
151
- if (info.hardProof !== undefined)
152
- desc.hardProof = !!info.hardProof;
153
- desc.ClrS = 'ClrS.RGBC'; // TODO: ???
154
- desc['Nm '] = (_a = info.printerProfile) !== null && _a !== void 0 ? _a : 'CIE RGB';
155
- }
156
- desc.Inte = Inte.encode(info.renderingIntent);
157
- if (!info.printerManagesColors)
158
- desc.MpBl = !!info.blackPointCompensation;
159
- desc.printSixteenBit = !!info.printSixteenBit;
160
- desc.printerName = info.printerName || '';
161
- if (info.proofSetup && 'profile' in info.proofSetup) {
162
- desc.printProofSetup = {
163
- profile: info.proofSetup.profile || '',
164
- Inte: Inte.encode(info.proofSetup.renderingIntent),
165
- MpBl: !!info.proofSetup.blackPointCompensation,
166
- paperWhite: !!info.proofSetup.paperWhite,
167
- };
168
- }
169
- else {
170
- desc.printProofSetup = {
171
- Bltn: ((_b = info.proofSetup) === null || _b === void 0 ? void 0 : _b.builtin) ? "builtinProof.".concat(info.proofSetup.builtin) : 'builtinProof.proofCMYK',
172
- };
173
- }
174
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'printOutput', desc);
175
- });
176
- helpers_1.MOCK_HANDLERS && addHandler(1083, // Print style
177
- function (// Print style
178
- target) { return target._ir1083 !== undefined; }, function (reader, target, left) {
179
- LOG_MOCK_HANDLERS && console.log('image resource 1083', left());
180
- target._ir1083 = (0, psdReader_1.readBytes)(reader, left());
181
- // TODO:
182
- // const desc = readVersionAndDescriptor(reader);
183
- // console.log('1083', require('util').inspect(desc, false, 99, true));
184
- }, function (writer, target) {
185
- (0, psdWriter_1.writeBytes)(writer, target._ir1083);
186
- });
187
- addHandler(1005, function (target) { return target.resolutionInfo !== undefined; }, function (reader, target) {
188
- var horizontalResolution = (0, psdReader_1.readFixedPoint32)(reader);
189
- var horizontalResolutionUnit = (0, psdReader_1.readUint16)(reader);
190
- var widthUnit = (0, psdReader_1.readUint16)(reader);
191
- var verticalResolution = (0, psdReader_1.readFixedPoint32)(reader);
192
- var verticalResolutionUnit = (0, psdReader_1.readUint16)(reader);
193
- var heightUnit = (0, psdReader_1.readUint16)(reader);
194
- target.resolutionInfo = {
195
- horizontalResolution: horizontalResolution,
196
- horizontalResolutionUnit: RESOLUTION_UNITS[horizontalResolutionUnit] || 'PPI',
197
- widthUnit: MEASUREMENT_UNITS[widthUnit] || 'Inches',
198
- verticalResolution: verticalResolution,
199
- verticalResolutionUnit: RESOLUTION_UNITS[verticalResolutionUnit] || 'PPI',
200
- heightUnit: MEASUREMENT_UNITS[heightUnit] || 'Inches',
201
- };
202
- }, function (writer, target) {
203
- var info = target.resolutionInfo;
204
- (0, psdWriter_1.writeFixedPoint32)(writer, info.horizontalResolution || 0);
205
- (0, psdWriter_1.writeUint16)(writer, Math.max(1, RESOLUTION_UNITS.indexOf(info.horizontalResolutionUnit)));
206
- (0, psdWriter_1.writeUint16)(writer, Math.max(1, MEASUREMENT_UNITS.indexOf(info.widthUnit)));
207
- (0, psdWriter_1.writeFixedPoint32)(writer, info.verticalResolution || 0);
208
- (0, psdWriter_1.writeUint16)(writer, Math.max(1, RESOLUTION_UNITS.indexOf(info.verticalResolutionUnit)));
209
- (0, psdWriter_1.writeUint16)(writer, Math.max(1, MEASUREMENT_UNITS.indexOf(info.heightUnit)));
210
- });
211
- var printScaleStyles = ['centered', 'size to fit', 'user defined'];
212
- addHandler(1062, function (target) { return target.printScale !== undefined; }, function (reader, target) {
213
- target.printScale = {
214
- style: printScaleStyles[(0, psdReader_1.readInt16)(reader)],
215
- x: (0, psdReader_1.readFloat32)(reader),
216
- y: (0, psdReader_1.readFloat32)(reader),
217
- scale: (0, psdReader_1.readFloat32)(reader),
218
- };
219
- }, function (writer, target) {
220
- var _a = target.printScale, style = _a.style, x = _a.x, y = _a.y, scale = _a.scale;
221
- (0, psdWriter_1.writeInt16)(writer, Math.max(0, printScaleStyles.indexOf(style)));
222
- (0, psdWriter_1.writeFloat32)(writer, x || 0);
223
- (0, psdWriter_1.writeFloat32)(writer, y || 0);
224
- (0, psdWriter_1.writeFloat32)(writer, scale || 0);
225
- });
226
- addHandler(1006, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
227
- if (!target.alphaChannelNames) { // skip if the unicode versions are already read
228
- target.alphaChannelNames = [];
229
- while (left() > 0) {
230
- var value = readEncodedString(reader);
231
- // const value = readPascalString(reader, 1);
232
- target.alphaChannelNames.push(value);
233
- }
234
- }
235
- else {
236
- (0, psdReader_1.skipBytes)(reader, left());
237
- }
238
- }, function (writer, target) {
239
- for (var _i = 0, _a = target.alphaChannelNames; _i < _a.length; _i++) {
240
- var name_1 = _a[_i];
241
- writeEncodedString(writer, name_1);
242
- // writePascalString(writer, name, 1);
243
- }
244
- });
245
- addHandler(1045, function (target) { return target.alphaChannelNames !== undefined; }, function (reader, target, left) {
246
- target.alphaChannelNames = [];
247
- while (left() > 0) {
248
- target.alphaChannelNames.push((0, psdReader_1.readUnicodeString)(reader));
249
- }
250
- }, function (writer, target) {
251
- for (var _i = 0, _a = target.alphaChannelNames; _i < _a.length; _i++) {
252
- var name_2 = _a[_i];
253
- (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, name_2);
254
- }
255
- });
256
- helpers_1.MOCK_HANDLERS && addHandler(1077, function (target) { return target._ir1077 !== undefined; }, function (reader, target, left) {
257
- LOG_MOCK_HANDLERS && console.log('image resource 1077', left());
258
- target._ir1077 = (0, psdReader_1.readBytes)(reader, left());
259
- }, function (writer, target) {
260
- (0, psdWriter_1.writeBytes)(writer, target._ir1077);
261
- });
262
- addHandler(1053, function (target) { return target.alphaIdentifiers !== undefined; }, function (reader, target, left) {
263
- target.alphaIdentifiers = [];
264
- while (left() >= 4) {
265
- target.alphaIdentifiers.push((0, psdReader_1.readUint32)(reader));
266
- }
267
- }, function (writer, target) {
268
- for (var _i = 0, _a = target.alphaIdentifiers; _i < _a.length; _i++) {
269
- var id = _a[_i];
270
- (0, psdWriter_1.writeUint32)(writer, id);
271
- }
272
- });
273
- addHandler(1010, function (target) { return target.backgroundColor !== undefined; }, function (reader, target) { return target.backgroundColor = (0, psdReader_1.readColor)(reader); }, function (writer, target) { return (0, psdWriter_1.writeColor)(writer, target.backgroundColor); });
274
- addHandler(1037, function (target) { return target.globalAngle !== undefined; }, function (reader, target) { return target.globalAngle = (0, psdReader_1.readInt32)(reader); }, function (writer, target) { return (0, psdWriter_1.writeInt32)(writer, target.globalAngle); });
275
- addHandler(1049, function (target) { return target.globalAltitude !== undefined; }, function (reader, target) { return target.globalAltitude = (0, psdReader_1.readUint32)(reader); }, function (writer, target) { return (0, psdWriter_1.writeUint32)(writer, target.globalAltitude); });
276
- addHandler(1011, function (target) { return target.printFlags !== undefined; }, function (reader, target) {
277
- target.printFlags = {
278
- labels: !!(0, psdReader_1.readUint8)(reader),
279
- cropMarks: !!(0, psdReader_1.readUint8)(reader),
280
- colorBars: !!(0, psdReader_1.readUint8)(reader),
281
- registrationMarks: !!(0, psdReader_1.readUint8)(reader),
282
- negative: !!(0, psdReader_1.readUint8)(reader),
283
- flip: !!(0, psdReader_1.readUint8)(reader),
284
- interpolate: !!(0, psdReader_1.readUint8)(reader),
285
- caption: !!(0, psdReader_1.readUint8)(reader),
286
- printFlags: !!(0, psdReader_1.readUint8)(reader),
287
- };
288
- }, function (writer, target) {
289
- var flags = target.printFlags;
290
- (0, psdWriter_1.writeUint8)(writer, flags.labels ? 1 : 0);
291
- (0, psdWriter_1.writeUint8)(writer, flags.cropMarks ? 1 : 0);
292
- (0, psdWriter_1.writeUint8)(writer, flags.colorBars ? 1 : 0);
293
- (0, psdWriter_1.writeUint8)(writer, flags.registrationMarks ? 1 : 0);
294
- (0, psdWriter_1.writeUint8)(writer, flags.negative ? 1 : 0);
295
- (0, psdWriter_1.writeUint8)(writer, flags.flip ? 1 : 0);
296
- (0, psdWriter_1.writeUint8)(writer, flags.interpolate ? 1 : 0);
297
- (0, psdWriter_1.writeUint8)(writer, flags.caption ? 1 : 0);
298
- (0, psdWriter_1.writeUint8)(writer, flags.printFlags ? 1 : 0);
299
- });
300
- addHandler(1034, // Copyright flag
301
- function (// Copyright flag
302
- target) { return target.copyrighted !== undefined; }, function (reader, target) {
303
- target.copyrighted = !!(0, psdReader_1.readUint8)(reader);
304
- }, function (writer, target) {
305
- (0, psdWriter_1.writeUint8)(writer, target.copyrighted ? 1 : 0);
306
- });
307
- addHandler(1035, // URL
308
- function (// URL
309
- target) { return target.url !== undefined; }, function (reader, target, left) {
310
- target.url = (0, psdReader_1.readAsciiString)(reader, left());
311
- }, function (writer, target) {
312
- (0, psdWriter_1.writeAsciiString)(writer, target.url);
313
- });
314
- helpers_1.MOCK_HANDLERS && addHandler(10000, // Print flags
315
- function (// Print flags
316
- target) { return target._ir10000 !== undefined; }, function (reader, target, left) {
317
- LOG_MOCK_HANDLERS && console.log('image resource 10000', left());
318
- target._ir10000 = (0, psdReader_1.readBytes)(reader, left());
319
- }, function (writer, target) {
320
- (0, psdWriter_1.writeBytes)(writer, target._ir10000);
321
- });
322
- helpers_1.MOCK_HANDLERS && addHandler(1013, // Color halftoning
323
- function (// Color halftoning
324
- target) { return target._ir1013 !== undefined; }, function (reader, target, left) {
325
- LOG_MOCK_HANDLERS && console.log('image resource 1013', left());
326
- target._ir1013 = (0, psdReader_1.readBytes)(reader, left());
327
- }, function (writer, target) {
328
- (0, psdWriter_1.writeBytes)(writer, target._ir1013);
329
- });
330
- helpers_1.MOCK_HANDLERS && addHandler(1016, // Color transfer functions
331
- function (// Color transfer functions
332
- target) { return target._ir1016 !== undefined; }, function (reader, target, left) {
333
- LOG_MOCK_HANDLERS && console.log('image resource 1016', left());
334
- target._ir1016 = (0, psdReader_1.readBytes)(reader, left());
335
- }, function (writer, target) {
336
- (0, psdWriter_1.writeBytes)(writer, target._ir1016);
337
- });
338
- addHandler(1080, // Count Information
339
- function (// Count Information
340
- target) { return target.countInformation !== undefined; }, function (reader, target) {
341
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
342
- target.countInformation = desc.countGroupList.map(function (g) { return ({
343
- color: { r: g['Rd '], g: g['Grn '], b: g['Bl '] },
344
- name: g['Nm '],
345
- size: g['Rds '],
346
- fontSize: g.fontSize,
347
- visible: g.Vsbl,
348
- points: g.countObjectList.map(function (p) { return ({ x: p['X '], y: p['Y '] }); }),
349
- }); });
350
- }, function (writer, target) {
351
- var desc = {
352
- Vrsn: 1,
353
- countGroupList: target.countInformation.map(function (g) { return ({
354
- 'Rd ': g.color.r,
355
- 'Grn ': g.color.g,
356
- 'Bl ': g.color.b,
357
- 'Nm ': g.name,
358
- 'Rds ': g.size,
359
- fontSize: g.fontSize,
360
- Vsbl: g.visible,
361
- countObjectList: g.points.map(function (p) { return ({ 'X ': p.x, 'Y ': p.y }); }),
362
- }); }),
363
- };
364
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'Cnt ', desc);
365
- });
366
- addHandler(1024, function (target) { return target.layerState !== undefined; }, function (reader, target) { return target.layerState = (0, psdReader_1.readUint16)(reader); }, function (writer, target) { return (0, psdWriter_1.writeUint16)(writer, target.layerState); });
367
- addHandler(1026, function (target) { return target.layersGroup !== undefined; }, function (reader, target, left) {
368
- target.layersGroup = [];
369
- while (left() > 0) {
370
- target.layersGroup.push((0, psdReader_1.readUint16)(reader));
371
- }
372
- }, function (writer, target) {
373
- for (var _i = 0, _a = target.layersGroup; _i < _a.length; _i++) {
374
- var g = _a[_i];
375
- (0, psdWriter_1.writeUint16)(writer, g);
376
- }
377
- });
378
- addHandler(1072, function (target) { return target.layerGroupsEnabledId !== undefined; }, function (reader, target, left) {
379
- target.layerGroupsEnabledId = [];
380
- while (left() > 0) {
381
- target.layerGroupsEnabledId.push((0, psdReader_1.readUint8)(reader));
382
- }
383
- }, function (writer, target) {
384
- for (var _i = 0, _a = target.layerGroupsEnabledId; _i < _a.length; _i++) {
385
- var id = _a[_i];
386
- (0, psdWriter_1.writeUint8)(writer, id);
387
- }
388
- });
389
- addHandler(1069, function (target) { return target.layerSelectionIds !== undefined; }, function (reader, target) {
390
- var count = (0, psdReader_1.readUint16)(reader);
391
- target.layerSelectionIds = [];
392
- while (count--) {
393
- target.layerSelectionIds.push((0, psdReader_1.readUint32)(reader));
394
- }
395
- }, function (writer, target) {
396
- (0, psdWriter_1.writeUint16)(writer, target.layerSelectionIds.length);
397
- for (var _i = 0, _a = target.layerSelectionIds; _i < _a.length; _i++) {
398
- var id = _a[_i];
399
- (0, psdWriter_1.writeUint32)(writer, id);
400
- }
401
- });
402
- addHandler(1032, function (target) { return target.gridAndGuidesInformation !== undefined; }, function (reader, target) {
403
- var version = (0, psdReader_1.readUint32)(reader);
404
- var horizontal = (0, psdReader_1.readUint32)(reader);
405
- var vertical = (0, psdReader_1.readUint32)(reader);
406
- var count = (0, psdReader_1.readUint32)(reader);
407
- if (version !== 1)
408
- throw new Error("Invalid 1032 resource version: ".concat(version));
409
- target.gridAndGuidesInformation = {
410
- grid: { horizontal: horizontal, vertical: vertical },
411
- guides: [],
412
- };
413
- for (var i = 0; i < count; i++) {
414
- target.gridAndGuidesInformation.guides.push({
415
- location: (0, psdReader_1.readUint32)(reader) / 32,
416
- direction: (0, psdReader_1.readUint8)(reader) ? 'horizontal' : 'vertical'
417
- });
418
- }
419
- }, function (writer, target) {
420
- var info = target.gridAndGuidesInformation;
421
- var grid = info.grid || { horizontal: 18 * 32, vertical: 18 * 32 };
422
- var guides = info.guides || [];
423
- (0, psdWriter_1.writeUint32)(writer, 1);
424
- (0, psdWriter_1.writeUint32)(writer, grid.horizontal);
425
- (0, psdWriter_1.writeUint32)(writer, grid.vertical);
426
- (0, psdWriter_1.writeUint32)(writer, guides.length);
427
- for (var _i = 0, guides_1 = guides; _i < guides_1.length; _i++) {
428
- var g = guides_1[_i];
429
- (0, psdWriter_1.writeUint32)(writer, g.location * 32);
430
- (0, psdWriter_1.writeUint8)(writer, g.direction === 'horizontal' ? 1 : 0);
431
- }
432
- });
433
- addHandler(1065, // Layer Comps
434
- function (// Layer Comps
435
- target) { return target.layerComps !== undefined; }, function (reader, target) {
436
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
437
- // console.log('CompList', require('util').inspect(desc, false, 99, true));
438
- target.layerComps = { list: [] };
439
- for (var _i = 0, _a = desc.list; _i < _a.length; _i++) {
440
- var item = _a[_i];
441
- target.layerComps.list.push({
442
- id: item.compID,
443
- name: item['Nm '],
444
- capturedInfo: item.capturedInfo,
445
- });
446
- if ('comment' in item)
447
- target.layerComps.list[target.layerComps.list.length - 1].comment = item.comment;
448
- }
449
- if ('lastAppliedComp' in desc)
450
- target.layerComps.lastApplied = desc.lastAppliedComp;
451
- }, function (writer, target) {
452
- var layerComps = target.layerComps;
453
- var desc = { list: [] };
454
- for (var _i = 0, _a = layerComps.list; _i < _a.length; _i++) {
455
- var item = _a[_i];
456
- var t = {};
457
- t._classID = 'Comp';
458
- t['Nm '] = item.name;
459
- if ('comment' in item)
460
- t.comment = item.comment;
461
- t.compID = item.id;
462
- t.capturedInfo = item.capturedInfo;
463
- desc.list.push(t);
464
- }
465
- if ('lastApplied' in layerComps)
466
- desc.lastAppliedComp = layerComps.lastApplied;
467
- // console.log('CompList', require('util').inspect(desc, false, 99, true));
468
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'CompList', desc);
469
- });
470
- helpers_1.MOCK_HANDLERS && addHandler(1092, // ???
471
- function (// ???
472
- target) { return target._ir1092 !== undefined; }, function (reader, target, left) {
473
- LOG_MOCK_HANDLERS && console.log('image resource 1092', left());
474
- // 16 bytes, seems to be 4 integers
475
- target._ir1092 = (0, psdReader_1.readBytes)(reader, left());
476
- }, function (writer, target) {
477
- (0, psdWriter_1.writeBytes)(writer, target._ir1092);
478
- });
479
- // 0 - normal, 7 - multiply, 8 - screen, 23 - difference
480
- var onionSkinsBlendModes = [
481
- 'normal', undefined, undefined, undefined, undefined, undefined, undefined, 'multiply',
482
- 'screen', undefined, undefined, undefined, undefined, undefined, undefined, undefined,
483
- undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'difference',
484
- ];
485
- addHandler(1078, // Onion Skins
486
- function (// Onion Skins
487
- target) { return target.onionSkins !== undefined; }, function (reader, target) {
488
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
489
- // console.log('1078', require('util').inspect(desc, false, 99, true));
490
- target.onionSkins = {
491
- enabled: desc.enab,
492
- framesBefore: desc.numBefore,
493
- framesAfter: desc.numAfter,
494
- frameSpacing: desc.Spcn,
495
- minOpacity: desc.minOpacity / 100,
496
- maxOpacity: desc.maxOpacity / 100,
497
- blendMode: onionSkinsBlendModes[desc.BlnM] || 'normal',
498
- };
499
- }, function (writer, target) {
500
- var onionSkins = target.onionSkins;
501
- var desc = {
502
- Vrsn: 1,
503
- enab: onionSkins.enabled,
504
- numBefore: onionSkins.framesBefore,
505
- numAfter: onionSkins.framesAfter,
506
- Spcn: onionSkins.frameSpacing,
507
- minOpacity: (onionSkins.minOpacity * 100) | 0,
508
- maxOpacity: (onionSkins.maxOpacity * 100) | 0,
509
- BlnM: Math.max(0, onionSkinsBlendModes.indexOf(onionSkins.blendMode)),
510
- };
511
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
512
- });
513
- addHandler(1075, // Timeline Information
514
- function (// Timeline Information
515
- target) { return target.timelineInformation !== undefined; }, function (reader, target) {
516
- var _a, _b;
517
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
518
- target.timelineInformation = {
519
- enabled: desc.enab,
520
- frameStep: (0, descriptor_1.frac)(desc.frameStep),
521
- frameRate: desc.frameRate,
522
- time: (0, descriptor_1.frac)(desc.time),
523
- duration: (0, descriptor_1.frac)(desc.duration),
524
- workInTime: (0, descriptor_1.frac)(desc.workInTime),
525
- workOutTime: (0, descriptor_1.frac)(desc.workOutTime),
526
- repeats: desc.LCnt,
527
- hasMotion: desc.hasMotion,
528
- globalTracks: (0, descriptor_1.parseTrackList)(desc.globalTrackList, !!reader.logMissingFeatures),
529
- };
530
- if ((_b = (_a = desc.audioClipGroupList) === null || _a === void 0 ? void 0 : _a.audioClipGroupList) === null || _b === void 0 ? void 0 : _b.length) {
531
- target.timelineInformation.audioClipGroups = desc.audioClipGroupList.audioClipGroupList.map(function (g) { return ({
532
- id: g.groupID,
533
- muted: g.muted,
534
- audioClips: g.audioClipList.map(function (_a) {
535
- var clipID = _a.clipID, timeScope = _a.timeScope, muted = _a.muted, audioLevel = _a.audioLevel, frameReader = _a.frameReader;
536
- return ({
537
- id: clipID,
538
- start: (0, descriptor_1.frac)(timeScope.Strt),
539
- duration: (0, descriptor_1.frac)(timeScope.duration),
540
- inTime: (0, descriptor_1.frac)(timeScope.inTime),
541
- outTime: (0, descriptor_1.frac)(timeScope.outTime),
542
- muted: muted,
543
- audioLevel: audioLevel,
544
- frameReader: {
545
- type: frameReader.frameReaderType,
546
- mediaDescriptor: frameReader.mediaDescriptor,
547
- link: {
548
- name: frameReader['Lnk ']['Nm '],
549
- fullPath: frameReader['Lnk '].fullPath,
550
- relativePath: frameReader['Lnk '].relPath,
551
- },
552
- },
553
- });
554
- }),
555
- }); });
556
- }
557
- }, function (writer, target) {
558
- var _a;
559
- var timeline = target.timelineInformation;
560
- var desc = {
561
- Vrsn: 1,
562
- enab: timeline.enabled,
563
- frameStep: timeline.frameStep,
564
- frameRate: timeline.frameRate,
565
- time: timeline.time,
566
- duration: timeline.duration,
567
- workInTime: timeline.workInTime,
568
- workOutTime: timeline.workOutTime,
569
- LCnt: timeline.repeats,
570
- globalTrackList: (0, descriptor_1.serializeTrackList)(timeline.globalTracks),
571
- audioClipGroupList: {
572
- audioClipGroupList: (_a = timeline.audioClipGroups) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({
573
- groupID: a.id,
574
- muted: a.muted,
575
- audioClipList: a.audioClips.map(function (c) { return ({
576
- clipID: c.id,
577
- timeScope: {
578
- Vrsn: 1,
579
- Strt: c.start,
580
- duration: c.duration,
581
- inTime: c.inTime,
582
- outTime: c.outTime,
583
- },
584
- frameReader: {
585
- frameReaderType: c.frameReader.type,
586
- descVersion: 1,
587
- 'Lnk ': {
588
- descVersion: 1,
589
- 'Nm ': c.frameReader.link.name,
590
- fullPath: c.frameReader.link.fullPath,
591
- relPath: c.frameReader.link.relativePath,
592
- },
593
- mediaDescriptor: c.frameReader.mediaDescriptor,
594
- },
595
- muted: c.muted,
596
- audioLevel: c.audioLevel,
597
- }); }),
598
- }); }),
599
- },
600
- hasMotion: timeline.hasMotion,
601
- };
602
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'anim');
603
- });
604
- addHandler(1076, // Sheet Disclosure
605
- function (// Sheet Disclosure
606
- target) { return target.sheetDisclosure !== undefined; }, function (reader, target) {
607
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
608
- target.sheetDisclosure = {};
609
- if (desc.sheetTimelineOptions) {
610
- target.sheetDisclosure.sheetTimelineOptions = desc.sheetTimelineOptions.map(function (o) { return ({
611
- sheetID: o.sheetID,
612
- sheetDisclosed: o.sheetDisclosed,
613
- lightsDisclosed: o.lightsDisclosed,
614
- meshesDisclosed: o.meshesDisclosed,
615
- materialsDisclosed: o.materialsDisclosed,
616
- }); });
617
- }
618
- }, function (writer, target) {
619
- var disclosure = target.sheetDisclosure;
620
- var desc = { Vrsn: 1 };
621
- if (disclosure.sheetTimelineOptions) {
622
- desc.sheetTimelineOptions = disclosure.sheetTimelineOptions.map(function (d) { return ({
623
- Vrsn: 2,
624
- sheetID: d.sheetID,
625
- sheetDisclosed: d.sheetDisclosed,
626
- lightsDisclosed: d.lightsDisclosed,
627
- meshesDisclosed: d.meshesDisclosed,
628
- materialsDisclosed: d.materialsDisclosed,
629
- }); });
630
- }
631
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
632
- });
633
- addHandler(1054, // URL List
634
- function (// URL List
635
- target) { return target.urlsList !== undefined; }, function (reader, target) {
636
- var count = (0, psdReader_1.readUint32)(reader);
637
- target.urlsList = [];
638
- for (var i = 0; i < count; i++) {
639
- var long = (0, psdReader_1.readSignature)(reader);
640
- if (long !== 'slic' && reader.throwForMissingFeatures)
641
- throw new Error('Unknown long');
642
- var id = (0, psdReader_1.readUint32)(reader);
643
- var url = (0, psdReader_1.readUnicodeString)(reader);
644
- target.urlsList.push({ id: id, url: url, ref: 'slice' });
645
- }
646
- }, function (writer, target) {
647
- var list = target.urlsList;
648
- (0, psdWriter_1.writeUint32)(writer, list.length);
649
- for (var i = 0; i < list.length; i++) {
650
- (0, psdWriter_1.writeSignature)(writer, 'slic');
651
- (0, psdWriter_1.writeUint32)(writer, list[i].id);
652
- (0, psdWriter_1.writeUnicodeString)(writer, list[i].url);
653
- }
654
- });
655
- function boundsToBounds(bounds) {
656
- return { 'Top ': bounds.top, Left: bounds.left, Btom: bounds.bottom, Rght: bounds.right };
657
- }
658
- function boundsFromBounds(bounds) {
659
- return { top: bounds['Top '], left: bounds.Left, bottom: bounds.Btom, right: bounds.Rght };
660
- }
661
- function clamped(array, index) {
662
- return array[Math.max(0, Math.min(array.length - 1, index))];
663
- }
664
- var sliceOrigins = ['autoGenerated', 'layer', 'userGenerated'];
665
- var sliceTypes = ['noImage', 'image'];
666
- var sliceAlignments = ['default'];
667
- addHandler(1050, // Slices
668
- function (// Slices
669
- target) { return target.slices ? target.slices.length : 0; }, function (reader, target) {
670
- var version = (0, psdReader_1.readUint32)(reader);
671
- if (version === 6) {
672
- if (!target.slices)
673
- target.slices = [];
674
- var top_1 = (0, psdReader_1.readInt32)(reader);
675
- var left = (0, psdReader_1.readInt32)(reader);
676
- var bottom = (0, psdReader_1.readInt32)(reader);
677
- var right = (0, psdReader_1.readInt32)(reader);
678
- var groupName = (0, psdReader_1.readUnicodeString)(reader);
679
- var count = (0, psdReader_1.readUint32)(reader);
680
- target.slices.push({ bounds: { top: top_1, left: left, bottom: bottom, right: right }, groupName: groupName, slices: [] });
681
- var slices_1 = target.slices[target.slices.length - 1].slices;
682
- for (var i = 0; i < count; i++) {
683
- var id = (0, psdReader_1.readUint32)(reader);
684
- var groupId = (0, psdReader_1.readUint32)(reader);
685
- var origin_1 = clamped(sliceOrigins, (0, psdReader_1.readUint32)(reader));
686
- var associatedLayerId = origin_1 == 'layer' ? (0, psdReader_1.readUint32)(reader) : 0;
687
- var name_3 = (0, psdReader_1.readUnicodeString)(reader);
688
- var type = clamped(sliceTypes, (0, psdReader_1.readUint32)(reader));
689
- var left_1 = (0, psdReader_1.readInt32)(reader);
690
- var top_2 = (0, psdReader_1.readInt32)(reader);
691
- var right_1 = (0, psdReader_1.readInt32)(reader);
692
- var bottom_1 = (0, psdReader_1.readInt32)(reader);
693
- var url = (0, psdReader_1.readUnicodeString)(reader);
694
- var target_1 = (0, psdReader_1.readUnicodeString)(reader);
695
- var message = (0, psdReader_1.readUnicodeString)(reader);
696
- var altTag = (0, psdReader_1.readUnicodeString)(reader);
697
- var cellTextIsHTML = !!(0, psdReader_1.readUint8)(reader);
698
- var cellText = (0, psdReader_1.readUnicodeString)(reader);
699
- var horizontalAlignment = clamped(sliceAlignments, (0, psdReader_1.readUint32)(reader));
700
- var verticalAlignment = clamped(sliceAlignments, (0, psdReader_1.readUint32)(reader));
701
- var a = (0, psdReader_1.readUint8)(reader);
702
- var r = (0, psdReader_1.readUint8)(reader);
703
- var g = (0, psdReader_1.readUint8)(reader);
704
- var b = (0, psdReader_1.readUint8)(reader);
705
- var backgroundColorType = ((a + r + g + b) === 0) ? 'none' : (a === 0 ? 'matte' : 'color');
706
- slices_1.push({
707
- id: id,
708
- groupId: groupId,
709
- origin: origin_1,
710
- associatedLayerId: associatedLayerId,
711
- name: name_3,
712
- target: target_1,
713
- message: message,
714
- altTag: altTag,
715
- cellTextIsHTML: cellTextIsHTML,
716
- cellText: cellText,
717
- horizontalAlignment: horizontalAlignment,
718
- verticalAlignment: verticalAlignment,
719
- type: type,
720
- url: url,
721
- bounds: { top: top_2, left: left_1, bottom: bottom_1, right: right_1 },
722
- backgroundColorType: backgroundColorType,
723
- backgroundColor: { r: r, g: g, b: b, a: a },
724
- });
725
- }
726
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
727
- desc.slices.forEach(function (d) {
728
- var slice = slices_1.find(function (s) { return d.sliceID == s.id; });
729
- if (slice) {
730
- slice.topOutset = d.topOutset;
731
- slice.leftOutset = d.leftOutset;
732
- slice.bottomOutset = d.bottomOutset;
733
- slice.rightOutset = d.rightOutset;
734
- }
735
- });
736
- }
737
- else if (version === 7 || version === 8) {
738
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
739
- if (!target.slices)
740
- target.slices = [];
741
- target.slices.push({
742
- groupName: desc.baseName,
743
- bounds: boundsFromBounds(desc.bounds),
744
- slices: desc.slices.map(function (s) { return (__assign(__assign({}, (s['Nm '] ? { name: s['Nm '] } : {})), { id: s.sliceID, groupId: s.groupID, associatedLayerId: 0, origin: descriptor_1.ESliceOrigin.decode(s.origin), type: descriptor_1.ESliceType.decode(s.Type), bounds: boundsFromBounds(s.bounds), url: s.url, target: s.null, message: s.Msge, altTag: s.altTag, cellTextIsHTML: s.cellTextIsHTML, cellText: s.cellText, horizontalAlignment: descriptor_1.ESliceHorzAlign.decode(s.horzAlign), verticalAlignment: descriptor_1.ESliceVertAlign.decode(s.vertAlign), backgroundColorType: descriptor_1.ESliceBGColorType.decode(s.bgColorType), backgroundColor: s.bgColor ? { r: s.bgColor['Rd '], g: s.bgColor['Grn '], b: s.bgColor['Bl '], a: s.bgColor.alpha } : { r: 0, g: 0, b: 0, a: 0 }, topOutset: s.topOutset || 0, leftOutset: s.leftOutset || 0, bottomOutset: s.bottomOutset || 0, rightOutset: s.rightOutset || 0 })); }),
745
- });
746
- }
747
- else {
748
- throw new Error("Invalid slices version (".concat(version, ")"));
749
- }
750
- }, function (writer, target, index) {
751
- var _a = target.slices[index], bounds = _a.bounds, groupName = _a.groupName, slices = _a.slices;
752
- (0, psdWriter_1.writeUint32)(writer, 6); // version
753
- (0, psdWriter_1.writeInt32)(writer, bounds.top);
754
- (0, psdWriter_1.writeInt32)(writer, bounds.left);
755
- (0, psdWriter_1.writeInt32)(writer, bounds.bottom);
756
- (0, psdWriter_1.writeInt32)(writer, bounds.right);
757
- (0, psdWriter_1.writeUnicodeString)(writer, groupName);
758
- (0, psdWriter_1.writeUint32)(writer, slices.length);
759
- for (var i = 0; i < slices.length; i++) {
760
- var slice = slices[i];
761
- var _b = slice.backgroundColor, a = _b.a, r = _b.r, g = _b.g, b = _b.b;
762
- if (slice.backgroundColorType === 'none') {
763
- a = r = g = b = 0;
764
- }
765
- else if (slice.backgroundColorType === 'matte') {
766
- a = 0;
767
- r = g = b = 255;
768
- }
769
- (0, psdWriter_1.writeUint32)(writer, slice.id);
770
- (0, psdWriter_1.writeUint32)(writer, slice.groupId);
771
- (0, psdWriter_1.writeUint32)(writer, sliceOrigins.indexOf(slice.origin));
772
- if (slice.origin === 'layer')
773
- (0, psdWriter_1.writeUint32)(writer, slice.associatedLayerId);
774
- (0, psdWriter_1.writeUnicodeString)(writer, slice.name || '');
775
- (0, psdWriter_1.writeUint32)(writer, sliceTypes.indexOf(slice.type));
776
- (0, psdWriter_1.writeInt32)(writer, slice.bounds.left);
777
- (0, psdWriter_1.writeInt32)(writer, slice.bounds.top);
778
- (0, psdWriter_1.writeInt32)(writer, slice.bounds.right);
779
- (0, psdWriter_1.writeInt32)(writer, slice.bounds.bottom);
780
- (0, psdWriter_1.writeUnicodeString)(writer, slice.url);
781
- (0, psdWriter_1.writeUnicodeString)(writer, slice.target);
782
- (0, psdWriter_1.writeUnicodeString)(writer, slice.message);
783
- (0, psdWriter_1.writeUnicodeString)(writer, slice.altTag);
784
- (0, psdWriter_1.writeUint8)(writer, slice.cellTextIsHTML ? 1 : 0);
785
- (0, psdWriter_1.writeUnicodeString)(writer, slice.cellText);
786
- (0, psdWriter_1.writeUint32)(writer, sliceAlignments.indexOf(slice.horizontalAlignment));
787
- (0, psdWriter_1.writeUint32)(writer, sliceAlignments.indexOf(slice.verticalAlignment));
788
- (0, psdWriter_1.writeUint8)(writer, a);
789
- (0, psdWriter_1.writeUint8)(writer, r);
790
- (0, psdWriter_1.writeUint8)(writer, g);
791
- (0, psdWriter_1.writeUint8)(writer, b);
792
- }
793
- var desc = {
794
- bounds: boundsToBounds(bounds),
795
- slices: [],
796
- };
797
- slices.forEach(function (s) {
798
- var slice = __assign(__assign({ sliceID: s.id, groupID: s.groupId, origin: descriptor_1.ESliceOrigin.encode(s.origin), Type: descriptor_1.ESliceType.encode(s.type), bounds: boundsToBounds(s.bounds) }, (s.name ? { 'Nm ': s.name } : {})), { url: s.url, null: s.target, Msge: s.message, altTag: s.altTag, cellTextIsHTML: s.cellTextIsHTML, cellText: s.cellText, horzAlign: descriptor_1.ESliceHorzAlign.encode(s.horizontalAlignment), vertAlign: descriptor_1.ESliceVertAlign.encode(s.verticalAlignment), bgColorType: descriptor_1.ESliceBGColorType.encode(s.backgroundColorType) });
799
- if (s.backgroundColorType === 'color') {
800
- var _a = s.backgroundColor, r = _a.r, g = _a.g, b = _a.b, a = _a.a;
801
- slice.bgColor = { 'Rd ': r, 'Grn ': g, 'Bl ': b, alpha: a };
802
- }
803
- slice.topOutset = s.topOutset || 0;
804
- slice.leftOutset = s.leftOutset || 0;
805
- slice.bottomOutset = s.bottomOutset || 0;
806
- slice.rightOutset = s.rightOutset || 0;
807
- desc.slices.push(slice);
808
- });
809
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'slices');
810
- });
811
- addHandler(1064, function (target) { return target.pixelAspectRatio !== undefined; }, function (reader, target) {
812
- if ((0, psdReader_1.readUint32)(reader) > 2)
813
- throw new Error('Invalid pixelAspectRatio version');
814
- target.pixelAspectRatio = { aspect: (0, psdReader_1.readFloat64)(reader) };
815
- }, function (writer, target) {
816
- (0, psdWriter_1.writeUint32)(writer, 2); // version
817
- (0, psdWriter_1.writeFloat64)(writer, target.pixelAspectRatio.aspect);
818
- });
819
- addHandler(1041, function (target) { return target.iccUntaggedProfile !== undefined; }, function (reader, target) {
820
- target.iccUntaggedProfile = !!(0, psdReader_1.readUint8)(reader);
821
- }, function (writer, target) {
822
- (0, psdWriter_1.writeUint8)(writer, target.iccUntaggedProfile ? 1 : 0);
823
- });
824
- helpers_1.MOCK_HANDLERS && addHandler(1039, // ICC Profile
825
- function (// ICC Profile
826
- target) { return target._ir1039 !== undefined; }, function (reader, target, left) {
827
- // TODO: this is raw bytes, just return as a byte array
828
- LOG_MOCK_HANDLERS && console.log('image resource 1039', left());
829
- target._ir1039 = (0, psdReader_1.readBytes)(reader, left());
830
- }, function (writer, target) {
831
- (0, psdWriter_1.writeBytes)(writer, target._ir1039);
832
- });
833
- addHandler(1044, function (target) { return target.idsSeedNumber !== undefined; }, function (reader, target) { return target.idsSeedNumber = (0, psdReader_1.readUint32)(reader); }, function (writer, target) { return (0, psdWriter_1.writeUint32)(writer, target.idsSeedNumber); });
834
- addHandler(1036, function (target) { return target.thumbnail !== undefined || target.thumbnailRaw !== undefined; }, function (reader, target, left) {
835
- var format = (0, psdReader_1.readUint32)(reader); // 1 = kJpegRGB, 0 = kRawRGB
836
- var width = (0, psdReader_1.readUint32)(reader);
837
- var height = (0, psdReader_1.readUint32)(reader);
838
- (0, psdReader_1.readUint32)(reader); // widthBytes = (width * bits_per_pixel + 31) / 32 * 4.
839
- (0, psdReader_1.readUint32)(reader); // totalSize = widthBytes * height * planes
840
- (0, psdReader_1.readUint32)(reader); // sizeAfterCompression
841
- var bitsPerPixel = (0, psdReader_1.readUint16)(reader); // 24
842
- var planes = (0, psdReader_1.readUint16)(reader); // 1
843
- if (format !== 1 || bitsPerPixel !== 24 || planes !== 1) {
844
- reader.logMissingFeatures && reader.log("Invalid thumbnail data (format: ".concat(format, ", bitsPerPixel: ").concat(bitsPerPixel, ", planes: ").concat(planes, ")"));
845
- (0, psdReader_1.skipBytes)(reader, left());
846
- return;
847
- }
848
- var size = left();
849
- var data = (0, psdReader_1.readBytes)(reader, size);
850
- if (reader.useRawThumbnail) {
851
- target.thumbnailRaw = { width: width, height: height, data: data };
852
- }
853
- else if (data.byteLength) {
854
- target.thumbnail = (0, helpers_1.createCanvasFromData)(data);
855
- }
856
- }, function (writer, target) {
857
- var _a;
858
- var width = 0;
859
- var height = 0;
860
- var data = new Uint8Array(0);
861
- if (target.thumbnailRaw) {
862
- width = target.thumbnailRaw.width;
863
- height = target.thumbnailRaw.height;
864
- data = target.thumbnailRaw.data;
865
- }
866
- else {
867
- try {
868
- var dataUrl = (_a = target.thumbnail.toDataURL('image/jpeg', 1)) === null || _a === void 0 ? void 0 : _a.substring('data:image/jpeg;base64,'.length);
869
- if (dataUrl) {
870
- data = (0, base64_js_1.toByteArray)(dataUrl); // this sometimes fails for some reason, maybe some browser bugs
871
- width = target.thumbnail.width;
872
- height = target.thumbnail.height;
873
- }
874
- }
875
- catch (_b) { }
876
- }
877
- var bitsPerPixel = 24;
878
- var widthBytes = Math.floor((width * bitsPerPixel + 31) / 32) * 4;
879
- var planes = 1;
880
- var totalSize = widthBytes * height * planes;
881
- var sizeAfterCompression = data.length;
882
- (0, psdWriter_1.writeUint32)(writer, 1); // 1 = kJpegRGB
883
- (0, psdWriter_1.writeUint32)(writer, width);
884
- (0, psdWriter_1.writeUint32)(writer, height);
885
- (0, psdWriter_1.writeUint32)(writer, widthBytes);
886
- (0, psdWriter_1.writeUint32)(writer, totalSize);
887
- (0, psdWriter_1.writeUint32)(writer, sizeAfterCompression);
888
- (0, psdWriter_1.writeUint16)(writer, bitsPerPixel);
889
- (0, psdWriter_1.writeUint16)(writer, planes);
890
- (0, psdWriter_1.writeBytes)(writer, data);
891
- });
892
- addHandler(1057, function (target) { return target.versionInfo !== undefined; }, function (reader, target, left) {
893
- var version = (0, psdReader_1.readUint32)(reader);
894
- if (version !== 1)
895
- throw new Error('Invalid versionInfo version');
896
- target.versionInfo = {
897
- hasRealMergedData: !!(0, psdReader_1.readUint8)(reader),
898
- writerName: (0, psdReader_1.readUnicodeString)(reader),
899
- readerName: (0, psdReader_1.readUnicodeString)(reader),
900
- fileVersion: (0, psdReader_1.readUint32)(reader),
901
- };
902
- (0, psdReader_1.skipBytes)(reader, left());
903
- }, function (writer, target) {
904
- var versionInfo = target.versionInfo;
905
- (0, psdWriter_1.writeUint32)(writer, 1); // version
906
- (0, psdWriter_1.writeUint8)(writer, versionInfo.hasRealMergedData ? 1 : 0);
907
- (0, psdWriter_1.writeUnicodeString)(writer, versionInfo.writerName);
908
- (0, psdWriter_1.writeUnicodeString)(writer, versionInfo.readerName);
909
- (0, psdWriter_1.writeUint32)(writer, versionInfo.fileVersion);
910
- });
911
- helpers_1.MOCK_HANDLERS && addHandler(1058, // EXIF data 1.
912
- function (// EXIF data 1.
913
- target) { return target._ir1058 !== undefined; }, function (reader, target, left) {
914
- LOG_MOCK_HANDLERS && console.log('image resource 1058', left());
915
- target._ir1058 = (0, psdReader_1.readBytes)(reader, left());
916
- }, function (writer, target) {
917
- (0, psdWriter_1.writeBytes)(writer, target._ir1058);
918
- });
919
- addHandler(7000, function (target) { return target.imageReadyVariables !== undefined; }, function (reader, target, left) {
920
- target.imageReadyVariables = readUtf8String(reader, left());
921
- }, function (writer, target) {
922
- writeUtf8String(writer, target.imageReadyVariables);
923
- });
924
- addHandler(7001, function (target) { return target.imageReadyDataSets !== undefined; }, function (reader, target, left) {
925
- target.imageReadyDataSets = readUtf8String(reader, left());
926
- }, function (writer, target) {
927
- writeUtf8String(writer, target.imageReadyDataSets);
928
- });
929
- addHandler(1088, function (target) { return target.pathSelectionState !== undefined; }, function (reader, target, _left) {
930
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
931
- target.pathSelectionState = desc['null'];
932
- }, function (writer, target) {
933
- var desc = { 'null': target.pathSelectionState };
934
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
935
- });
936
- helpers_1.MOCK_HANDLERS && addHandler(1025, function (target) { return target._ir1025 !== undefined; }, function (reader, target, left) {
937
- LOG_MOCK_HANDLERS && console.log('image resource 1025', left());
938
- target._ir1025 = (0, psdReader_1.readBytes)(reader, left());
939
- }, function (writer, target) {
940
- (0, psdWriter_1.writeBytes)(writer, target._ir1025);
941
- });
942
- var FrmD = (0, helpers_1.createEnum)('FrmD', '', {
943
- auto: 'Auto',
944
- none: 'None',
945
- dispose: 'Disp',
946
- });
947
- addHandler(4000, // Plug-In resource(s)
948
- function (// Plug-In resource(s)
949
- target) { return target.animations !== undefined; }, function (reader, target, left) {
950
- var key = (0, psdReader_1.readSignature)(reader);
951
- if (key === 'mani') {
952
- (0, psdReader_1.checkSignature)(reader, 'IRFR');
953
- (0, psdReader_1.readSection)(reader, 1, function (left) {
954
- var _loop_1 = function () {
955
- (0, psdReader_1.checkSignature)(reader, '8BIM');
956
- var key_1 = (0, psdReader_1.readSignature)(reader);
957
- (0, psdReader_1.readSection)(reader, 1, function (left) {
958
- if (key_1 === 'AnDs') {
959
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
960
- target.animations = {
961
- // desc.AFSt ???
962
- frames: desc.FrIn.map(function (x) { return ({
963
- id: x.FrID,
964
- delay: (x.FrDl || 0) / 100,
965
- dispose: x.FrDs ? FrmD.decode(x.FrDs) : 'auto', // missing == auto
966
- // x.FrGA ???
967
- }); }),
968
- animations: desc.FSts.map(function (x) { return ({
969
- id: x.FsID,
970
- frames: x.FsFr,
971
- repeats: x.LCnt,
972
- activeFrame: x.AFrm || 0,
973
- }); }),
974
- };
975
- // console.log('#4000 AnDs', require('util').inspect(desc, false, 99, true));
976
- // console.log('#4000 AnDs:result', require('util').inspect(target.animations, false, 99, true));
977
- }
978
- else if (key_1 === 'Roll') {
979
- var bytes = (0, psdReader_1.readBytes)(reader, left());
980
- reader.logDevFeatures && reader.log('#4000 Roll', bytes);
981
- }
982
- else {
983
- reader.logMissingFeatures && reader.log('Unhandled subsection in #4000', key_1);
984
- }
985
- });
986
- };
987
- while (left() > 0) {
988
- _loop_1();
989
- }
990
- });
991
- }
992
- else if (key === 'mopt') {
993
- var bytes = (0, psdReader_1.readBytes)(reader, left());
994
- reader.logDevFeatures && reader.log('#4000 mopt', bytes);
995
- }
996
- else {
997
- reader.logMissingFeatures && reader.log('Unhandled key in #4000:', key);
998
- }
999
- }, function (writer, target) {
1000
- if (target.animations) {
1001
- (0, psdWriter_1.writeSignature)(writer, 'mani');
1002
- (0, psdWriter_1.writeSignature)(writer, 'IRFR');
1003
- (0, psdWriter_1.writeSection)(writer, 1, function () {
1004
- (0, psdWriter_1.writeSignature)(writer, '8BIM');
1005
- (0, psdWriter_1.writeSignature)(writer, 'AnDs');
1006
- (0, psdWriter_1.writeSection)(writer, 1, function () {
1007
- var desc = {
1008
- // AFSt: 0, // ???
1009
- FrIn: [],
1010
- FSts: [],
1011
- };
1012
- for (var i = 0; i < target.animations.frames.length; i++) {
1013
- var f = target.animations.frames[i];
1014
- var frame = {
1015
- FrID: f.id,
1016
- };
1017
- if (f.delay)
1018
- frame.FrDl = (f.delay * 100) | 0;
1019
- frame.FrDs = FrmD.encode(f.dispose);
1020
- // if (i === 0) frame.FrGA = 30; // ???
1021
- desc.FrIn.push(frame);
1022
- }
1023
- for (var i = 0; i < target.animations.animations.length; i++) {
1024
- var a = target.animations.animations[i];
1025
- var anim = {
1026
- FsID: a.id,
1027
- AFrm: a.activeFrame | 0,
1028
- FsFr: a.frames,
1029
- LCnt: a.repeats | 0,
1030
- };
1031
- desc.FSts.push(anim);
1032
- }
1033
- (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
1034
- });
1035
- // writeSignature(writer, '8BIM');
1036
- // writeSignature(writer, 'Roll');
1037
- // writeSection(writer, 1, () => {
1038
- // writeZeros(writer, 8);
1039
- // });
1040
- });
1041
- }
1042
- });
1043
- // TODO: Unfinished
1044
- helpers_1.MOCK_HANDLERS && addHandler(4001, // Plug-In resource(s)
1045
- function (// Plug-In resource(s)
1046
- target) { return target._ir4001 !== undefined; }, function (reader, target, left) {
1047
- if (helpers_1.MOCK_HANDLERS) {
1048
- LOG_MOCK_HANDLERS && console.log('image resource 4001', left());
1049
- target._ir4001 = (0, psdReader_1.readBytes)(reader, left());
1050
- return;
1051
- }
1052
- var key = (0, psdReader_1.readSignature)(reader);
1053
- if (key === 'mfri') {
1054
- var version = (0, psdReader_1.readUint32)(reader);
1055
- if (version !== 2)
1056
- throw new Error('Invalid mfri version');
1057
- var length_1 = (0, psdReader_1.readUint32)(reader);
1058
- var bytes = (0, psdReader_1.readBytes)(reader, length_1);
1059
- reader.logDevFeatures && reader.log('mfri', bytes);
1060
- }
1061
- else if (key === 'mset') {
1062
- var desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
1063
- reader.logDevFeatures && reader.log('mset', desc);
1064
- }
1065
- else {
1066
- reader.logMissingFeatures && reader.log('Unhandled key in #4001', key);
1067
- }
1068
- }, function (writer, target) {
1069
- (0, psdWriter_1.writeBytes)(writer, target._ir4001);
1070
- });
1071
- // TODO: Unfinished
1072
- helpers_1.MOCK_HANDLERS && addHandler(4002, // Plug-In resource(s)
1073
- function (// Plug-In resource(s)
1074
- target) { return target._ir4002 !== undefined; }, function (reader, target, left) {
1075
- LOG_MOCK_HANDLERS && console.log('image resource 4002', left());
1076
- target._ir4002 = (0, psdReader_1.readBytes)(reader, left());
1077
- }, function (writer, target) {
1078
- (0, psdWriter_1.writeBytes)(writer, target._ir4002);
1079
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resourceHandlersMap = exports.resourceHandlers = void 0;
4
+ const base64_js_1 = require("base64-js");
5
+ const psdReader_1 = require("./psdReader");
6
+ const psdWriter_1 = require("./psdWriter");
7
+ const helpers_1 = require("./helpers");
8
+ const utf8_1 = require("./utf8");
9
+ const descriptor_1 = require("./descriptor");
10
+ exports.resourceHandlers = [];
11
+ exports.resourceHandlersMap = {};
12
+ function addHandler(key, has, read, write) {
13
+ const handler = { key, has, read, write };
14
+ exports.resourceHandlers.push(handler);
15
+ exports.resourceHandlersMap[handler.key] = handler;
16
+ }
17
+ const LOG_MOCK_HANDLERS = false;
18
+ const RESOLUTION_UNITS = [undefined, 'PPI', 'PPCM'];
19
+ const MEASUREMENT_UNITS = [undefined, 'Inches', 'Centimeters', 'Points', 'Picas', 'Columns'];
20
+ const hex = '0123456789abcdef';
21
+ function charToNibble(code) {
22
+ return code <= 57 ? code - 48 : code - 87;
23
+ }
24
+ function byteAt(value, index) {
25
+ return (charToNibble(value.charCodeAt(index)) << 4) | charToNibble(value.charCodeAt(index + 1));
26
+ }
27
+ function readUtf8String(reader, length) {
28
+ const buffer = (0, psdReader_1.readBytes)(reader, length);
29
+ return (0, utf8_1.decodeString)(buffer);
30
+ }
31
+ function writeUtf8String(writer, value) {
32
+ const buffer = (0, utf8_1.encodeString)(value);
33
+ (0, psdWriter_1.writeBytes)(writer, buffer);
34
+ }
35
+ function readEncodedString(reader) {
36
+ const length = (0, psdReader_1.readUint8)(reader);
37
+ const buffer = (0, psdReader_1.readBytes)(reader, length);
38
+ let notAscii = false;
39
+ for (let i = 0; i < buffer.byteLength; i++) {
40
+ if (buffer[i] & 0x80) {
41
+ notAscii = true;
42
+ break;
43
+ }
44
+ }
45
+ if (notAscii) {
46
+ const decoder = new TextDecoder('gbk');
47
+ return decoder.decode(buffer);
48
+ }
49
+ else {
50
+ return (0, utf8_1.decodeString)(buffer);
51
+ }
52
+ }
53
+ function writeEncodedString(writer, value) {
54
+ let ascii = '';
55
+ for (let i = 0, code = value.codePointAt(i++); code !== undefined; code = value.codePointAt(i++)) {
56
+ ascii += code > 0x7f ? '?' : String.fromCodePoint(code);
57
+ }
58
+ const buffer = (0, utf8_1.encodeString)(ascii);
59
+ (0, psdWriter_1.writeUint8)(writer, buffer.byteLength);
60
+ (0, psdWriter_1.writeBytes)(writer, buffer);
61
+ }
62
+ helpers_1.MOCK_HANDLERS && addHandler(1028, // IPTC-NAA record
63
+ // IPTC-NAA record
64
+ target => target._ir1028 !== undefined, (reader, target, left) => {
65
+ LOG_MOCK_HANDLERS && console.log('image resource 1028', left());
66
+ target._ir1028 = (0, psdReader_1.readBytes)(reader, left());
67
+ }, (writer, target) => {
68
+ (0, psdWriter_1.writeBytes)(writer, target._ir1028);
69
+ });
70
+ addHandler(1061, target => target.captionDigest !== undefined, (reader, target) => {
71
+ let captionDigest = '';
72
+ for (let i = 0; i < 16; i++) {
73
+ const byte = (0, psdReader_1.readUint8)(reader);
74
+ captionDigest += hex[byte >> 4];
75
+ captionDigest += hex[byte & 0xf];
76
+ }
77
+ target.captionDigest = captionDigest;
78
+ }, (writer, target) => {
79
+ for (let i = 0; i < 16; i++) {
80
+ (0, psdWriter_1.writeUint8)(writer, byteAt(target.captionDigest, i * 2));
81
+ }
82
+ });
83
+ addHandler(1060, target => target.xmpMetadata !== undefined, (reader, target, left) => {
84
+ target.xmpMetadata = readUtf8String(reader, left());
85
+ }, (writer, target) => {
86
+ writeUtf8String(writer, target.xmpMetadata);
87
+ });
88
+ const Inte = (0, helpers_1.createEnum)('Inte', 'perceptual', {
89
+ 'perceptual': 'Img ',
90
+ 'saturation': 'Grp ',
91
+ 'relative colorimetric': 'Clrm',
92
+ 'absolute colorimetric': 'AClr',
93
+ });
94
+ helpers_1.MOCK_HANDLERS && addHandler(1085, // Windows DEVMODE. Variable OS specific info for Windows.
95
+ // Windows DEVMODE. Variable OS specific info for Windows.
96
+ target => target._ir1085 !== undefined, (reader, target, left) => {
97
+ target._ir1085 = (0, psdReader_1.readBytes)(reader, left());
98
+ }, (writer, target) => {
99
+ (0, psdWriter_1.writeBytes)(writer, target._ir1085);
100
+ });
101
+ addHandler(1082, target => target.printInformation !== undefined, (reader, target) => {
102
+ var _a, _b;
103
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
104
+ target.printInformation = {
105
+ printerName: desc.printerName || '',
106
+ renderingIntent: Inte.decode((_a = desc.Inte) !== null && _a !== void 0 ? _a : 'Inte.Img '),
107
+ };
108
+ const info = target.printInformation;
109
+ if (desc.PstS !== undefined)
110
+ info.printerManagesColors = desc.PstS;
111
+ if (desc['Nm '] !== undefined)
112
+ info.printerProfile = desc['Nm '];
113
+ if (desc.MpBl !== undefined)
114
+ info.blackPointCompensation = desc.MpBl;
115
+ if (desc.printSixteenBit !== undefined)
116
+ info.printSixteenBit = desc.printSixteenBit;
117
+ if (desc.hardProof !== undefined)
118
+ info.hardProof = desc.hardProof;
119
+ if (desc.printProofSetup) {
120
+ if ('Bltn' in desc.printProofSetup) {
121
+ info.proofSetup = { builtin: desc.printProofSetup.Bltn.split('.')[1] };
122
+ }
123
+ else {
124
+ info.proofSetup = {
125
+ profile: desc.printProofSetup.profile,
126
+ renderingIntent: Inte.decode((_b = desc.printProofSetup.Inte) !== null && _b !== void 0 ? _b : 'Inte.Img '),
127
+ blackPointCompensation: !!desc.printProofSetup.MpBl,
128
+ paperWhite: !!desc.printProofSetup.paperWhite,
129
+ };
130
+ }
131
+ }
132
+ }, (writer, target) => {
133
+ var _a, _b;
134
+ const info = target.printInformation;
135
+ const desc = {};
136
+ if (info.printerManagesColors) {
137
+ desc.PstS = true;
138
+ }
139
+ else {
140
+ if (info.hardProof !== undefined)
141
+ desc.hardProof = !!info.hardProof;
142
+ desc.ClrS = 'ClrS.RGBC'; // TODO: ???
143
+ desc['Nm '] = (_a = info.printerProfile) !== null && _a !== void 0 ? _a : 'CIE RGB';
144
+ }
145
+ desc.Inte = Inte.encode(info.renderingIntent);
146
+ if (!info.printerManagesColors)
147
+ desc.MpBl = !!info.blackPointCompensation;
148
+ desc.printSixteenBit = !!info.printSixteenBit;
149
+ desc.printerName = info.printerName || '';
150
+ if (info.proofSetup && 'profile' in info.proofSetup) {
151
+ desc.printProofSetup = {
152
+ profile: info.proofSetup.profile || '',
153
+ Inte: Inte.encode(info.proofSetup.renderingIntent),
154
+ MpBl: !!info.proofSetup.blackPointCompensation,
155
+ paperWhite: !!info.proofSetup.paperWhite,
156
+ };
157
+ }
158
+ else {
159
+ desc.printProofSetup = {
160
+ Bltn: ((_b = info.proofSetup) === null || _b === void 0 ? void 0 : _b.builtin) ? `builtinProof.${info.proofSetup.builtin}` : 'builtinProof.proofCMYK',
161
+ };
162
+ }
163
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'printOutput', desc);
164
+ });
165
+ helpers_1.MOCK_HANDLERS && addHandler(1083, // Print style
166
+ // Print style
167
+ target => target._ir1083 !== undefined, (reader, target, left) => {
168
+ LOG_MOCK_HANDLERS && console.log('image resource 1083', left());
169
+ target._ir1083 = (0, psdReader_1.readBytes)(reader, left());
170
+ // TODO:
171
+ // const desc = readVersionAndDescriptor(reader);
172
+ // console.log('1083', require('util').inspect(desc, false, 99, true));
173
+ }, (writer, target) => {
174
+ (0, psdWriter_1.writeBytes)(writer, target._ir1083);
175
+ });
176
+ addHandler(1005, target => target.resolutionInfo !== undefined, (reader, target) => {
177
+ const horizontalResolution = (0, psdReader_1.readFixedPoint32)(reader);
178
+ const horizontalResolutionUnit = (0, psdReader_1.readUint16)(reader);
179
+ const widthUnit = (0, psdReader_1.readUint16)(reader);
180
+ const verticalResolution = (0, psdReader_1.readFixedPoint32)(reader);
181
+ const verticalResolutionUnit = (0, psdReader_1.readUint16)(reader);
182
+ const heightUnit = (0, psdReader_1.readUint16)(reader);
183
+ target.resolutionInfo = {
184
+ horizontalResolution,
185
+ horizontalResolutionUnit: RESOLUTION_UNITS[horizontalResolutionUnit] || 'PPI',
186
+ widthUnit: MEASUREMENT_UNITS[widthUnit] || 'Inches',
187
+ verticalResolution,
188
+ verticalResolutionUnit: RESOLUTION_UNITS[verticalResolutionUnit] || 'PPI',
189
+ heightUnit: MEASUREMENT_UNITS[heightUnit] || 'Inches',
190
+ };
191
+ }, (writer, target) => {
192
+ const info = target.resolutionInfo;
193
+ (0, psdWriter_1.writeFixedPoint32)(writer, info.horizontalResolution || 0);
194
+ (0, psdWriter_1.writeUint16)(writer, Math.max(1, RESOLUTION_UNITS.indexOf(info.horizontalResolutionUnit)));
195
+ (0, psdWriter_1.writeUint16)(writer, Math.max(1, MEASUREMENT_UNITS.indexOf(info.widthUnit)));
196
+ (0, psdWriter_1.writeFixedPoint32)(writer, info.verticalResolution || 0);
197
+ (0, psdWriter_1.writeUint16)(writer, Math.max(1, RESOLUTION_UNITS.indexOf(info.verticalResolutionUnit)));
198
+ (0, psdWriter_1.writeUint16)(writer, Math.max(1, MEASUREMENT_UNITS.indexOf(info.heightUnit)));
199
+ });
200
+ const printScaleStyles = ['centered', 'size to fit', 'user defined'];
201
+ addHandler(1062, target => target.printScale !== undefined, (reader, target) => {
202
+ target.printScale = {
203
+ style: printScaleStyles[(0, psdReader_1.readInt16)(reader)],
204
+ x: (0, psdReader_1.readFloat32)(reader),
205
+ y: (0, psdReader_1.readFloat32)(reader),
206
+ scale: (0, psdReader_1.readFloat32)(reader),
207
+ };
208
+ }, (writer, target) => {
209
+ const { style, x, y, scale } = target.printScale;
210
+ (0, psdWriter_1.writeInt16)(writer, Math.max(0, printScaleStyles.indexOf(style)));
211
+ (0, psdWriter_1.writeFloat32)(writer, x || 0);
212
+ (0, psdWriter_1.writeFloat32)(writer, y || 0);
213
+ (0, psdWriter_1.writeFloat32)(writer, scale || 0);
214
+ });
215
+ addHandler(1006, target => target.alphaChannelNames !== undefined, (reader, target, left) => {
216
+ if (!target.alphaChannelNames) { // skip if the unicode versions are already read
217
+ target.alphaChannelNames = [];
218
+ while (left() > 0) {
219
+ const value = readEncodedString(reader);
220
+ // const value = readPascalString(reader, 1);
221
+ target.alphaChannelNames.push(value);
222
+ }
223
+ }
224
+ else {
225
+ (0, psdReader_1.skipBytes)(reader, left());
226
+ }
227
+ }, (writer, target) => {
228
+ for (const name of target.alphaChannelNames) {
229
+ writeEncodedString(writer, name);
230
+ // writePascalString(writer, name, 1);
231
+ }
232
+ });
233
+ addHandler(1045, target => target.alphaChannelNames !== undefined, (reader, target, left) => {
234
+ target.alphaChannelNames = [];
235
+ while (left() > 0) {
236
+ target.alphaChannelNames.push((0, psdReader_1.readUnicodeString)(reader));
237
+ }
238
+ }, (writer, target) => {
239
+ for (const name of target.alphaChannelNames) {
240
+ (0, psdWriter_1.writeUnicodeStringWithPadding)(writer, name);
241
+ }
242
+ });
243
+ helpers_1.MOCK_HANDLERS && addHandler(1077, target => target._ir1077 !== undefined, (reader, target, left) => {
244
+ LOG_MOCK_HANDLERS && console.log('image resource 1077', left());
245
+ target._ir1077 = (0, psdReader_1.readBytes)(reader, left());
246
+ }, (writer, target) => {
247
+ (0, psdWriter_1.writeBytes)(writer, target._ir1077);
248
+ });
249
+ addHandler(1053, target => target.alphaIdentifiers !== undefined, (reader, target, left) => {
250
+ target.alphaIdentifiers = [];
251
+ while (left() >= 4) {
252
+ target.alphaIdentifiers.push((0, psdReader_1.readUint32)(reader));
253
+ }
254
+ }, (writer, target) => {
255
+ for (const id of target.alphaIdentifiers) {
256
+ (0, psdWriter_1.writeUint32)(writer, id);
257
+ }
258
+ });
259
+ addHandler(1010, target => target.backgroundColor !== undefined, (reader, target) => target.backgroundColor = (0, psdReader_1.readColor)(reader), (writer, target) => (0, psdWriter_1.writeColor)(writer, target.backgroundColor));
260
+ addHandler(1037, target => target.globalAngle !== undefined, (reader, target) => target.globalAngle = (0, psdReader_1.readInt32)(reader), (writer, target) => (0, psdWriter_1.writeInt32)(writer, target.globalAngle));
261
+ addHandler(1049, target => target.globalAltitude !== undefined, (reader, target) => target.globalAltitude = (0, psdReader_1.readUint32)(reader), (writer, target) => (0, psdWriter_1.writeUint32)(writer, target.globalAltitude));
262
+ addHandler(1011, target => target.printFlags !== undefined, (reader, target) => {
263
+ target.printFlags = {
264
+ labels: !!(0, psdReader_1.readUint8)(reader),
265
+ cropMarks: !!(0, psdReader_1.readUint8)(reader),
266
+ colorBars: !!(0, psdReader_1.readUint8)(reader),
267
+ registrationMarks: !!(0, psdReader_1.readUint8)(reader),
268
+ negative: !!(0, psdReader_1.readUint8)(reader),
269
+ flip: !!(0, psdReader_1.readUint8)(reader),
270
+ interpolate: !!(0, psdReader_1.readUint8)(reader),
271
+ caption: !!(0, psdReader_1.readUint8)(reader),
272
+ printFlags: !!(0, psdReader_1.readUint8)(reader),
273
+ };
274
+ }, (writer, target) => {
275
+ const flags = target.printFlags;
276
+ (0, psdWriter_1.writeUint8)(writer, flags.labels ? 1 : 0);
277
+ (0, psdWriter_1.writeUint8)(writer, flags.cropMarks ? 1 : 0);
278
+ (0, psdWriter_1.writeUint8)(writer, flags.colorBars ? 1 : 0);
279
+ (0, psdWriter_1.writeUint8)(writer, flags.registrationMarks ? 1 : 0);
280
+ (0, psdWriter_1.writeUint8)(writer, flags.negative ? 1 : 0);
281
+ (0, psdWriter_1.writeUint8)(writer, flags.flip ? 1 : 0);
282
+ (0, psdWriter_1.writeUint8)(writer, flags.interpolate ? 1 : 0);
283
+ (0, psdWriter_1.writeUint8)(writer, flags.caption ? 1 : 0);
284
+ (0, psdWriter_1.writeUint8)(writer, flags.printFlags ? 1 : 0);
285
+ });
286
+ addHandler(1034, // Copyright flag
287
+ // Copyright flag
288
+ target => target.copyrighted !== undefined, (reader, target) => {
289
+ target.copyrighted = !!(0, psdReader_1.readUint8)(reader);
290
+ }, (writer, target) => {
291
+ (0, psdWriter_1.writeUint8)(writer, target.copyrighted ? 1 : 0);
292
+ });
293
+ addHandler(1035, // URL
294
+ // URL
295
+ target => target.url !== undefined, (reader, target, left) => {
296
+ target.url = (0, psdReader_1.readAsciiString)(reader, left());
297
+ }, (writer, target) => {
298
+ (0, psdWriter_1.writeAsciiString)(writer, target.url);
299
+ });
300
+ helpers_1.MOCK_HANDLERS && addHandler(10000, // Print flags
301
+ // Print flags
302
+ target => target._ir10000 !== undefined, (reader, target, left) => {
303
+ LOG_MOCK_HANDLERS && console.log('image resource 10000', left());
304
+ target._ir10000 = (0, psdReader_1.readBytes)(reader, left());
305
+ }, (writer, target) => {
306
+ (0, psdWriter_1.writeBytes)(writer, target._ir10000);
307
+ });
308
+ helpers_1.MOCK_HANDLERS && addHandler(1013, // Color halftoning
309
+ // Color halftoning
310
+ target => target._ir1013 !== undefined, (reader, target, left) => {
311
+ LOG_MOCK_HANDLERS && console.log('image resource 1013', left());
312
+ target._ir1013 = (0, psdReader_1.readBytes)(reader, left());
313
+ }, (writer, target) => {
314
+ (0, psdWriter_1.writeBytes)(writer, target._ir1013);
315
+ });
316
+ helpers_1.MOCK_HANDLERS && addHandler(1016, // Color transfer functions
317
+ // Color transfer functions
318
+ target => target._ir1016 !== undefined, (reader, target, left) => {
319
+ LOG_MOCK_HANDLERS && console.log('image resource 1016', left());
320
+ target._ir1016 = (0, psdReader_1.readBytes)(reader, left());
321
+ }, (writer, target) => {
322
+ (0, psdWriter_1.writeBytes)(writer, target._ir1016);
323
+ });
324
+ addHandler(1080, // Count Information
325
+ // Count Information
326
+ target => target.countInformation !== undefined, (reader, target) => {
327
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
328
+ target.countInformation = desc.countGroupList.map(g => ({
329
+ color: { r: g['Rd '], g: g['Grn '], b: g['Bl '] },
330
+ name: g['Nm '],
331
+ size: g['Rds '],
332
+ fontSize: g.fontSize,
333
+ visible: g.Vsbl,
334
+ points: g.countObjectList.map(p => ({ x: p['X '], y: p['Y '] })),
335
+ }));
336
+ }, (writer, target) => {
337
+ const desc = {
338
+ Vrsn: 1,
339
+ countGroupList: target.countInformation.map(g => ({
340
+ 'Rd ': g.color.r,
341
+ 'Grn ': g.color.g,
342
+ 'Bl ': g.color.b,
343
+ 'Nm ': g.name,
344
+ 'Rds ': g.size,
345
+ fontSize: g.fontSize,
346
+ Vsbl: g.visible,
347
+ countObjectList: g.points.map(p => ({ 'X ': p.x, 'Y ': p.y })),
348
+ })),
349
+ };
350
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'Cnt ', desc);
351
+ });
352
+ addHandler(1024, target => target.layerState !== undefined, (reader, target) => target.layerState = (0, psdReader_1.readUint16)(reader), (writer, target) => (0, psdWriter_1.writeUint16)(writer, target.layerState));
353
+ addHandler(1026, target => target.layersGroup !== undefined, (reader, target, left) => {
354
+ target.layersGroup = [];
355
+ while (left() > 0) {
356
+ target.layersGroup.push((0, psdReader_1.readUint16)(reader));
357
+ }
358
+ }, (writer, target) => {
359
+ for (const g of target.layersGroup) {
360
+ (0, psdWriter_1.writeUint16)(writer, g);
361
+ }
362
+ });
363
+ addHandler(1072, target => target.layerGroupsEnabledId !== undefined, (reader, target, left) => {
364
+ target.layerGroupsEnabledId = [];
365
+ while (left() > 0) {
366
+ target.layerGroupsEnabledId.push((0, psdReader_1.readUint8)(reader));
367
+ }
368
+ }, (writer, target) => {
369
+ for (const id of target.layerGroupsEnabledId) {
370
+ (0, psdWriter_1.writeUint8)(writer, id);
371
+ }
372
+ });
373
+ addHandler(1069, target => target.layerSelectionIds !== undefined, (reader, target) => {
374
+ let count = (0, psdReader_1.readUint16)(reader);
375
+ target.layerSelectionIds = [];
376
+ while (count--) {
377
+ target.layerSelectionIds.push((0, psdReader_1.readUint32)(reader));
378
+ }
379
+ }, (writer, target) => {
380
+ (0, psdWriter_1.writeUint16)(writer, target.layerSelectionIds.length);
381
+ for (const id of target.layerSelectionIds) {
382
+ (0, psdWriter_1.writeUint32)(writer, id);
383
+ }
384
+ });
385
+ addHandler(1032, target => target.gridAndGuidesInformation !== undefined, (reader, target) => {
386
+ const version = (0, psdReader_1.readUint32)(reader);
387
+ const horizontal = (0, psdReader_1.readUint32)(reader);
388
+ const vertical = (0, psdReader_1.readUint32)(reader);
389
+ const count = (0, psdReader_1.readUint32)(reader);
390
+ if (version !== 1)
391
+ throw new Error(`Invalid 1032 resource version: ${version}`);
392
+ target.gridAndGuidesInformation = {
393
+ grid: { horizontal, vertical },
394
+ guides: [],
395
+ };
396
+ for (let i = 0; i < count; i++) {
397
+ target.gridAndGuidesInformation.guides.push({
398
+ location: (0, psdReader_1.readUint32)(reader) / 32,
399
+ direction: (0, psdReader_1.readUint8)(reader) ? 'horizontal' : 'vertical'
400
+ });
401
+ }
402
+ }, (writer, target) => {
403
+ const info = target.gridAndGuidesInformation;
404
+ const grid = info.grid || { horizontal: 18 * 32, vertical: 18 * 32 };
405
+ const guides = info.guides || [];
406
+ (0, psdWriter_1.writeUint32)(writer, 1);
407
+ (0, psdWriter_1.writeUint32)(writer, grid.horizontal);
408
+ (0, psdWriter_1.writeUint32)(writer, grid.vertical);
409
+ (0, psdWriter_1.writeUint32)(writer, guides.length);
410
+ for (const g of guides) {
411
+ (0, psdWriter_1.writeUint32)(writer, g.location * 32);
412
+ (0, psdWriter_1.writeUint8)(writer, g.direction === 'horizontal' ? 1 : 0);
413
+ }
414
+ });
415
+ addHandler(1065, // Layer Comps
416
+ // Layer Comps
417
+ target => target.layerComps !== undefined, (reader, target) => {
418
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader, true);
419
+ // console.log('CompList', require('util').inspect(desc, false, 99, true));
420
+ target.layerComps = { list: [] };
421
+ for (const item of desc.list) {
422
+ target.layerComps.list.push({
423
+ id: item.compID,
424
+ name: item['Nm '],
425
+ capturedInfo: item.capturedInfo,
426
+ });
427
+ if ('comment' in item)
428
+ target.layerComps.list[target.layerComps.list.length - 1].comment = item.comment;
429
+ }
430
+ if ('lastAppliedComp' in desc)
431
+ target.layerComps.lastApplied = desc.lastAppliedComp;
432
+ }, (writer, target) => {
433
+ const layerComps = target.layerComps;
434
+ const desc = { list: [] };
435
+ for (const item of layerComps.list) {
436
+ const t = {};
437
+ t._classID = 'Comp';
438
+ t['Nm '] = item.name;
439
+ if ('comment' in item)
440
+ t.comment = item.comment;
441
+ t.compID = item.id;
442
+ t.capturedInfo = item.capturedInfo;
443
+ desc.list.push(t);
444
+ }
445
+ if ('lastApplied' in layerComps)
446
+ desc.lastAppliedComp = layerComps.lastApplied;
447
+ // console.log('CompList', require('util').inspect(desc, false, 99, true));
448
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'CompList', desc);
449
+ });
450
+ helpers_1.MOCK_HANDLERS && addHandler(1092, // ???
451
+ // ???
452
+ target => target._ir1092 !== undefined, (reader, target, left) => {
453
+ LOG_MOCK_HANDLERS && console.log('image resource 1092', left());
454
+ // 16 bytes, seems to be 4 integers
455
+ target._ir1092 = (0, psdReader_1.readBytes)(reader, left());
456
+ }, (writer, target) => {
457
+ (0, psdWriter_1.writeBytes)(writer, target._ir1092);
458
+ });
459
+ // 0 - normal, 7 - multiply, 8 - screen, 23 - difference
460
+ const onionSkinsBlendModes = [
461
+ 'normal', undefined, undefined, undefined, undefined, undefined, undefined, 'multiply',
462
+ 'screen', undefined, undefined, undefined, undefined, undefined, undefined, undefined,
463
+ undefined, undefined, undefined, undefined, undefined, undefined, undefined, 'difference',
464
+ ];
465
+ addHandler(1078, // Onion Skins
466
+ // Onion Skins
467
+ target => target.onionSkins !== undefined, (reader, target) => {
468
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
469
+ // console.log('1078', require('util').inspect(desc, false, 99, true));
470
+ target.onionSkins = {
471
+ enabled: desc.enab,
472
+ framesBefore: desc.numBefore,
473
+ framesAfter: desc.numAfter,
474
+ frameSpacing: desc.Spcn,
475
+ minOpacity: desc.minOpacity / 100,
476
+ maxOpacity: desc.maxOpacity / 100,
477
+ blendMode: onionSkinsBlendModes[desc.BlnM] || 'normal',
478
+ };
479
+ }, (writer, target) => {
480
+ const onionSkins = target.onionSkins;
481
+ const desc = {
482
+ Vrsn: 1,
483
+ enab: onionSkins.enabled,
484
+ numBefore: onionSkins.framesBefore,
485
+ numAfter: onionSkins.framesAfter,
486
+ Spcn: onionSkins.frameSpacing,
487
+ minOpacity: (onionSkins.minOpacity * 100) | 0,
488
+ maxOpacity: (onionSkins.maxOpacity * 100) | 0,
489
+ BlnM: Math.max(0, onionSkinsBlendModes.indexOf(onionSkins.blendMode)),
490
+ };
491
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
492
+ });
493
+ addHandler(1075, // Timeline Information
494
+ // Timeline Information
495
+ target => target.timelineInformation !== undefined, (reader, target) => {
496
+ var _a, _b;
497
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
498
+ target.timelineInformation = {
499
+ enabled: desc.enab,
500
+ frameStep: (0, descriptor_1.frac)(desc.frameStep),
501
+ frameRate: desc.frameRate,
502
+ time: (0, descriptor_1.frac)(desc.time),
503
+ duration: (0, descriptor_1.frac)(desc.duration),
504
+ workInTime: (0, descriptor_1.frac)(desc.workInTime),
505
+ workOutTime: (0, descriptor_1.frac)(desc.workOutTime),
506
+ repeats: desc.LCnt,
507
+ hasMotion: desc.hasMotion,
508
+ globalTracks: (0, descriptor_1.parseTrackList)(desc.globalTrackList, !!reader.logMissingFeatures),
509
+ };
510
+ if ((_b = (_a = desc.audioClipGroupList) === null || _a === void 0 ? void 0 : _a.audioClipGroupList) === null || _b === void 0 ? void 0 : _b.length) {
511
+ target.timelineInformation.audioClipGroups = desc.audioClipGroupList.audioClipGroupList.map(g => ({
512
+ id: g.groupID,
513
+ muted: g.muted,
514
+ audioClips: g.audioClipList.map(({ clipID, timeScope, muted, audioLevel, frameReader }) => ({
515
+ id: clipID,
516
+ start: (0, descriptor_1.frac)(timeScope.Strt),
517
+ duration: (0, descriptor_1.frac)(timeScope.duration),
518
+ inTime: (0, descriptor_1.frac)(timeScope.inTime),
519
+ outTime: (0, descriptor_1.frac)(timeScope.outTime),
520
+ muted: muted,
521
+ audioLevel: audioLevel,
522
+ frameReader: {
523
+ type: frameReader.frameReaderType,
524
+ mediaDescriptor: frameReader.mediaDescriptor,
525
+ link: {
526
+ name: frameReader['Lnk ']['Nm '],
527
+ fullPath: frameReader['Lnk '].fullPath,
528
+ relativePath: frameReader['Lnk '].relPath,
529
+ },
530
+ },
531
+ })),
532
+ }));
533
+ }
534
+ }, (writer, target) => {
535
+ var _a;
536
+ const timeline = target.timelineInformation;
537
+ const desc = {
538
+ Vrsn: 1,
539
+ enab: timeline.enabled,
540
+ frameStep: timeline.frameStep,
541
+ frameRate: timeline.frameRate,
542
+ time: timeline.time,
543
+ duration: timeline.duration,
544
+ workInTime: timeline.workInTime,
545
+ workOutTime: timeline.workOutTime,
546
+ LCnt: timeline.repeats,
547
+ globalTrackList: (0, descriptor_1.serializeTrackList)(timeline.globalTracks),
548
+ audioClipGroupList: {
549
+ audioClipGroupList: (_a = timeline.audioClipGroups) === null || _a === void 0 ? void 0 : _a.map(a => ({
550
+ groupID: a.id,
551
+ muted: a.muted,
552
+ audioClipList: a.audioClips.map(c => ({
553
+ clipID: c.id,
554
+ timeScope: {
555
+ Vrsn: 1,
556
+ Strt: c.start,
557
+ duration: c.duration,
558
+ inTime: c.inTime,
559
+ outTime: c.outTime,
560
+ },
561
+ frameReader: {
562
+ frameReaderType: c.frameReader.type,
563
+ descVersion: 1,
564
+ 'Lnk ': {
565
+ descVersion: 1,
566
+ 'Nm ': c.frameReader.link.name,
567
+ fullPath: c.frameReader.link.fullPath,
568
+ relPath: c.frameReader.link.relativePath,
569
+ },
570
+ mediaDescriptor: c.frameReader.mediaDescriptor,
571
+ },
572
+ muted: c.muted,
573
+ audioLevel: c.audioLevel,
574
+ })),
575
+ })),
576
+ },
577
+ hasMotion: timeline.hasMotion,
578
+ };
579
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'anim');
580
+ });
581
+ addHandler(1076, // Sheet Disclosure
582
+ // Sheet Disclosure
583
+ target => target.sheetDisclosure !== undefined, (reader, target) => {
584
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
585
+ target.sheetDisclosure = {};
586
+ if (desc.sheetTimelineOptions) {
587
+ target.sheetDisclosure.sheetTimelineOptions = desc.sheetTimelineOptions.map(o => ({
588
+ sheetID: o.sheetID,
589
+ sheetDisclosed: o.sheetDisclosed,
590
+ lightsDisclosed: o.lightsDisclosed,
591
+ meshesDisclosed: o.meshesDisclosed,
592
+ materialsDisclosed: o.materialsDisclosed,
593
+ }));
594
+ }
595
+ }, (writer, target) => {
596
+ const disclosure = target.sheetDisclosure;
597
+ const desc = { Vrsn: 1 };
598
+ if (disclosure.sheetTimelineOptions) {
599
+ desc.sheetTimelineOptions = disclosure.sheetTimelineOptions.map(d => ({
600
+ Vrsn: 2,
601
+ sheetID: d.sheetID,
602
+ sheetDisclosed: d.sheetDisclosed,
603
+ lightsDisclosed: d.lightsDisclosed,
604
+ meshesDisclosed: d.meshesDisclosed,
605
+ materialsDisclosed: d.materialsDisclosed,
606
+ }));
607
+ }
608
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
609
+ });
610
+ addHandler(1054, // URL List
611
+ // URL List
612
+ target => target.urlsList !== undefined, (reader, target) => {
613
+ const count = (0, psdReader_1.readUint32)(reader);
614
+ target.urlsList = [];
615
+ for (let i = 0; i < count; i++) {
616
+ const long = (0, psdReader_1.readSignature)(reader);
617
+ if (long !== 'slic' && reader.throwForMissingFeatures)
618
+ throw new Error('Unknown long');
619
+ const id = (0, psdReader_1.readUint32)(reader);
620
+ const url = (0, psdReader_1.readUnicodeString)(reader);
621
+ target.urlsList.push({ id, url, ref: 'slice' });
622
+ }
623
+ }, (writer, target) => {
624
+ const list = target.urlsList;
625
+ (0, psdWriter_1.writeUint32)(writer, list.length);
626
+ for (let i = 0; i < list.length; i++) {
627
+ (0, psdWriter_1.writeSignature)(writer, 'slic');
628
+ (0, psdWriter_1.writeUint32)(writer, list[i].id);
629
+ (0, psdWriter_1.writeUnicodeString)(writer, list[i].url);
630
+ }
631
+ });
632
+ function boundsToBounds(bounds) {
633
+ return { 'Top ': bounds.top, Left: bounds.left, Btom: bounds.bottom, Rght: bounds.right };
634
+ }
635
+ function boundsFromBounds(bounds) {
636
+ return { top: bounds['Top '], left: bounds.Left, bottom: bounds.Btom, right: bounds.Rght };
637
+ }
638
+ function clamped(array, index) {
639
+ return array[Math.max(0, Math.min(array.length - 1, index))];
640
+ }
641
+ const sliceOrigins = ['autoGenerated', 'layer', 'userGenerated'];
642
+ const sliceTypes = ['noImage', 'image'];
643
+ const sliceAlignments = ['default'];
644
+ addHandler(1050, // Slices
645
+ // Slices
646
+ target => target.slices ? target.slices.length : 0, (reader, target) => {
647
+ const version = (0, psdReader_1.readUint32)(reader);
648
+ if (version === 6) {
649
+ if (!target.slices)
650
+ target.slices = [];
651
+ const top = (0, psdReader_1.readInt32)(reader);
652
+ const left = (0, psdReader_1.readInt32)(reader);
653
+ const bottom = (0, psdReader_1.readInt32)(reader);
654
+ const right = (0, psdReader_1.readInt32)(reader);
655
+ const groupName = (0, psdReader_1.readUnicodeString)(reader);
656
+ const count = (0, psdReader_1.readUint32)(reader);
657
+ target.slices.push({ bounds: { top, left, bottom, right }, groupName, slices: [] });
658
+ const slices = target.slices[target.slices.length - 1].slices;
659
+ for (let i = 0; i < count; i++) {
660
+ const id = (0, psdReader_1.readUint32)(reader);
661
+ const groupId = (0, psdReader_1.readUint32)(reader);
662
+ const origin = clamped(sliceOrigins, (0, psdReader_1.readUint32)(reader));
663
+ const associatedLayerId = origin == 'layer' ? (0, psdReader_1.readUint32)(reader) : 0;
664
+ const name = (0, psdReader_1.readUnicodeString)(reader);
665
+ const type = clamped(sliceTypes, (0, psdReader_1.readUint32)(reader));
666
+ const left = (0, psdReader_1.readInt32)(reader);
667
+ const top = (0, psdReader_1.readInt32)(reader);
668
+ const right = (0, psdReader_1.readInt32)(reader);
669
+ const bottom = (0, psdReader_1.readInt32)(reader);
670
+ const url = (0, psdReader_1.readUnicodeString)(reader);
671
+ const target = (0, psdReader_1.readUnicodeString)(reader);
672
+ const message = (0, psdReader_1.readUnicodeString)(reader);
673
+ const altTag = (0, psdReader_1.readUnicodeString)(reader);
674
+ const cellTextIsHTML = !!(0, psdReader_1.readUint8)(reader);
675
+ const cellText = (0, psdReader_1.readUnicodeString)(reader);
676
+ const horizontalAlignment = clamped(sliceAlignments, (0, psdReader_1.readUint32)(reader));
677
+ const verticalAlignment = clamped(sliceAlignments, (0, psdReader_1.readUint32)(reader));
678
+ const a = (0, psdReader_1.readUint8)(reader);
679
+ const r = (0, psdReader_1.readUint8)(reader);
680
+ const g = (0, psdReader_1.readUint8)(reader);
681
+ const b = (0, psdReader_1.readUint8)(reader);
682
+ const backgroundColorType = ((a + r + g + b) === 0) ? 'none' : (a === 0 ? 'matte' : 'color');
683
+ slices.push({
684
+ id, groupId, origin, associatedLayerId, name, target, message, altTag, cellTextIsHTML, cellText,
685
+ horizontalAlignment, verticalAlignment, type, url,
686
+ bounds: { top, left, bottom, right },
687
+ backgroundColorType, backgroundColor: { r, g, b, a },
688
+ });
689
+ }
690
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
691
+ desc.slices.forEach(d => {
692
+ const slice = slices.find(s => d.sliceID == s.id);
693
+ if (slice) {
694
+ slice.topOutset = d.topOutset;
695
+ slice.leftOutset = d.leftOutset;
696
+ slice.bottomOutset = d.bottomOutset;
697
+ slice.rightOutset = d.rightOutset;
698
+ }
699
+ });
700
+ }
701
+ else if (version === 7 || version === 8) {
702
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
703
+ if (!target.slices)
704
+ target.slices = [];
705
+ target.slices.push({
706
+ groupName: desc.baseName,
707
+ bounds: boundsFromBounds(desc.bounds),
708
+ slices: desc.slices.map(s => (Object.assign(Object.assign({}, (s['Nm '] ? { name: s['Nm '] } : {})), { id: s.sliceID, groupId: s.groupID, associatedLayerId: 0, origin: descriptor_1.ESliceOrigin.decode(s.origin), type: descriptor_1.ESliceType.decode(s.Type), bounds: boundsFromBounds(s.bounds), url: s.url, target: s.null, message: s.Msge, altTag: s.altTag, cellTextIsHTML: s.cellTextIsHTML, cellText: s.cellText, horizontalAlignment: descriptor_1.ESliceHorzAlign.decode(s.horzAlign), verticalAlignment: descriptor_1.ESliceVertAlign.decode(s.vertAlign), backgroundColorType: descriptor_1.ESliceBGColorType.decode(s.bgColorType), backgroundColor: s.bgColor ? { r: s.bgColor['Rd '], g: s.bgColor['Grn '], b: s.bgColor['Bl '], a: s.bgColor.alpha } : { r: 0, g: 0, b: 0, a: 0 }, topOutset: s.topOutset || 0, leftOutset: s.leftOutset || 0, bottomOutset: s.bottomOutset || 0, rightOutset: s.rightOutset || 0 }))),
709
+ });
710
+ }
711
+ else {
712
+ throw new Error(`Invalid slices version (${version})`);
713
+ }
714
+ }, (writer, target, index) => {
715
+ const { bounds, groupName, slices } = target.slices[index];
716
+ (0, psdWriter_1.writeUint32)(writer, 6); // version
717
+ (0, psdWriter_1.writeInt32)(writer, bounds.top);
718
+ (0, psdWriter_1.writeInt32)(writer, bounds.left);
719
+ (0, psdWriter_1.writeInt32)(writer, bounds.bottom);
720
+ (0, psdWriter_1.writeInt32)(writer, bounds.right);
721
+ (0, psdWriter_1.writeUnicodeString)(writer, groupName);
722
+ (0, psdWriter_1.writeUint32)(writer, slices.length);
723
+ for (let i = 0; i < slices.length; i++) {
724
+ const slice = slices[i];
725
+ let { a, r, g, b } = slice.backgroundColor;
726
+ if (slice.backgroundColorType === 'none') {
727
+ a = r = g = b = 0;
728
+ }
729
+ else if (slice.backgroundColorType === 'matte') {
730
+ a = 0;
731
+ r = g = b = 255;
732
+ }
733
+ (0, psdWriter_1.writeUint32)(writer, slice.id);
734
+ (0, psdWriter_1.writeUint32)(writer, slice.groupId);
735
+ (0, psdWriter_1.writeUint32)(writer, sliceOrigins.indexOf(slice.origin));
736
+ if (slice.origin === 'layer')
737
+ (0, psdWriter_1.writeUint32)(writer, slice.associatedLayerId);
738
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.name || '');
739
+ (0, psdWriter_1.writeUint32)(writer, sliceTypes.indexOf(slice.type));
740
+ (0, psdWriter_1.writeInt32)(writer, slice.bounds.left);
741
+ (0, psdWriter_1.writeInt32)(writer, slice.bounds.top);
742
+ (0, psdWriter_1.writeInt32)(writer, slice.bounds.right);
743
+ (0, psdWriter_1.writeInt32)(writer, slice.bounds.bottom);
744
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.url);
745
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.target);
746
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.message);
747
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.altTag);
748
+ (0, psdWriter_1.writeUint8)(writer, slice.cellTextIsHTML ? 1 : 0);
749
+ (0, psdWriter_1.writeUnicodeString)(writer, slice.cellText);
750
+ (0, psdWriter_1.writeUint32)(writer, sliceAlignments.indexOf(slice.horizontalAlignment));
751
+ (0, psdWriter_1.writeUint32)(writer, sliceAlignments.indexOf(slice.verticalAlignment));
752
+ (0, psdWriter_1.writeUint8)(writer, a);
753
+ (0, psdWriter_1.writeUint8)(writer, r);
754
+ (0, psdWriter_1.writeUint8)(writer, g);
755
+ (0, psdWriter_1.writeUint8)(writer, b);
756
+ }
757
+ const desc = {
758
+ bounds: boundsToBounds(bounds),
759
+ slices: [],
760
+ };
761
+ slices.forEach(s => {
762
+ const slice = Object.assign(Object.assign({ sliceID: s.id, groupID: s.groupId, origin: descriptor_1.ESliceOrigin.encode(s.origin), Type: descriptor_1.ESliceType.encode(s.type), bounds: boundsToBounds(s.bounds) }, (s.name ? { 'Nm ': s.name } : {})), { url: s.url, null: s.target, Msge: s.message, altTag: s.altTag, cellTextIsHTML: s.cellTextIsHTML, cellText: s.cellText, horzAlign: descriptor_1.ESliceHorzAlign.encode(s.horizontalAlignment), vertAlign: descriptor_1.ESliceVertAlign.encode(s.verticalAlignment), bgColorType: descriptor_1.ESliceBGColorType.encode(s.backgroundColorType) });
763
+ if (s.backgroundColorType === 'color') {
764
+ const { r, g, b, a } = s.backgroundColor;
765
+ slice.bgColor = { 'Rd ': r, 'Grn ': g, 'Bl ': b, alpha: a };
766
+ }
767
+ slice.topOutset = s.topOutset || 0;
768
+ slice.leftOutset = s.leftOutset || 0;
769
+ slice.bottomOutset = s.bottomOutset || 0;
770
+ slice.rightOutset = s.rightOutset || 0;
771
+ desc.slices.push(slice);
772
+ });
773
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc, 'slices');
774
+ });
775
+ addHandler(1064, target => target.pixelAspectRatio !== undefined, (reader, target) => {
776
+ if ((0, psdReader_1.readUint32)(reader) > 2)
777
+ throw new Error('Invalid pixelAspectRatio version');
778
+ target.pixelAspectRatio = { aspect: (0, psdReader_1.readFloat64)(reader) };
779
+ }, (writer, target) => {
780
+ (0, psdWriter_1.writeUint32)(writer, 2); // version
781
+ (0, psdWriter_1.writeFloat64)(writer, target.pixelAspectRatio.aspect);
782
+ });
783
+ addHandler(1041, target => target.iccUntaggedProfile !== undefined, (reader, target) => {
784
+ target.iccUntaggedProfile = !!(0, psdReader_1.readUint8)(reader);
785
+ }, (writer, target) => {
786
+ (0, psdWriter_1.writeUint8)(writer, target.iccUntaggedProfile ? 1 : 0);
787
+ });
788
+ helpers_1.MOCK_HANDLERS && addHandler(1039, // ICC Profile
789
+ // ICC Profile
790
+ target => target._ir1039 !== undefined, (reader, target, left) => {
791
+ // TODO: this is raw bytes, just return as a byte array
792
+ LOG_MOCK_HANDLERS && console.log('image resource 1039', left());
793
+ target._ir1039 = (0, psdReader_1.readBytes)(reader, left());
794
+ }, (writer, target) => {
795
+ (0, psdWriter_1.writeBytes)(writer, target._ir1039);
796
+ });
797
+ addHandler(1044, target => target.idsSeedNumber !== undefined, (reader, target) => target.idsSeedNumber = (0, psdReader_1.readUint32)(reader), (writer, target) => (0, psdWriter_1.writeUint32)(writer, target.idsSeedNumber));
798
+ addHandler(1036, target => target.thumbnail !== undefined || target.thumbnailRaw !== undefined, (reader, target, left) => {
799
+ const format = (0, psdReader_1.readUint32)(reader); // 1 = kJpegRGB, 0 = kRawRGB
800
+ const width = (0, psdReader_1.readUint32)(reader);
801
+ const height = (0, psdReader_1.readUint32)(reader);
802
+ (0, psdReader_1.readUint32)(reader); // widthBytes = (width * bits_per_pixel + 31) / 32 * 4.
803
+ (0, psdReader_1.readUint32)(reader); // totalSize = widthBytes * height * planes
804
+ (0, psdReader_1.readUint32)(reader); // sizeAfterCompression
805
+ const bitsPerPixel = (0, psdReader_1.readUint16)(reader); // 24
806
+ const planes = (0, psdReader_1.readUint16)(reader); // 1
807
+ if (format !== 1 || bitsPerPixel !== 24 || planes !== 1) {
808
+ reader.logMissingFeatures && reader.log(`Invalid thumbnail data (format: ${format}, bitsPerPixel: ${bitsPerPixel}, planes: ${planes})`);
809
+ (0, psdReader_1.skipBytes)(reader, left());
810
+ return;
811
+ }
812
+ const size = left();
813
+ const data = (0, psdReader_1.readBytes)(reader, size);
814
+ if (reader.useRawThumbnail) {
815
+ target.thumbnailRaw = { width, height, data };
816
+ }
817
+ else if (data.byteLength) {
818
+ target.thumbnail = (0, helpers_1.createCanvasFromData)(data);
819
+ }
820
+ }, (writer, target) => {
821
+ var _a;
822
+ let width = 0;
823
+ let height = 0;
824
+ let data = new Uint8Array(0);
825
+ if (target.thumbnailRaw) {
826
+ width = target.thumbnailRaw.width;
827
+ height = target.thumbnailRaw.height;
828
+ data = target.thumbnailRaw.data;
829
+ }
830
+ else {
831
+ try {
832
+ const dataUrl = (_a = target.thumbnail.toDataURL('image/jpeg', 1)) === null || _a === void 0 ? void 0 : _a.substring('data:image/jpeg;base64,'.length);
833
+ if (dataUrl) {
834
+ data = (0, base64_js_1.toByteArray)(dataUrl); // this sometimes fails for some reason, maybe some browser bugs
835
+ width = target.thumbnail.width;
836
+ height = target.thumbnail.height;
837
+ }
838
+ }
839
+ catch (_b) { }
840
+ }
841
+ const bitsPerPixel = 24;
842
+ const widthBytes = Math.floor((width * bitsPerPixel + 31) / 32) * 4;
843
+ const planes = 1;
844
+ const totalSize = widthBytes * height * planes;
845
+ const sizeAfterCompression = data.length;
846
+ (0, psdWriter_1.writeUint32)(writer, 1); // 1 = kJpegRGB
847
+ (0, psdWriter_1.writeUint32)(writer, width);
848
+ (0, psdWriter_1.writeUint32)(writer, height);
849
+ (0, psdWriter_1.writeUint32)(writer, widthBytes);
850
+ (0, psdWriter_1.writeUint32)(writer, totalSize);
851
+ (0, psdWriter_1.writeUint32)(writer, sizeAfterCompression);
852
+ (0, psdWriter_1.writeUint16)(writer, bitsPerPixel);
853
+ (0, psdWriter_1.writeUint16)(writer, planes);
854
+ (0, psdWriter_1.writeBytes)(writer, data);
855
+ });
856
+ addHandler(1057, target => target.versionInfo !== undefined, (reader, target, left) => {
857
+ const version = (0, psdReader_1.readUint32)(reader);
858
+ if (version !== 1)
859
+ throw new Error('Invalid versionInfo version');
860
+ target.versionInfo = {
861
+ hasRealMergedData: !!(0, psdReader_1.readUint8)(reader),
862
+ writerName: (0, psdReader_1.readUnicodeString)(reader),
863
+ readerName: (0, psdReader_1.readUnicodeString)(reader),
864
+ fileVersion: (0, psdReader_1.readUint32)(reader),
865
+ };
866
+ (0, psdReader_1.skipBytes)(reader, left());
867
+ }, (writer, target) => {
868
+ const versionInfo = target.versionInfo;
869
+ (0, psdWriter_1.writeUint32)(writer, 1); // version
870
+ (0, psdWriter_1.writeUint8)(writer, versionInfo.hasRealMergedData ? 1 : 0);
871
+ (0, psdWriter_1.writeUnicodeString)(writer, versionInfo.writerName);
872
+ (0, psdWriter_1.writeUnicodeString)(writer, versionInfo.readerName);
873
+ (0, psdWriter_1.writeUint32)(writer, versionInfo.fileVersion);
874
+ });
875
+ helpers_1.MOCK_HANDLERS && addHandler(1058, // EXIF data 1.
876
+ // EXIF data 1.
877
+ target => target._ir1058 !== undefined, (reader, target, left) => {
878
+ LOG_MOCK_HANDLERS && console.log('image resource 1058', left());
879
+ target._ir1058 = (0, psdReader_1.readBytes)(reader, left());
880
+ }, (writer, target) => {
881
+ (0, psdWriter_1.writeBytes)(writer, target._ir1058);
882
+ });
883
+ addHandler(7000, target => target.imageReadyVariables !== undefined, (reader, target, left) => {
884
+ target.imageReadyVariables = readUtf8String(reader, left());
885
+ }, (writer, target) => {
886
+ writeUtf8String(writer, target.imageReadyVariables);
887
+ });
888
+ addHandler(7001, target => target.imageReadyDataSets !== undefined, (reader, target, left) => {
889
+ target.imageReadyDataSets = readUtf8String(reader, left());
890
+ }, (writer, target) => {
891
+ writeUtf8String(writer, target.imageReadyDataSets);
892
+ });
893
+ addHandler(1088, target => target.pathSelectionState !== undefined, (reader, target, _left) => {
894
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
895
+ target.pathSelectionState = desc['null'];
896
+ }, (writer, target) => {
897
+ const desc = { 'null': target.pathSelectionState };
898
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
899
+ });
900
+ helpers_1.MOCK_HANDLERS && addHandler(1025, target => target._ir1025 !== undefined, (reader, target, left) => {
901
+ LOG_MOCK_HANDLERS && console.log('image resource 1025', left());
902
+ target._ir1025 = (0, psdReader_1.readBytes)(reader, left());
903
+ }, (writer, target) => {
904
+ (0, psdWriter_1.writeBytes)(writer, target._ir1025);
905
+ });
906
+ const FrmD = (0, helpers_1.createEnum)('FrmD', '', {
907
+ auto: 'Auto',
908
+ none: 'None',
909
+ dispose: 'Disp',
910
+ });
911
+ addHandler(4000, // Plug-In resource(s)
912
+ // Plug-In resource(s)
913
+ target => target.animations !== undefined, (reader, target, left) => {
914
+ const key = (0, psdReader_1.readSignature)(reader);
915
+ if (key === 'mani') {
916
+ (0, psdReader_1.checkSignature)(reader, 'IRFR');
917
+ (0, psdReader_1.readSection)(reader, 1, left => {
918
+ while (left() > 0) {
919
+ (0, psdReader_1.checkSignature)(reader, '8BIM');
920
+ const key = (0, psdReader_1.readSignature)(reader);
921
+ (0, psdReader_1.readSection)(reader, 1, left => {
922
+ if (key === 'AnDs') {
923
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
924
+ target.animations = {
925
+ // desc.AFSt ???
926
+ frames: desc.FrIn.map(x => ({
927
+ id: x.FrID,
928
+ delay: (x.FrDl || 0) / 100,
929
+ dispose: x.FrDs ? FrmD.decode(x.FrDs) : 'auto', // missing == auto
930
+ // x.FrGA ???
931
+ })),
932
+ animations: desc.FSts.map(x => ({
933
+ id: x.FsID,
934
+ frames: x.FsFr,
935
+ repeats: x.LCnt,
936
+ activeFrame: x.AFrm || 0,
937
+ })),
938
+ };
939
+ // console.log('#4000 AnDs', require('util').inspect(desc, false, 99, true));
940
+ // console.log('#4000 AnDs:result', require('util').inspect(target.animations, false, 99, true));
941
+ }
942
+ else if (key === 'Roll') {
943
+ const bytes = (0, psdReader_1.readBytes)(reader, left());
944
+ reader.logDevFeatures && reader.log('#4000 Roll', bytes);
945
+ }
946
+ else {
947
+ reader.logMissingFeatures && reader.log('Unhandled subsection in #4000', key);
948
+ }
949
+ });
950
+ }
951
+ });
952
+ }
953
+ else if (key === 'mopt') {
954
+ const bytes = (0, psdReader_1.readBytes)(reader, left());
955
+ reader.logDevFeatures && reader.log('#4000 mopt', bytes);
956
+ }
957
+ else {
958
+ reader.logMissingFeatures && reader.log('Unhandled key in #4000:', key);
959
+ }
960
+ }, (writer, target) => {
961
+ if (target.animations) {
962
+ (0, psdWriter_1.writeSignature)(writer, 'mani');
963
+ (0, psdWriter_1.writeSignature)(writer, 'IRFR');
964
+ (0, psdWriter_1.writeSection)(writer, 1, () => {
965
+ (0, psdWriter_1.writeSignature)(writer, '8BIM');
966
+ (0, psdWriter_1.writeSignature)(writer, 'AnDs');
967
+ (0, psdWriter_1.writeSection)(writer, 1, () => {
968
+ const desc = {
969
+ // AFSt: 0, // ???
970
+ FrIn: [],
971
+ FSts: [],
972
+ };
973
+ for (let i = 0; i < target.animations.frames.length; i++) {
974
+ const f = target.animations.frames[i];
975
+ const frame = {
976
+ FrID: f.id,
977
+ };
978
+ if (f.delay)
979
+ frame.FrDl = (f.delay * 100) | 0;
980
+ frame.FrDs = FrmD.encode(f.dispose);
981
+ // if (i === 0) frame.FrGA = 30; // ???
982
+ desc.FrIn.push(frame);
983
+ }
984
+ for (let i = 0; i < target.animations.animations.length; i++) {
985
+ const a = target.animations.animations[i];
986
+ const anim = {
987
+ FsID: a.id,
988
+ AFrm: a.activeFrame | 0,
989
+ FsFr: a.frames,
990
+ LCnt: a.repeats | 0,
991
+ };
992
+ desc.FSts.push(anim);
993
+ }
994
+ (0, descriptor_1.writeVersionAndDescriptor)(writer, '', 'null', desc);
995
+ });
996
+ // writeSignature(writer, '8BIM');
997
+ // writeSignature(writer, 'Roll');
998
+ // writeSection(writer, 1, () => {
999
+ // writeZeros(writer, 8);
1000
+ // });
1001
+ });
1002
+ }
1003
+ });
1004
+ // TODO: Unfinished
1005
+ helpers_1.MOCK_HANDLERS && addHandler(4001, // Plug-In resource(s)
1006
+ // Plug-In resource(s)
1007
+ target => target._ir4001 !== undefined, (reader, target, left) => {
1008
+ if (helpers_1.MOCK_HANDLERS) {
1009
+ LOG_MOCK_HANDLERS && console.log('image resource 4001', left());
1010
+ target._ir4001 = (0, psdReader_1.readBytes)(reader, left());
1011
+ return;
1012
+ }
1013
+ const key = (0, psdReader_1.readSignature)(reader);
1014
+ if (key === 'mfri') {
1015
+ const version = (0, psdReader_1.readUint32)(reader);
1016
+ if (version !== 2)
1017
+ throw new Error('Invalid mfri version');
1018
+ const length = (0, psdReader_1.readUint32)(reader);
1019
+ const bytes = (0, psdReader_1.readBytes)(reader, length);
1020
+ reader.logDevFeatures && reader.log('mfri', bytes);
1021
+ }
1022
+ else if (key === 'mset') {
1023
+ const desc = (0, descriptor_1.readVersionAndDescriptor)(reader);
1024
+ reader.logDevFeatures && reader.log('mset', desc);
1025
+ }
1026
+ else {
1027
+ reader.logMissingFeatures && reader.log('Unhandled key in #4001', key);
1028
+ }
1029
+ }, (writer, target) => {
1030
+ (0, psdWriter_1.writeBytes)(writer, target._ir4001);
1031
+ });
1032
+ // TODO: Unfinished
1033
+ helpers_1.MOCK_HANDLERS && addHandler(4002, // Plug-In resource(s)
1034
+ // Plug-In resource(s)
1035
+ target => target._ir4002 !== undefined, (reader, target, left) => {
1036
+ LOG_MOCK_HANDLERS && console.log('image resource 4002', left());
1037
+ target._ir4002 = (0, psdReader_1.readBytes)(reader, left());
1038
+ }, (writer, target) => {
1039
+ (0, psdWriter_1.writeBytes)(writer, target._ir4002);
1040
+ });
1080
1041
  //# sourceMappingURL=imageResources.js.map