Commit 959d4db9 authored by rockyl's avatar rockyl

提交

parent 9a995b61
...@@ -83,6 +83,7 @@ async function execute(psdFile, options) { ...@@ -83,6 +83,7 @@ async function execute(psdFile, options) {
}; };
const assets = []; const assets = [];
const imageHashMap = {};
await walkNode(tree, async function (node, parent) { await walkNode(tree, async function (node, parent) {
const {name, x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node; const {name, x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;
...@@ -146,7 +147,7 @@ async function execute(psdFile, options) { ...@@ -146,7 +147,7 @@ async function execute(psdFile, options) {
} else { } else {
viewNode.type = 'image'; viewNode.type = 'image';
const uuid = generateUUID(); let uuid = generateUUID();
const ext = '.png'; const ext = '.png';
const imageFilePath = path.join(imagesPath, uuid + ext); const imageFilePath = path.join(imagesPath, uuid + ext);
...@@ -157,18 +158,23 @@ async function execute(psdFile, options) { ...@@ -157,18 +158,23 @@ async function execute(psdFile, options) {
//await node.origin.saveAsPng(imageFilePath); //await node.origin.saveAsPng(imageFilePath);
if (buffer) { if (buffer) {
properties.source = 'asset://' + uuid; const fileNameHash = hash(buffer);
if (imageHashMap.hasOwnProperty(fileNameHash)) {
uuid = imageHashMap[fileNameHash];
} else {
imageHashMap[fileNameHash] = uuid;
assets.push({
name,
ext,
uuid,
hash: fileNameHash,
});
}
const hashFileName = hash(buffer); const hashFilePath = path.join(imagesPath, fileNameHash + ext);
const hashFilePath = path.join(imagesPath, hashFileName + ext);
await fs.rename(imageFilePath, hashFilePath); await fs.rename(imageFilePath, hashFilePath);
assets.push({ properties.source = 'asset://' + uuid;
name,
ext,
uuid,
hash: hashFileName,
});
} }
} }
} }
...@@ -211,7 +217,7 @@ function savePng(png, output) { ...@@ -211,7 +217,7 @@ function savePng(png, output) {
(async function generate() { (async function generate() {
const imagesPath = 'zeroing-demo/images_' + Date.now(); const imagesPath = 'zeroing-demo/images_' + Date.now();
const {view, assets} = await execute('psd/test3.psd', { const {view, assets} = await execute('psd/test4.psd', {
imagesPath, imagesPath,
}); });
......
{"version":3,"file":"generator.cjs.js","sources":["../../src/psd-tree.js","../../src/utils.js","../../src/zeroing.js","generator.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = require('psd');\n\nexport async function getTree(psdFilePath) {\n\tconst psd = await PSD.open(psdFilePath);\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport fs from \"fs-extra\";\nimport hash from 'object-hash';\n\nexport async function execute(psdFile, options) {\n\tconst {\n\t\timagesPath,\n\t} = options;\n\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tconst {name, x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\t//const fonts = fontInfo.fonts();\n\t\t\t//const styles = fontInfo.styles();\n\t\t\t//const {RunLengthArray} = fontInfo.engineData.EngineDict.StyleRun;\n\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\t/*properties.textflow = {\n\t\t\t\tfonts, styles, RunLengthArray,\n\t\t\t};*/\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor) {\n\t\t\tconst {r, g, b} = solidColor();\n\t\t\tlet color = Color({r, g, b});\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tproperties.fillColor = '#' + color.rgbNumber().toString(16);\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tconst uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tconst imageFilePath = path.join(imagesPath, uuid + ext);\n\t\t\t\tawait fs.ensureDir(path.dirname(imageFilePath));\n\t\t\t\tlet png = node.origin.toPng();\n\t\t\t\tlet buffer = await savePng(png, imageFilePath).catch(e => {\n\t\t\t\t});\n\t\t\t\t//await node.origin.saveAsPng(imageFilePath);\n\n\t\t\t\tif (buffer) {\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\n\t\t\t\t\tconst hashFileName = hash(buffer);\n\t\t\t\t\tconst hashFilePath = path.join(imagesPath, hashFileName + ext);\n\t\t\t\t\tawait fs.rename(imageFilePath, hashFilePath);\n\n\t\t\t\t\tassets.push({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\text,\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t\thash: hashFileName,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\treturn {\n\t\tview: viewRoot,\n\t\tassets,\n\t}\n}\n\nfunction savePng(png, output) {\n\treturn new Promise((resolve, reject) => {\n\t\tlet buffer, buffers = [];\n\t\tpng.pack()\n\t\t\t.on('error', reject)\n\t\t\t.on('data', (data) => buffers.push(data))\n\t\t\t.on('end', () => {\n\t\t\t\tbuffer = Buffer.concat(buffers)\n\t\t\t})\n\t\t\t.pipe(fs.createWriteStream(output))\n\t\t\t.on('finish', () => {\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t});\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nimport {toZeroing} from \"../../src/index\";\n\n(async function generate() {\n\tconst imagesPath = 'zeroing-demo/images_' + Date.now();\n\n\tconst {view, assets} = await toZeroing('psd/test3.psd', {\n\t\timagesPath,\n\t});\n\n\tconsole.log(assets);\n\tconsole.log(view);\n})();\n"],"names":["toZeroing"],"mappings":"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"} {"version":3,"file":"generator.cjs.js","sources":["../../src/psd-tree.js","../../src/utils.js","../../src/zeroing.js","generator.js"],"sourcesContent":["/**\n * Created by rockyl on 2019-08-09.\n */\n\nconst PSD = require('psd');\n\nexport async function getTree(psdFilePath) {\n\tconst psd = await PSD.open(psdFilePath);\n\tconst root = {};\n\twalk(psd.tree(), root);\n\n\treturn root;\n}\n\nfunction walk(psNode, dataNode) {\n\tconst {left: pLeft = 0, top: pTop = 0,} = psNode.parent || {};\n\tconst {left, top, width, height, name, layer: {opacity, visible}} = psNode;\n\tconst x = left - pLeft;\n\tconst y = top - pTop;\n\n\tObject.assign(dataNode, {x, y, width, height, alpha: opacity / 255, visible, name, origin: psNode, label: `${name} > [${x}, ${y}, ${width}, ${height}]`});\n\tif (psNode.children() && psNode.children().length > 0){\n\t\tdataNode.children = [];\n\t}\n\n\tlet children = psNode.children();\n\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\tconst childPsNode = children[i];\n\n\t\tconst childDataNode = {};\n\t\tdataNode.children.push(childDataNode);\n\t\twalk(childPsNode, childDataNode)\n\t}\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nexport async function walkNode(node, callback, includeSelf = false) {\n\tif (includeSelf) {\n\t\tawait callback(node, null);\n\t}\n\tif (node.children && node.children.length > 0) {\n\t\tfor (let childNode of node.children) {\n\t\t\tawait callback(childNode, node);\n\t\t\tconst result = await walkNode(childNode, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport async function walkObject(obj, callback) {\n\tif(typeof obj === \"object\"){\n\t\tfor (let key of Object.keys(obj)) {\n\t\t\tconst value = obj[key];\n\t\t\tawait callback(key, value, obj);\n\t\t\tconst result = await walkObject(value, callback);\n\t\t\tif (result === true) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Created by rockyl on 2019-09-26.\n *\n * 导出zeroing的视图\n */\n\nimport {getTree} from \"./psd-tree\";\nimport {walkNode} from \"./utils\";\nimport path from 'path'\nimport Color from 'color'\nimport generateUUID from 'uuid/v4'\nimport fs from \"fs-extra\";\nimport hash from 'object-hash';\n\nexport async function execute(psdFile, options) {\n\tconst {\n\t\timagesPath,\n\t} = options;\n\n\tconst tree = await getTree(psdFile);\n\n\tlet viewRoot = {\n\t\tname: path.basename(psdFile, '.psd'),\n\t\ttype: 'node',\n\t\tuuid: generateUUID(),\n\t};\n\n\tconst assets = [];\n\tconst imageHashMap = {};\n\n\tawait walkNode(tree, async function (node, parent) {\n\t\tconst {name, x, y, width, height, alpha, visible, origin: {layer, layer: {typeTool, solidColor}}} = node;\n\t\tlet properties = {\n\t\t\twidth, height, alpha, visible,\n\t\t};\n\t\tlet viewNode = {\n\t\t\tname,\n\t\t\tproperties,\n\t\t\tuuid: generateUUID(),\n\t\t};\n\t\tlet dealLater = true;\n\t\tif (x !== 0) {\n\t\t\tproperties.x = x;\n\t\t}\n\t\tif (y !== 0) {\n\t\t\tproperties.y = y;\n\t\t}\n\n\t\tif (typeTool) {\n\t\t\tlet fontInfo = typeTool();\n\t\t\t//const fonts = fontInfo.fonts();\n\t\t\t//const styles = fontInfo.styles();\n\t\t\t//const {RunLengthArray} = fontInfo.engineData.EngineDict.StyleRun;\n\n\t\t\tproperties.text = fontInfo.textValue;\n\t\t\tconst sizes = fontInfo.sizes();\n\t\t\tconst colors = fontInfo.colors();\n\t\t\tproperties.size = sizes ? sizes[0] || 20 : 20;\n\t\t\tlet [r, g, b, a] = colors[0];\n\t\t\tproperties.fillColor = `rgba(${r}, ${g}, ${b}, ${a / 255})`;\n\t\t\t/*properties.textflow = {\n\t\t\t\tfonts, styles, RunLengthArray,\n\t\t\t};*/\n\t\t\tviewNode.type = 'label';\n\t\t\tdealLater = false;\n\t\t} else if (solidColor) {\n\t\t\tconst {r, g, b} = solidColor();\n\t\t\tlet color = Color({r, g, b});\n\n\t\t\tlet paths = layer.vectorMask().paths;\n\t\t\tif (paths[2].numPoints === 4) {\n\t\t\t\tlet isRect = true;\n\t\t\t\tfor (let i = 3; i < paths.length; i++) {\n\t\t\t\t\tif (paths[i].recordType !== 2) {\n\t\t\t\t\t\tisRect = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isRect) {\n\t\t\t\t\tviewNode.type = 'rect';\n\t\t\t\t\tproperties.fillColor = '#' + color.rgbNumber().toString(16);\n\t\t\t\t\tdealLater = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dealLater) {\n\t\t\tif (node.hasOwnProperty('children')) {\n\t\t\t\tviewNode.type = 'node';\n\t\t\t} else {\n\t\t\t\tviewNode.type = 'image';\n\n\t\t\t\tlet uuid = generateUUID();\n\t\t\t\tconst ext = '.png';\n\n\t\t\t\tconst imageFilePath = path.join(imagesPath, uuid + ext);\n\t\t\t\tawait fs.ensureDir(path.dirname(imageFilePath));\n\t\t\t\tlet png = node.origin.toPng();\n\t\t\t\tlet buffer = await savePng(png, imageFilePath).catch(e => {\n\t\t\t\t});\n\t\t\t\t//await node.origin.saveAsPng(imageFilePath);\n\n\t\t\t\tif (buffer) {\n\t\t\t\t\tconst fileNameHash = hash(buffer);\n\t\t\t\t\tif (imageHashMap.hasOwnProperty(fileNameHash)) {\n\t\t\t\t\t\tuuid = imageHashMap[fileNameHash];\n\t\t\t\t\t} else {\n\t\t\t\t\t\timageHashMap[fileNameHash] = uuid;\n\t\t\t\t\t\tassets.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\text,\n\t\t\t\t\t\t\tuuid,\n\t\t\t\t\t\t\thash: fileNameHash,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hashFilePath = path.join(imagesPath, fileNameHash + ext);\n\t\t\t\t\tawait fs.rename(imageFilePath, hashFilePath);\n\n\t\t\t\t\tproperties.source = 'asset://' + uuid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet viewParent = parent.view || viewRoot;\n\t\tif (!viewParent.hasOwnProperty('children')) {\n\t\t\tviewParent.children = [];\n\t\t}\n\t\tviewParent.children.push(viewNode);\n\n\t\tnode.view = viewNode;\n\t});\n\n\treturn {\n\t\tview: viewRoot,\n\t\tassets,\n\t}\n}\n\nfunction savePng(png, output) {\n\treturn new Promise((resolve, reject) => {\n\t\tlet buffer, buffers = [];\n\t\tpng.pack()\n\t\t\t.on('error', reject)\n\t\t\t.on('data', (data) => buffers.push(data))\n\t\t\t.on('end', () => {\n\t\t\t\tbuffer = Buffer.concat(buffers)\n\t\t\t})\n\t\t\t.pipe(fs.createWriteStream(output))\n\t\t\t.on('finish', () => {\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t});\n}\n","/**\n * Created by rockyl on 2019-08-10.\n */\n\nimport {toZeroing} from \"../../src/index\";\n\n(async function generate() {\n\tconst imagesPath = 'zeroing-demo/images_' + Date.now();\n\n\tconst {view, assets} = await toZeroing('psd/test4.psd', {\n\t\timagesPath,\n\t});\n\n\tconsole.log(assets);\n\tconsole.log(view);\n})();\n"],"names":["toZeroing"],"mappings":"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"}
\ No newline at end of file \ No newline at end of file
...@@ -7,7 +7,7 @@ import {toZeroing} from "../../src/index"; ...@@ -7,7 +7,7 @@ import {toZeroing} from "../../src/index";
(async function generate() { (async function generate() {
const imagesPath = 'zeroing-demo/images_' + Date.now(); const imagesPath = 'zeroing-demo/images_' + Date.now();
const {view, assets} = await toZeroing('psd/test3.psd', { const {view, assets} = await toZeroing('psd/test4.psd', {
imagesPath, imagesPath,
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment