feat(aklive2d): added a logic to handle images that does not require alpha composite
This commit is contained in:
@@ -28,4 +28,8 @@ export default class AlphaComposite {
|
|||||||
return await sharp(newImage).rotate(rotate).toBuffer()
|
return await sharp(newImage).rotate(rotate).toBuffer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async toBuffer(filename, extractedDir) {
|
||||||
|
return await sharp(path.join(extractedDir, filename)).toBuffer()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable no-undef */
|
/* eslint-disable no-undef */
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { read, write, readSync } from './file.js'
|
import { read, write, readSync, exists, copy } from './file.js'
|
||||||
import AlphaComposite from './alpha_composite.js'
|
import AlphaComposite from './alpha_composite.js'
|
||||||
|
|
||||||
export default class AssetsProcessor {
|
export default class AssetsProcessor {
|
||||||
@@ -19,8 +19,13 @@ export default class AssetsProcessor {
|
|||||||
async process(extractedDir) {
|
async process(extractedDir) {
|
||||||
const fallback_name = __config.operators[this.#operatorName].fallback_name
|
const fallback_name = __config.operators[this.#operatorName].fallback_name
|
||||||
const fallbackFilename = `${fallback_name}.png`
|
const fallbackFilename = `${fallback_name}.png`
|
||||||
const fallbackBuffer = await this.#alphaCompositer.process(fallbackFilename, `${path.parse(fallbackFilename).name}[alpha].png`, extractedDir)
|
const alphaCompositeFilename = `${path.parse(fallbackFilename).name}[alpha].png`
|
||||||
await write(fallbackBuffer, path.join(this.#operatorSourceFolder, this.#operatorName, fallbackFilename))
|
if (exists(path.join(extractedDir, alphaCompositeFilename))) {
|
||||||
|
const fallbackBuffer = await this.#alphaCompositer.process(fallbackFilename, alphaCompositeFilename, extractedDir)
|
||||||
|
await write(fallbackBuffer, path.join(this.#operatorSourceFolder, this.#operatorName, fallbackFilename))
|
||||||
|
} else {
|
||||||
|
await copy(path.join(extractedDir, fallbackFilename), path.join(this.#operatorSourceFolder, this.#operatorName, fallbackFilename))
|
||||||
|
}
|
||||||
|
|
||||||
// generate portrait
|
// generate portrait
|
||||||
const portraitDir = path.join(this.#shareFolder, "portraits")
|
const portraitDir = path.join(this.#shareFolder, "portraits")
|
||||||
@@ -51,7 +56,13 @@ export default class AssetsProcessor {
|
|||||||
const dimensions = atlas.match(new RegExp(/^size:(.*),(.*)/gm))[0].replace('size: ', '').split(',')
|
const dimensions = atlas.match(new RegExp(/^size:(.*),(.*)/gm))[0].replace('size: ', '').split(',')
|
||||||
const matches = atlas.match(new RegExp(/(.*).png/g))
|
const matches = atlas.match(new RegExp(/(.*).png/g))
|
||||||
for (const item of matches) {
|
for (const item of matches) {
|
||||||
const buffer = await this.#alphaCompositer.process(item, `${path.parse(item).name}[alpha].png`, extractedDir)
|
let buffer;
|
||||||
|
const alphaCompositeFilename = `${path.parse(item).name}[alpha].png`
|
||||||
|
if (exists(path.join(extractedDir, alphaCompositeFilename))) {
|
||||||
|
buffer = await this.#alphaCompositer.process(item, alphaCompositeFilename, extractedDir)
|
||||||
|
} else {
|
||||||
|
buffer = await this.#alphaCompositer.toBuffer(item, extractedDir)
|
||||||
|
}
|
||||||
assetsJson[`./assets/${item}`] = BASE64_PNG_PREFIX + buffer.toString('base64')
|
assetsJson[`./assets/${item}`] = BASE64_PNG_PREFIX + buffer.toString('base64')
|
||||||
}
|
}
|
||||||
assetsJson[`./assets/${skelFilename.replace('#', '%23')}`] = BASE64_BINARY_PREFIX + skel.toString('base64')
|
assetsJson[`./assets/${skelFilename.replace('#', '%23')}`] = BASE64_BINARY_PREFIX + skel.toString('base64')
|
||||||
|
|||||||
Reference in New Issue
Block a user