Add an option to the masking settings to choose whether or not to use the colorRange()

dev_1.2.7
Abdullah Alfaraj 2023-07-14 14:34:08 +03:00
parent 7410e88423
commit 98706917c3
11 changed files with 93 additions and 48 deletions

View File

@ -77,6 +77,7 @@ const {
sam,
settings_tab_ts,
one_button_prompt,
enum_ts,
} = require('./typescripts/dist/bundle')
const io = require('./utility/io')

11
package-lock.json generated
View File

@ -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",

View File

@ -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",

1
typescripts/@types/changedpi.d.ts vendored Normal file
View File

@ -0,0 +1 @@
declare module 'changedpi'

View File

@ -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'

View File

@ -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) {

View File

@ -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 (

View File

@ -7,3 +7,9 @@ export enum GenerationModeEnum {
LassoInpaint = 'lasso_inpaint',
LassoOutpaint = 'lasso_outpaint',
}
export enum MaskModeEnum {
Transparent = 'transparent',
Borders = 'border',
Corners = 'corner',
}

View File

@ -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 {

View File

@ -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
}
}

View File

@ -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]