mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-04-23 03:00:31 -04:00
feat(ui): wip canvas nodes migration
This commit is contained in:
59
invokeai/frontend/web/src/common/util/arrayBuffer.ts
Normal file
59
invokeai/frontend/web/src/common/util/arrayBuffer.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
export const getIsImageDataPartiallyTransparent = (imageData: ImageData) => {
|
||||
let hasTransparency = false;
|
||||
let isFullyTransparent = true;
|
||||
const len = imageData.data.length;
|
||||
let i = 3;
|
||||
for (i; i < len; i += 4) {
|
||||
if (imageData.data[i] !== 0) {
|
||||
isFullyTransparent = false;
|
||||
} else {
|
||||
hasTransparency = true;
|
||||
}
|
||||
}
|
||||
return { hasTransparency, isFullyTransparent };
|
||||
};
|
||||
|
||||
export const getImageDataTransparency = (imageData: ImageData) => {
|
||||
let isFullyTransparent = true;
|
||||
let isPartiallyTransparent = false;
|
||||
const len = imageData.data.length;
|
||||
let i = 3;
|
||||
for (i; i < len; i += 4) {
|
||||
if (imageData.data[i] === 255) {
|
||||
isFullyTransparent = false;
|
||||
} else {
|
||||
isPartiallyTransparent = true;
|
||||
}
|
||||
if (!isFullyTransparent && isPartiallyTransparent) {
|
||||
return { isFullyTransparent, isPartiallyTransparent };
|
||||
}
|
||||
}
|
||||
return { isFullyTransparent, isPartiallyTransparent };
|
||||
};
|
||||
|
||||
export const areAnyPixelsBlack = (imageData: ImageData) => {
|
||||
const len = imageData.data.length;
|
||||
let i = 0;
|
||||
for (i; i < len; ) {
|
||||
if (
|
||||
imageData.data[i++] === 255 &&
|
||||
imageData.data[i++] === 255 &&
|
||||
imageData.data[i++] === 255 &&
|
||||
imageData.data[i++] === 255
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
export const getIsImageDataWhite = (imageData: ImageData) => {
|
||||
const len = imageData.data.length;
|
||||
let i = 0;
|
||||
for (i; i < len; ) {
|
||||
if (imageData.data[i++] !== 255) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
@@ -19,6 +19,7 @@ import { InvokeTabName } from 'features/ui/store/tabMap';
|
||||
import openBase64ImageInTab from './openBase64ImageInTab';
|
||||
import randomInt from './randomInt';
|
||||
import { stringToSeedWeightsArray } from './seedWeightPairs';
|
||||
import { getIsImageDataTransparent, getIsImageDataWhite } from './arrayBuffer';
|
||||
|
||||
export type FrontendToBackendParametersConfig = {
|
||||
generationMode: InvokeTabName;
|
||||
@@ -256,7 +257,7 @@ export const frontendToBackendParameters = (
|
||||
...boundingBoxDimensions,
|
||||
};
|
||||
|
||||
const maskDataURL = generateMask(
|
||||
const { dataURL: maskDataURL, imageData: maskImageData } = generateMask(
|
||||
isMaskEnabled ? objects.filter(isCanvasMaskLine) : [],
|
||||
boundingBox
|
||||
);
|
||||
@@ -287,6 +288,19 @@ export const frontendToBackendParameters = (
|
||||
height: boundingBox.height,
|
||||
});
|
||||
|
||||
const ctx = canvasBaseLayer.getContext();
|
||||
const imageData = ctx.getImageData(
|
||||
boundingBox.x + absPos.x,
|
||||
boundingBox.y + absPos.y,
|
||||
boundingBox.width,
|
||||
boundingBox.height
|
||||
);
|
||||
|
||||
const doesBaseHaveTransparency = getIsImageDataTransparent(imageData);
|
||||
const doesMaskHaveTransparency = getIsImageDataWhite(maskImageData);
|
||||
|
||||
console.log(doesBaseHaveTransparency, doesMaskHaveTransparency);
|
||||
|
||||
if (enableImageDebugging) {
|
||||
openBase64ImageInTab([
|
||||
{ base64: maskDataURL, caption: 'mask sent as init_mask' },
|
||||
|
||||
Reference in New Issue
Block a user