diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue index 248ba8052b..b0b2a137fa 100644 --- a/packages/frontend/src/components/MkImageEffectorDialog.vue +++ b/packages/frontend/src/components/MkImageEffectorDialog.vue @@ -94,7 +94,7 @@ const layers = reactive([]); watch(layers, async () => { if (renderer != null) { - renderer.setLayers(layers); + renderer.setLayersAndRender(layers); } }, { deep: true }); @@ -167,9 +167,7 @@ onMounted(async () => { fxs: FXS, }); - await renderer.setLayers(layers); - - renderer.render(); + await renderer.setLayersAndRender(layers); closeWaiting(); }); @@ -208,11 +206,10 @@ const enabled = ref(true); watch(enabled, () => { if (renderer != null) { if (enabled.value) { - renderer.setLayers(layers); + renderer.setLayersAndRender(layers); } else { - renderer.setLayers([]); + renderer.setLayersAndRender([]); } - renderer.render(); } }); diff --git a/packages/frontend/src/components/MkImageLabelEditorDialog.vue b/packages/frontend/src/components/MkImageLabelEditorDialog.vue index 18c2e365dc..4744a57452 100644 --- a/packages/frontend/src/components/MkImageLabelEditorDialog.vue +++ b/packages/frontend/src/components/MkImageLabelEditorDialog.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
@@ -164,6 +165,7 @@ const sampleImage_2_3_loading = new Promise(resolve => { const sampleImageType = ref(props.image != null ? 'provided' : '3_2'); watch(sampleImageType, async () => { + if (sampleImageType.value === 'provided') return; if (renderer != null) { renderer.destroy(false); renderer = null; @@ -171,6 +173,20 @@ watch(sampleImageType, async () => { } }); +let imageFile = props.image; + +async function choiceImage() { + const files = await os.chooseFileFromPc({ multiple: false }); + if (files.length === 0) return; + imageFile = files[0]; + sampleImageType.value = 'provided'; + if (renderer != null) { + renderer.destroy(false); + renderer = null; + initRenderer(); + } +} + let renderer: ImageLabelRenderer | null = null; let imageBitmap: ImageBitmap | null = null; @@ -191,20 +207,20 @@ async function initRenderer() { exif: EXIF_MOCK, renderAsPreview: true, }); - } else if (props.image != null) { - imageBitmap = await window.createImageBitmap(props.image); + } else if (imageFile != null) { + imageBitmap = await window.createImageBitmap(imageFile); + + const exif = ExifReader.load(await imageFile.arrayBuffer()); renderer = new ImageLabelRenderer({ canvas: canvasEl.value, image: imageBitmap, - exif: EXIF_MOCK, + exif: exif, renderAsPreview: true, }); } await renderer!.update(frame); - - renderer!.render(); } onMounted(async () => { diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index ae138b0a87..7f7d746bae 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -25,6 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only
+
@@ -192,7 +193,7 @@ async function cancel() { watch(preset, async (newValue, oldValue) => { if (renderer != null) { - renderer.setLayers(preset.layers); + renderer.setLayersAndRender(preset.layers); } }, { deep: true }); @@ -212,6 +213,7 @@ const sampleImage_2_3_loading = new Promise(resolve => { const sampleImageType = ref(props.image != null ? 'provided' : '3_2'); watch(sampleImageType, async () => { + if (sampleImageType.value === 'provided') return; if (renderer != null) { renderer.destroy(false); renderer = null; @@ -219,6 +221,20 @@ watch(sampleImageType, async () => { } }); +let imageFile = props.image; + +async function choiceImage() { + const files = await os.chooseFileFromPc({ multiple: false }); + if (files.length === 0) return; + imageFile = files[0]; + sampleImageType.value = 'provided'; + if (renderer != null) { + renderer.destroy(false); + renderer = null; + initRenderer(); + } +} + let renderer: WatermarkRenderer | null = null; let imageBitmap: ImageBitmap | null = null; @@ -239,8 +255,8 @@ async function initRenderer() { renderHeight: 1500, image: sampleImage_2_3, }); - } else if (props.image != null) { - imageBitmap = await window.createImageBitmap(props.image); + } else if (imageFile != null) { + imageBitmap = await window.createImageBitmap(imageFile); const MAX_W = 1000; const MAX_H = 1000; @@ -261,9 +277,7 @@ async function initRenderer() { }); } - await renderer!.setLayers(preset.layers); - - renderer!.render(); + await renderer!.setLayersAndRender(preset.layers); } onMounted(async () => { diff --git a/packages/frontend/src/composables/use-uploader.ts b/packages/frontend/src/composables/use-uploader.ts index df5dc1469d..fc8bc7c3d9 100644 --- a/packages/frontend/src/composables/use-uploader.ts +++ b/packages/frontend/src/composables/use-uploader.ts @@ -558,9 +558,7 @@ export function useUploader(options: { image: imageBitmap, }); - await renderer.setLayers(preset.layers); - - renderer.render(); + await renderer.setLayersAndRender(preset.layers); preprocessedFile = await new Promise((resolve) => { canvas.toBlob((blob) => { diff --git a/packages/frontend/src/pages/settings/drive.WatermarkItem.vue b/packages/frontend/src/pages/settings/drive.WatermarkItem.vue index bb91d5e212..80c7d8b171 100644 --- a/packages/frontend/src/pages/settings/drive.WatermarkItem.vue +++ b/packages/frontend/src/pages/settings/drive.WatermarkItem.vue @@ -78,9 +78,7 @@ onMounted(() => { image: sampleImage, }); - await renderer.setLayers(props.preset.layers); - - renderer.render(); + await renderer.setLayersAndRender(props.preset.layers); }, { immediate: true }); }; }); @@ -94,8 +92,7 @@ onUnmounted(() => { watch(() => props.preset, async () => { if (renderer != null) { - await renderer.setLayers(props.preset.layers); - renderer.render(); + await renderer.setLayersAndRender(props.preset.layers); } }, { deep: true }); diff --git a/packages/frontend/src/utility/image-effector/ImageEffector.ts b/packages/frontend/src/utility/image-effector/ImageEffector.ts index 0895e2fb8c..5bd80feac7 100644 --- a/packages/frontend/src/utility/image-effector/ImageEffector.ts +++ b/packages/frontend/src/utility/image-effector/ImageEffector.ts @@ -327,7 +327,7 @@ export class ImageEffector