From 5a1bb9d7b21733e0dbc1fd5d9e536d977be99bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Nanninga?= Date: Sat, 13 Feb 2021 17:07:57 +0100 Subject: [PATCH] Add option to set flat preview layout 'horizontal'/'vertical' --- README.md | 3 ++- src/cli.js | 4 +++- src/converter.js | 31 +++++++++++++++++++++++++------ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 37fa710..a28cc2b 100755 --- a/README.md +++ b/README.md @@ -59,7 +59,8 @@ Options: -pcp, --previewCubePath Path and name of preview image (default: "preview.q.jpg") -pcq, --previewCubeJpgQuality Preview quality in percent (default: "85") -pfp, --previewFlatPath Path and name of preview image (default: "preview.f.jpg") - -pfo, --previewFlatOrder Face order from left to right (default: "bdflru") + -pfo, --previewFlatOrder Face order in the given layout direction (default: "bdflru") + -pfl, --previewFlatLayout Face order direction, horizontal or vertical, "horizontal" -pfq, --previewFlatJpgQuality Preview quality in percent (default: "85") -psp, --previewScaledPath Path and name of preview image (default: "preview.s.jpg") -psf, --previewScaledFactor Factor for one Downscaling (default: "1.4142135623730951") diff --git a/src/cli.js b/src/cli.js index 7bbab2f..0d450e8 100755 --- a/src/cli.js +++ b/src/cli.js @@ -42,7 +42,8 @@ program .option('-pcp, --previewCubePath ', 'Path and name of preview image', 'preview.q.jpg') .option('-pcq, --previewCubeJpgQuality ', 'Preview quality in percent', '85') .option('-pfp, --previewFlatPath ', 'Path and name of preview image', 'preview.f.jpg') - .option('-pfo, --previewFlatOrder ', 'Face order from left to right', 'bdflru') + .option('-pfo, --previewFlatOrder ', 'Face order in the given layout direction', 'bdflru') + .option('-pfl, --previewFlatLayout ', 'Face order direction, horizontal or vertical', 'horizontal') .option('-pfq, --previewFlatJpgQuality ', 'Preview quality in percent', '85') .option('-psp, --previewScaledPath ', 'Path and name of preview image', 'preview.s.jpg') .option('-psf, --previewScaledFactor ', 'Factor for one Downscaling', '2') @@ -125,6 +126,7 @@ if (program.source.endsWith('.json')) { previewFlatPath: program.previewFlatPath, previewFlatJpgQuality: parseInt(program.previewFlatJpgQuality, 10), previewFlatOrder: program.previewFlatOrder, + previewFlatLayout: program.previewFlatLayout, previewScaledPath: program.previewScaledPath, previewScaledFactor: parseFloat(program.previewScaledFactor), previewScaledJpgQuality: parseInt(program.previewScaledJpgQuality, 10), diff --git a/src/converter.js b/src/converter.js index 72ea3d0..94480a4 100755 --- a/src/converter.js +++ b/src/converter.js @@ -375,21 +375,40 @@ function previewCube(config, srcImage, outerWidth, xOff, yOff, previewCubedPath) function previewFlat(config, srcImage, outerWidth, xOff, yOff, previewCubedPath) { const sw = new Stopwatch().begin(); - const faceW = Math.floor(config.previewWidth / 6); + let faceW; + let faceH; + let faceSize; + + if (config.previewFlatLayout === 'vertical') { + faceW = Math.floor(config.previewWidth); + faceH = Math.floor(config.previewWidth) * 6; + faceSize = Math.floor(config.previewWidth); + } else { + faceW = Math.floor(config.previewWidth / 6) * 6; + faceH = Math.floor(config.previewWidth / 6); + faceSize = Math.floor(config.previewWidth / 6); + } + console.log() console.log('+------------------------------------------------------------------------') - console.log(`| Render flat preview(${faceW * 6}x${faceW}; xOff: ${xOff}, yOff:${yOff})`) + console.log(`| Render flat preview(${faceW}x${faceH}; xOff: ${xOff}, yOff:${yOff})`) console.log('+------------------------------------------------------------------------') - const result = new IMG().create(faceW * 6, faceW); + const result = new IMG().create(faceW, faceH); const faceRenderer = new FaceRenderer(srcImage, outerWidth, xOff, yOff); let faceOffset = 0; for (const f of config.previewFlatOrder) { const face = defaultFaceNames[f]; - let faceImg = faceRenderer.render(face.index, faceW); - result.drawImg(faceImg, faceOffset, 0); - faceOffset += faceW; + let faceImg = faceRenderer.render(face.index, faceSize); + + if (config.previewFlatLayout === 'vertical') { + result.drawImg(faceImg, 0, faceOffset); + } else { + result.drawImg(faceImg, faceOffset, 0); + } + + faceOffset += faceSize; } result.write(previewCubedPath, {jpgQuality: config.previewFlatJpgQuality});