Skip to content

Commit 6bc58b4

Browse files
add base64 image data to layer functions
1 parent d48d006 commit 6bc58b4

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed

index.js

+148
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ const sd_config = require('./utility/sdapi/config')
2323
const session = require('./utility/session')
2424
const ui = require('./utility/ui')
2525
const script_horde = require('./utility/sd_scripts/horde')
26+
27+
const formats = require('uxp').storage.formats
28+
const storage = require('uxp').storage
29+
const fs = storage.localFileSystem
30+
2631
async function hasSessionSelectionChanged() {
2732
try {
2833
const isSelectionActive = await psapi.checkIfSelectionAreaIsActive()
@@ -2302,6 +2307,149 @@ async function placeEmbedded(image_path) {
23022307
}
23032308
}
23042309

2310+
function _base64ToArrayBuffer(base64) {
2311+
var binary_string = window.atob(base64)
2312+
var len = binary_string.length
2313+
var bytes = new Uint8Array(len)
2314+
for (var i = 0; i < len; i++) {
2315+
bytes[i] = binary_string.charCodeAt(i)
2316+
}
2317+
return bytes.buffer
2318+
}
2319+
async function base64ToFile(b64Image) {
2320+
// const b64Image =
2321+
// 'iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAADMElEQVR4nOzVwQnAIBQFQYXff81RUkQCOyDj1YOPnbXWPmeTRef+/3O/OyBjzh3CD95BfqICMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMO0TAAD//2Anhf4QtqobAAAAAElFTkSuQmCC'
2322+
2323+
const img = _base64ToArrayBuffer(b64Image)
2324+
2325+
const img_name = 'output_image.png'
2326+
2327+
const folder = await storage.localFileSystem.getTemporaryFolder()
2328+
const file = await folder.createFile(img_name, { overwrite: true })
2329+
2330+
await file.write(img, { format: storage.formats.binary })
2331+
2332+
const token = await storage.localFileSystem.createSessionToken(file) // batchPlay requires a token on _path
2333+
2334+
let place_event_result
2335+
await executeAsModal(async () => {
2336+
const result = await batchPlay(
2337+
[
2338+
{
2339+
_obj: 'placeEvent',
2340+
ID: 6,
2341+
null: {
2342+
_path: token,
2343+
_kind: 'local',
2344+
},
2345+
freeTransformCenterState: {
2346+
_enum: 'quadCenterState',
2347+
_value: 'QCSAverage',
2348+
},
2349+
offset: {
2350+
_obj: 'offset',
2351+
horizontal: {
2352+
_unit: 'pixelsUnit',
2353+
_value: 0,
2354+
},
2355+
vertical: {
2356+
_unit: 'pixelsUnit',
2357+
_value: 0,
2358+
},
2359+
},
2360+
_isCommand: true,
2361+
_options: {
2362+
dialogOptions: 'dontDisplay',
2363+
},
2364+
},
2365+
],
2366+
{
2367+
synchronousExecution: true,
2368+
modalBehavior: 'execute',
2369+
}
2370+
)
2371+
console.log('placeEmbedd batchPlay result: ', result)
2372+
2373+
place_event_result = result[0]
2374+
})
2375+
2376+
return place_event_result
2377+
}
2378+
2379+
async function placeImageB64ToLayer(image_path) {
2380+
//silent importer
2381+
2382+
try {
2383+
console.log('placeEmbedded(): image_path: ', image_path)
2384+
2385+
const formats = require('uxp').storage.formats
2386+
const storage = require('uxp').storage
2387+
const fs = storage.localFileSystem
2388+
2389+
const names = image_path.split('/')
2390+
const length = names.length
2391+
const image_name = names[length - 1]
2392+
const project_name = names[length - 2]
2393+
let pluginFolder = await fs.getPluginFolder()
2394+
2395+
const image_dir = `./server/python_server/output/${project_name}`
2396+
// image_path = "output/f027258e-71b8-430a-9396-0a19425f2b44/output- 1674323725.126322.png"
2397+
2398+
let img_dir = await pluginFolder.getEntry(image_dir)
2399+
// const file = await img_dir.createFile('output- 1674298902.0571606.png', {overwrite: true});
2400+
2401+
const file = await img_dir.createFile(image_name, { overwrite: true })
2402+
2403+
const img = await file.read({ format: formats.binary })
2404+
const token = await storage.localFileSystem.createSessionToken(file)
2405+
let place_event_result
2406+
await executeAsModal(async () => {
2407+
const result = await batchPlay(
2408+
[
2409+
{
2410+
_obj: 'placeEvent',
2411+
ID: 6,
2412+
null: {
2413+
_path: token,
2414+
_kind: 'local',
2415+
},
2416+
freeTransformCenterState: {
2417+
_enum: 'quadCenterState',
2418+
_value: 'QCSAverage',
2419+
},
2420+
offset: {
2421+
_obj: 'offset',
2422+
horizontal: {
2423+
_unit: 'pixelsUnit',
2424+
_value: 0,
2425+
},
2426+
vertical: {
2427+
_unit: 'pixelsUnit',
2428+
_value: 0,
2429+
},
2430+
},
2431+
_isCommand: true,
2432+
_options: {
2433+
dialogOptions: 'dontDisplay',
2434+
},
2435+
},
2436+
],
2437+
{
2438+
synchronousExecution: true,
2439+
modalBehavior: 'execute',
2440+
}
2441+
)
2442+
console.log('placeEmbedd batchPlay result: ', result)
2443+
2444+
place_event_result = result[0]
2445+
})
2446+
2447+
return place_event_result
2448+
} catch (e) {
2449+
console.warn(e)
2450+
}
2451+
}
2452+
23052453
// document.getElementById('btnImageFileToLayer').addEventListener('click', placeEmbedded)
23062454

23072455
// open an image in the plugin folder as new document

output_image.png

361 KB
Loading

0 commit comments

Comments
 (0)