430 lines
14 KiB
JavaScript
430 lines
14 KiB
JavaScript
const app = window.require('photoshop').app
|
|
|
|
const batchPlay = require('photoshop').action.batchPlay
|
|
const psapi = require('./psapi')
|
|
|
|
// async function createGroup () {
|
|
// const { executeAsModal } = require('photoshop').core
|
|
|
|
// const result = await executeAsModal(async () => {
|
|
// const options = { name: 'myGroup', opacity: 100 }
|
|
// await app.activeDocument.createLayerGroup(options)
|
|
// })
|
|
// const group_id = app.activeDocument.activeLayers[0].id
|
|
// console.log('new group: ', group_id)
|
|
// return group_id
|
|
// }
|
|
|
|
// async function moveToGroupCommand (to_index, layerIDs) {
|
|
// const batchPlay = require('photoshop').action.batchPlay
|
|
// console.log('to_index:', to_index)
|
|
// console.log('layerIDs:', layerIDs)
|
|
|
|
// const result = await batchPlay(
|
|
// [
|
|
// {
|
|
// _obj: 'move',
|
|
// _target: [
|
|
// {
|
|
// _ref: 'layer',
|
|
// _enum: 'ordinal',
|
|
// _value: 'targetEnum'
|
|
// }
|
|
// ],
|
|
// to: {
|
|
// _ref: 'layer',
|
|
// _index: to_index
|
|
// },
|
|
// adjustment: false,
|
|
// version: 5,
|
|
// layerID: layerIDs,
|
|
// _options: {
|
|
// dialogOptions: 'dontDisplay'
|
|
// }
|
|
// }
|
|
// ],
|
|
// {
|
|
// synchronousExecution: false,
|
|
// modalBehavior: 'execute'
|
|
// }
|
|
// )
|
|
// }
|
|
|
|
async function moveLayersToGroup (group_id) {
|
|
const activeLayers = await app.activeDocument.activeLayers
|
|
const layerIDs = activeLayers.map(layer => layer.id)
|
|
const { executeAsModal } = require('photoshop').core
|
|
await executeAsModal(async () => {
|
|
await psapi.moveToGroupCommand(group_id, layerIDs)
|
|
})
|
|
}
|
|
|
|
// function unselectActiveLayers(){
|
|
|
|
// const layers = app.activeDocument.activeLayers
|
|
// for (layer of layers){
|
|
// layer.selected = false
|
|
// }
|
|
// }
|
|
|
|
// function selectLayers(layers){
|
|
|
|
// unselectActiveLayers()
|
|
// for (layer of layers){
|
|
// layer.selected = true
|
|
// }
|
|
// }
|
|
|
|
// function selectGroup(layer){
|
|
// unselectActiveLayers()
|
|
// layer.parent.selected = true
|
|
|
|
// }
|
|
|
|
// async function mergeGroup(layer){
|
|
// selectGroup(layer)
|
|
// await app.activeDocument.activeLayers[0].merge()
|
|
// }
|
|
|
|
async function createSnapshot () {
|
|
const { executeAsModal } = require('photoshop').core
|
|
//get all layers,
|
|
//duplicate the layers
|
|
//create a group
|
|
//move the duplicate layers to the group
|
|
let snapshotLayer,snapshotGroup;
|
|
try {
|
|
const selectionInfo = await psapi.getSelectionInfoExe()
|
|
await psapi.unSelectMarqueeExe()
|
|
|
|
//get all layers
|
|
const allLayers = await app.activeDocument.layers
|
|
|
|
// const allLayerNames = allLayers.map(
|
|
// layer => `${layer.name} (${layer.opacity} %)`
|
|
// )
|
|
// for (layer of allLayerNames){
|
|
// console.log(layer)
|
|
// }
|
|
//duplicate the layers
|
|
let duplicatedLayers = []
|
|
|
|
// const group_id = await createGroup()
|
|
const groupLayer = await psapi.createEmptyGroup()
|
|
|
|
console.log('createSnapshot(), group_id:', groupLayer.id)
|
|
// let bHasBackground = false
|
|
let indexOffset = 0
|
|
|
|
const result1 = await executeAsModal(async () => {
|
|
for (layer of allLayers) {
|
|
if (layer.id == 1) {
|
|
//skip the background layer
|
|
// bHasBackground = true
|
|
indexOffset = 1
|
|
continue
|
|
}
|
|
if (layer.visible){
|
|
|
|
const copyLayer = await layer.duplicate()
|
|
duplicatedLayers.push(copyLayer)
|
|
}
|
|
}
|
|
|
|
const layerIDs = duplicatedLayers.map(layer => layer.id)
|
|
console.log('createSnapshot, layerIDs:', layerIDs)
|
|
|
|
//select the layer since layerIDs don't seem to have an affect on moveToGroupCommand(), don't know why!!!!
|
|
psapi.selectLayers(duplicatedLayers)
|
|
let group_index = await psapi.getLayerIndex(groupLayer.id)
|
|
|
|
await psapi.moveToGroupCommand(group_index - indexOffset, layerIDs)
|
|
|
|
await psapi.collapseGroup(duplicatedLayers[0])
|
|
snapshotLayer = app.activeDocument.activeLayers[0]
|
|
await psapi.createSolidLayer(255, 255, 255)
|
|
const whiteSolidLayer = app.activeDocument.activeLayers[0]
|
|
await snapshotLayer.moveAbove(whiteSolidLayer)
|
|
snapshotGroup = await psapi.createEmptyGroup()
|
|
let snapshot_group_index = await psapi.getLayerIndex(snapshotGroup.id)
|
|
|
|
await psapi.selectLayers([snapshotLayer, whiteSolidLayer])
|
|
await psapi.moveToGroupCommand(snapshot_group_index - indexOffset, [])
|
|
await psapi.selectLayers([snapshotGroup])
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
await psapi.createMaskExe()
|
|
// await psapi.selectLayerChannelCommand()
|
|
// await psapi.createSolidLayer(0, 0, 0)
|
|
|
|
|
|
})
|
|
|
|
return [snapshotLayer,snapshotGroup]
|
|
|
|
} catch (e) {
|
|
console.log('createSnapshot Error:', e)
|
|
}
|
|
}
|
|
|
|
function executeCommand (batchPlayCommandFunc) {
|
|
const { executeAsModal } = require('photoshop').core
|
|
try {
|
|
executeAsModal(async () => {
|
|
await batchPlayCommandFunc()
|
|
})
|
|
} catch (e) {
|
|
console.log('executeCommand error:', e)
|
|
}
|
|
}
|
|
|
|
|
|
async function outpaintExe(){
|
|
//create a snapshot of canvas
|
|
//select opaque pixel and create black fill layer
|
|
//create a snapshot of mask
|
|
//set initial image
|
|
//set mask image
|
|
|
|
try{
|
|
executeAsModal(async ()=>{
|
|
|
|
const selectionInfo = await psapi.getSelectionInfoExe()
|
|
// await psapi.unSelectMarqueeExe()
|
|
|
|
//create a snapshot of canvas
|
|
let [snapshotLayer,snapshotGroup] = await createSnapshot()
|
|
console.log("[snapshotLayer,snapshotGroup]:",[snapshotLayer,snapshotGroup])
|
|
//select opaque pixel and create black fill layer
|
|
await psapi.selectLayers([snapshotLayer])
|
|
await psapi.selectLayerChannelCommand()
|
|
await psapi.createSolidLayer(0, 0, 0)
|
|
let solid_black_layer = app.activeDocument.activeLayers[0]
|
|
//create a snapshot of mask
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
let [snapshotMaskLayer,snapshotMaskGroup] = await createSnapshot()
|
|
await snapshotMaskGroup.moveAbove(snapshotGroup)
|
|
solid_black_layer.delete()
|
|
//set initial image
|
|
//set mask image
|
|
|
|
})
|
|
|
|
}catch(e){
|
|
|
|
}
|
|
}
|
|
|
|
async function snapAndFillExe(session_id){
|
|
//create a snapshot of canvas
|
|
//select opaque pixel and create black fill layer
|
|
//create a snapshot of mask
|
|
//set initial image
|
|
//set mask image
|
|
|
|
try{
|
|
let snapAndFillLayers = []
|
|
await executeAsModal(async ()=>{
|
|
|
|
const selectionInfo = await psapi.getSelectionInfoExe()
|
|
// await psapi.unSelectMarqueeExe()
|
|
|
|
//create a snapshot of canvas
|
|
// let [snapshotLayer,snapshotGroup] = await createSnapshot()
|
|
await psapi.snapshot_layer()
|
|
const snapshotLayer = await app.activeDocument.activeLayers[0]
|
|
const snapshotGroup = await psapi.createEmptyGroup()
|
|
|
|
|
|
snapshotGroup.name = `${snapshotGroup.name}_init_image`
|
|
await psapi.createSolidLayer(255, 255, 255)
|
|
const whiteSolidLayer = await app.activeDocument.activeLayers[0]
|
|
snapshotLayer.moveAbove(whiteSolidLayer)
|
|
console.log("[snapshotLayer,snapshotGroup]:",[snapshotLayer,snapshotGroup])
|
|
|
|
|
|
//create a snapshot of mask
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
// let [snapshotMaskLayer,snapshotMaskGroup] = await createSnapshot()
|
|
|
|
await psapi.selectLayers([snapshotGroup])
|
|
await psapi.setInitImage(snapshotGroup,session_id)
|
|
|
|
// await psapi.selectLayers([snapshotMaskGroup])
|
|
// await psapi.setInitImageMask(snapshotMaskGroup,session_id)
|
|
//set initial image
|
|
//set mask image
|
|
snapAndFillLayers = [snapshotLayer,snapshotGroup,whiteSolidLayer]
|
|
|
|
for (layer of snapAndFillLayers){
|
|
layer.visible = false
|
|
}
|
|
})
|
|
console.log("snapAndFillLayers: ", snapAndFillLayers)
|
|
return snapAndFillLayers
|
|
}catch(e){
|
|
console.error(`snapAndFill error: ${e}`)
|
|
|
|
// console.log("outpaintFasterExe error:", e)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function outpaintFasterExe(session_id){
|
|
//create a snapshot of canvas
|
|
//select opaque pixel and create black fill layer
|
|
//create a snapshot of mask
|
|
//set initial image
|
|
//set mask image
|
|
|
|
try{
|
|
let outpaintLayers = []
|
|
await executeAsModal(async ()=>{
|
|
|
|
const selectionInfo = await psapi.getSelectionInfoExe()
|
|
// await psapi.unSelectMarqueeExe()
|
|
|
|
//create a snapshot of canvas
|
|
// let [snapshotLayer,snapshotGroup] = await createSnapshot()
|
|
await psapi.snapshot_layer()
|
|
const snapshotLayer = await app.activeDocument.activeLayers[0]
|
|
const snapshotGroup = await psapi.createEmptyGroup()
|
|
snapshotGroup.name = `${snapshotGroup.name}_init_image`
|
|
await psapi.createSolidLayer(255, 255, 255)
|
|
const whiteSolidLayer = await app.activeDocument.activeLayers[0]
|
|
snapshotLayer.moveAbove(whiteSolidLayer)
|
|
console.log("[snapshotLayer,snapshotGroup]:",[snapshotLayer,snapshotGroup])
|
|
|
|
//select opaque pixel and create black fill layer
|
|
await psapi.selectLayers([snapshotLayer])
|
|
await psapi.selectLayerChannelCommand()
|
|
const snapshotMaskGroup = await psapi.createEmptyGroup()
|
|
|
|
await psapi.createSolidLayer(0, 0, 0)
|
|
let solid_black_layer = app.activeDocument.activeLayers[0]
|
|
//create a snapshot of mask
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
// let [snapshotMaskLayer,snapshotMaskGroup] = await createSnapshot()
|
|
await psapi.snapshot_layer()
|
|
const snapshotMaskLayer = await app.activeDocument.activeLayers[0]
|
|
// const snapshotMaskGroup = await psapi.createEmptyGroup()
|
|
|
|
snapshotMaskGroup.name = `${snapshotMaskGroup.name}_mask`
|
|
snapshotMaskLayer.moveBelow(solid_black_layer)
|
|
await snapshotMaskGroup.moveAbove(snapshotGroup)
|
|
solid_black_layer.delete()
|
|
|
|
|
|
await psapi.selectLayers([snapshotGroup])
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
await psapi.createClippingMaskExe()
|
|
await psapi.selectLayers([snapshotGroup])
|
|
await psapi.setInitImage(snapshotGroup,session_id)
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
|
|
await psapi.selectLayers([snapshotMaskGroup])
|
|
await psapi.setInitImageMask(snapshotMaskGroup,session_id)
|
|
//set initial image
|
|
//set mask image
|
|
outpaintLayers = [snapshotMaskGroup,snapshotMaskLayer,snapshotLayer,snapshotGroup,whiteSolidLayer]
|
|
for (layer of outpaintLayers){
|
|
layer.visible = false
|
|
}
|
|
})
|
|
console.log("outpaintLayers 2: ", outpaintLayers)
|
|
return outpaintLayers
|
|
}catch(e){
|
|
console.error(`outpaintFasterExe error: ${e}`)
|
|
|
|
// console.log("outpaintFasterExe error:", e)
|
|
}
|
|
|
|
}
|
|
|
|
async function inpaintFasterExe(session_id){
|
|
//
|
|
//create a snapshot of canvas
|
|
//select opaque pixel and create black fill layer
|
|
//create a snapshot of mask
|
|
//set initial image
|
|
//set mask image
|
|
try{
|
|
let inpaintLayers = []
|
|
await executeAsModal(async ()=>{
|
|
|
|
const selectionInfo = await psapi.getSelectionInfoExe()
|
|
|
|
//hide the current white mark mask layer
|
|
const white_mark_layer = app.activeDocument.activeLayers[0]
|
|
white_mark_layer.visible = false
|
|
|
|
//create a snapshot of canvas
|
|
|
|
// let [snapshotLayer,snapshotGroup] = await createSnapshot()
|
|
await psapi.snapshot_layer()
|
|
const snapshotLayer = await app.activeDocument.activeLayers[0]
|
|
const maskGroup = await psapi.createEmptyGroup()
|
|
maskGroup.name = `${maskGroup.name}_mask`
|
|
await psapi.createSolidLayer(0, 0, 0)
|
|
const blackSolidLayer = await app.activeDocument.activeLayers[0]
|
|
// snapshotLayer.moveAbove(blackSolidLayer)
|
|
white_mark_layer.moveAbove(blackSolidLayer)
|
|
// snapshotLayer.moveAbove(blackSolidLayer)
|
|
white_mark_layer.visible = true
|
|
await psapi.reSelectMarqueeExe(selectionInfo)
|
|
|
|
console.log("[snapshotLayer,maskGroup]:",[snapshotLayer,maskGroup])
|
|
// //select opaque pixel and create black fill layer
|
|
// await psapi.selectLayers([snapshotLayer])
|
|
// await psapi.selectLayerChannelCommand()
|
|
// const snapshotMaskGroup = await psapi.createEmptyGroup()
|
|
|
|
// await psapi.createSolidLayer(0, 0, 0)
|
|
// let solid_black_layer = app.activeDocument.activeLayers[0]
|
|
// //create a snapshot of mask
|
|
// await psapi.reSelectMarqueeExe(selectionInfo)
|
|
// // let [snapshotMaskLayer,snapshotMaskGroup] = await createSnapshot()
|
|
// await psapi.snapshot_layer()
|
|
// const snapshotMaskLayer = await app.activeDocument.activeLayers[0]
|
|
// // const snapshotMaskGroup = await psapi.createEmptyGroup()
|
|
|
|
// snapshotMaskGroup.name = `${snapshotMaskGroup.name}_mask`
|
|
// snapshotMaskLayer.moveBelow(solid_black_layer)
|
|
// await snapshotMaskGroup.moveAbove(snapshotGroup)
|
|
// solid_black_layer.delete()
|
|
|
|
await psapi.selectLayers([maskGroup])
|
|
await psapi.setInitImageMask(maskGroup,session_id)
|
|
|
|
await psapi.selectLayers([snapshotLayer])
|
|
await psapi.setInitImage(snapshotLayer,session_id)
|
|
|
|
// await psapi.selectLayers([snapshotMaskGroup])
|
|
// await psapi.setInitImageMask(snapshotMaskGroup)
|
|
// //set initial image
|
|
// //set mask image
|
|
|
|
psapi.selectLayers([maskGroup])
|
|
inpaintLayers = [maskGroup,white_mark_layer,snapshotLayer,blackSolidLayer]
|
|
for (layer of inpaintLayers){
|
|
layer.visible = false
|
|
}
|
|
})
|
|
return inpaintLayers
|
|
}catch(e){
|
|
console.log("inpaintFasterExe error:", e)
|
|
}
|
|
}
|
|
module.exports = {
|
|
createSnapshot,
|
|
|
|
moveLayersToGroup,
|
|
executeCommand,
|
|
outpaintExe,
|
|
outpaintFasterExe,
|
|
inpaintFasterExe,
|
|
snapAndFillExe
|
|
}
|
|
|