Add an option to the masking settings to choose whether or not to use the colorRange()
parent
7410e88423
commit
98706917c3
1
index.js
1
index.js
|
|
@ -77,6 +77,7 @@ const {
|
|||
sam,
|
||||
settings_tab_ts,
|
||||
one_button_prompt,
|
||||
enum_ts,
|
||||
} = require('./typescripts/dist/bundle')
|
||||
|
||||
const io = require('./utility/io')
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
"@types/photoshop": "^24.5.1",
|
||||
"@types/react": "^18.2.6",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"changedpi": "^1.0.4",
|
||||
"fastify": "^4.10.2",
|
||||
"jimp": "^0.16.2",
|
||||
"madge": "^6.0.0",
|
||||
|
|
@ -3879,6 +3880,11 @@
|
|||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/changedpi": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/changedpi/-/changedpi-1.0.4.tgz",
|
||||
"integrity": "sha512-9r6MNQrbg+cFURvEy10wo9Q35PD5GVj2GvXCbUYv8mU0Uf/NbkR7KlzMrjT4Ycd8a2nxApFJXQX2lTOPRFyG2g=="
|
||||
},
|
||||
"node_modules/charenc": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
|
||||
|
|
@ -12180,6 +12186,11 @@
|
|||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"changedpi": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/changedpi/-/changedpi-1.0.4.tgz",
|
||||
"integrity": "sha512-9r6MNQrbg+cFURvEy10wo9Q35PD5GVj2GvXCbUYv8mU0Uf/NbkR7KlzMrjT4Ycd8a2nxApFJXQX2lTOPRFyG2g=="
|
||||
},
|
||||
"charenc": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
"@types/photoshop": "^24.5.1",
|
||||
"@types/react": "^18.2.6",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"changedpi": "^1.0.4",
|
||||
"fastify": "^4.10.2",
|
||||
"jimp": "^0.16.2",
|
||||
"madge": "^6.0.0",
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
declare module 'changedpi'
|
||||
|
|
@ -19,5 +19,5 @@ export * as sd_tab_ts from './sd_tab/sd_tab'
|
|||
export * as sam from './sam/sam'
|
||||
export * as settings_tab_ts from './settings/settings'
|
||||
export * as one_button_prompt from './one_button_prompt/one_button_prompt'
|
||||
|
||||
export * as enum_ts from './util/ts/enum'
|
||||
export { toJS } from 'mobx'
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import {
|
|||
import { app } from 'photoshop'
|
||||
import { ErrorBoundary } from '../util/errorBoundary'
|
||||
import Locale from '../locale/locale'
|
||||
import { settings_tab_ts } from '../entry'
|
||||
declare let g_sd_url: string
|
||||
|
||||
export async function getSamMap(base64: string, prompt: string) {
|
||||
|
|
@ -119,30 +120,32 @@ export class Sam extends React.Component<{
|
|||
ComponentType: PenSvg,
|
||||
callback: async (index: number) => {
|
||||
try {
|
||||
// await psapi.unSelectMarqueeExe()
|
||||
// const base64 = general.base64UrlToBase64(
|
||||
// store.data.thumbnails[index]
|
||||
// )
|
||||
await psapi.unSelectMarqueeExe()
|
||||
const base64 = general.base64UrlToBase64(
|
||||
store.data.thumbnails[index]
|
||||
)
|
||||
|
||||
// await selectionFromBlackAndWhiteImage(
|
||||
// base64,
|
||||
// store.data.selection_info_list[index]
|
||||
// )
|
||||
await selectionFromBlackAndWhiteImage(
|
||||
base64,
|
||||
store.data.selection_info_list[index],
|
||||
settings_tab_ts.store.data
|
||||
.b_borders_or_corners
|
||||
)
|
||||
|
||||
try {
|
||||
const base64 =
|
||||
general.base64UrlToBase64(
|
||||
store.data.thumbnails[index]
|
||||
)
|
||||
await selection.base64ToLassoSelection(
|
||||
base64,
|
||||
store.data.selection_info_list[
|
||||
index
|
||||
]
|
||||
)
|
||||
} catch (e) {
|
||||
console.warn(e)
|
||||
}
|
||||
// try {
|
||||
// const base64 =
|
||||
// general.base64UrlToBase64(
|
||||
// store.data.thumbnails[index]
|
||||
// )
|
||||
// await selection.base64ToLassoSelection(
|
||||
// base64,
|
||||
// store.data.selection_info_list[
|
||||
// index
|
||||
// ]
|
||||
// )
|
||||
// } catch (e) {
|
||||
// console.warn(e)
|
||||
// }
|
||||
//@ts-ignore
|
||||
await eventHandler() // this will trigger the recalculation of the width and height sliders
|
||||
} catch (e) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import { io } from '../util/oldSystem'
|
|||
import { reaction } from 'mobx'
|
||||
import { storage } from 'uxp'
|
||||
import { ErrorBoundary } from '../util/errorBoundary'
|
||||
import { MaskModeEnum } from '../util/ts/enum'
|
||||
// import { Jimp } from '../util/oldSystem'
|
||||
declare const Jimp: any // make sure you import jimp before importing settings.tsx
|
||||
|
||||
|
|
@ -40,7 +41,7 @@ export const store = new AStore({
|
|||
should_log_to_file:
|
||||
JSON.parse(storage.localStorage.getItem('should_log_to_file')) || false,
|
||||
delete_log_file_timer_id: null,
|
||||
b_borders_or_corners: false,
|
||||
b_borders_or_corners: MaskModeEnum.Transparent,
|
||||
})
|
||||
|
||||
function onShouldLogToFileChange(event: any) {
|
||||
|
|
@ -138,17 +139,19 @@ export class Settings extends React.Component<{}> {
|
|||
style={{ display: 'flex' }}
|
||||
selected={store.data.b_borders_or_corners}
|
||||
onClick={(event: any) => {
|
||||
store.data.b_borders_or_corners = JSON.parse(
|
||||
event.target.value
|
||||
)
|
||||
store.data.b_borders_or_corners = event.target.value
|
||||
}}
|
||||
>
|
||||
<sp-label slot="label">
|
||||
{Locale('Mask Layer Mode:')}
|
||||
</sp-label>
|
||||
{[
|
||||
{ label: 'keep borders', value: false },
|
||||
{ label: 'keep corners', value: true },
|
||||
{
|
||||
label: 'fully transparent',
|
||||
value: MaskModeEnum.Transparent,
|
||||
},
|
||||
{ label: 'keep borders', value: MaskModeEnum.Borders },
|
||||
{ label: 'keep corners', value: MaskModeEnum.Corners },
|
||||
].map((mode: any, index: number) => {
|
||||
console.log('mode:', mode.label, ' index:', index)
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -7,3 +7,9 @@ export enum GenerationModeEnum {
|
|||
LassoInpaint = 'lasso_inpaint',
|
||||
LassoOutpaint = 'lasso_outpaint',
|
||||
}
|
||||
|
||||
export enum MaskModeEnum {
|
||||
Transparent = 'transparent',
|
||||
Borders = 'border',
|
||||
Corners = 'corner',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { io, layer_util } from '../oldSystem'
|
|||
import { session_ts } from '../../entry'
|
||||
|
||||
import { action, core } from 'photoshop'
|
||||
import { MaskModeEnum } from './enum'
|
||||
const executeAsModal = core.executeAsModal
|
||||
const batchPlay = action.batchPlay
|
||||
|
||||
|
|
@ -10,7 +11,7 @@ export async function applyMaskFromBlackAndWhiteImage(
|
|||
black_and_white_base64: string,
|
||||
layer_id: any,
|
||||
selectionInfo: any,
|
||||
b_borders_or_corners: boolean = false
|
||||
b_borders_or_corners: MaskModeEnum = MaskModeEnum.Transparent
|
||||
) {
|
||||
let mask_layer
|
||||
try {
|
||||
|
|
@ -100,7 +101,7 @@ export async function applyMaskFromBlackAndWhiteImage(
|
|||
export async function selectionFromBlackAndWhiteImage(
|
||||
black_and_white_base64: string,
|
||||
selectionInfo: any,
|
||||
b_borders_or_corners: boolean = false
|
||||
b_borders_or_corners: MaskModeEnum = MaskModeEnum.Transparent
|
||||
) {
|
||||
let mask_layer
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { io, layer_util, selection } from '../util/oldSystem'
|
|||
import Collapsible from '../after_detailer/after_detailer'
|
||||
import { progress, session_ts, settings_tab_ts } from '../entry'
|
||||
import { reaction } from 'mobx'
|
||||
import { GenerationModeEnum } from '../util/ts/enum'
|
||||
import { GenerationModeEnum, MaskModeEnum } from '../util/ts/enum'
|
||||
import { base64ToLassoSelection } from '../../selection'
|
||||
import { action, app, core } from 'photoshop'
|
||||
import Locale from '../locale/locale'
|
||||
|
|
@ -193,22 +193,37 @@ const add = async (base64: string, mask?: string) => {
|
|||
await convertGrayscaleToWhiteAndTransparent(
|
||||
session_ts.store.data.expanded_mask
|
||||
)
|
||||
if (
|
||||
settings_tab_ts.store.data.b_borders_or_corners ===
|
||||
MaskModeEnum.Transparent
|
||||
) {
|
||||
//will use colorRange() which may or may not break
|
||||
const mask_layer = await moveImageToLayer(
|
||||
channel_mask_monochrome.base64,
|
||||
session_ts.store.data.selectionInfo
|
||||
)
|
||||
|
||||
const mask_layer = await moveImageToLayer(
|
||||
channel_mask_monochrome.base64,
|
||||
session_ts.store.data.selectionInfo
|
||||
)
|
||||
if (!mask_layer) {
|
||||
throw new Error('mask_layer is empty')
|
||||
if (!mask_layer) {
|
||||
throw new Error('mask_layer is empty')
|
||||
}
|
||||
|
||||
await selection.black_white_layer_to_mask_multi_batchplay(
|
||||
mask_layer.id,
|
||||
layer.id,
|
||||
'mask'
|
||||
)
|
||||
await layer_util.deleteLayers([mask_layer])
|
||||
} else {
|
||||
// if MaskModeEnum.Borders or MaskModeEnum.Corners
|
||||
// another option that doesn't use colorRange()
|
||||
await applyMaskFromBlackAndWhiteImage(
|
||||
channel_mask_monochrome.base64,
|
||||
layer.id,
|
||||
session_ts.store.data.selectionInfo,
|
||||
settings_tab_ts.store.data.b_borders_or_corners
|
||||
)
|
||||
}
|
||||
|
||||
await selection.black_white_layer_to_mask_multi_batchplay(
|
||||
mask_layer.id,
|
||||
layer.id,
|
||||
'mask'
|
||||
)
|
||||
await layer_util.deleteLayers([mask_layer])
|
||||
|
||||
return layer
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1304,7 +1304,7 @@ async function convertGrayscaleToMonochrome(base64) {
|
|||
|
||||
async function convertBlackToTransparentKeepBorders(
|
||||
base64,
|
||||
b_borders_or_corners = false // false for borders, true for corners
|
||||
b_borders_or_corners = enum_ts.MaskModeEnum.Transparent // false for borders, true for corners
|
||||
) {
|
||||
try {
|
||||
let jimp_mask = await Jimp.read(Buffer.from(base64, 'base64'))
|
||||
|
|
@ -1317,7 +1317,7 @@ async function convertBlackToTransparentKeepBorders(
|
|||
width,
|
||||
height,
|
||||
function (x, y, idx) {
|
||||
if (b_borders_or_corners === false) {
|
||||
if (b_borders_or_corners === enum_ts.MaskModeEnum.Borders) {
|
||||
// keep borders
|
||||
if (
|
||||
x === 0 ||
|
||||
|
|
@ -1326,7 +1326,9 @@ async function convertBlackToTransparentKeepBorders(
|
|||
y === height - 1
|
||||
)
|
||||
return
|
||||
} else {
|
||||
} else if (
|
||||
b_borders_or_corners === enum_ts.MaskModeEnum.Corners
|
||||
) {
|
||||
// keep corners
|
||||
if (
|
||||
(x === 0 && y === 0) ||
|
||||
|
|
@ -1336,6 +1338,7 @@ async function convertBlackToTransparentKeepBorders(
|
|||
)
|
||||
return
|
||||
}
|
||||
|
||||
const red = this.bitmap.data[idx + 0]
|
||||
const green = this.bitmap.data[idx + 1]
|
||||
const blue = this.bitmap.data[idx + 2]
|
||||
|
|
|
|||
Loading…
Reference in New Issue