From 4ba18690d7abd7eea086bb59e6cbcc8ead9e121a Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Thu, 6 Nov 2025 20:25:17 +0900 Subject: feat(frontend): EXIFフレーム機能 (#16725) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip * wip * Update ImageEffector.ts * Update image-label-renderer.ts * Update image-label-renderer.ts * wip * Update image-label-renderer.ts * wip * wip * wip * wip * wip * wip * wip * Update use-uploader.ts * Update watermark.ts * wip * wu * wip * Update image-frame-renderer.ts * wip * wip * Update image-frame-renderer.ts * Create ImageCompositor.ts * Update ImageCompositor.ts * wip * wip * Update ImageEffector.ts * wip * Update use-uploader.ts * wip * wip * wip * wip * Update fxs.ts * wip * wip * wip * Update CHANGELOG.md * wip * wip * Update MkImageEffectorDialog.vue * Update MkImageEffectorDialog.vue * Update MkImageFrameEditorDialog.vue * Update use-uploader.ts * improve error handling * Update use-uploader.ts * 🎨 * wip * wip * lazy load * lazy load * wip * wip * wip --- packages/frontend/package.json | 1 + .../src/components/MkEmbedCodeGenDialog.vue | 23 +- .../src/components/MkImageEffectorDialog.Layer.vue | 12 +- .../src/components/MkImageEffectorDialog.vue | 87 ++-- .../src/components/MkImageFrameEditorDialog.vue | 509 +++++++++++++++++++++ .../components/MkWatermarkEditorDialog.Layer.vue | 2 +- .../src/components/MkWatermarkEditorDialog.vue | 162 ++++--- packages/frontend/src/composables/use-uploader.ts | 176 +++++-- packages/frontend/src/lib/ImageCompositor.ts | 313 +++++++++++++ packages/frontend/src/lib/pizzax.ts | 2 + .../src/pages/settings/drive.ImageFrameItem.vue | 113 +++++ .../src/pages/settings/drive.WatermarkItem.vue | 15 +- packages/frontend/src/pages/settings/drive.vue | 86 +++- packages/frontend/src/preferences/def.ts | 23 +- .../image-compositor-functions/blockNoise.glsl | 43 ++ .../image-compositor-functions/blockNoise.ts | 95 ++++ .../utility/image-compositor-functions/blur.glsl | 78 ++++ .../src/utility/image-compositor-functions/blur.ts | 93 ++++ .../image-compositor-functions/checker.glsl | 43 ++ .../utility/image-compositor-functions/checker.ts | 61 +++ .../chromaticAberration.glsl | 49 ++ .../chromaticAberration.ts | 39 ++ .../image-compositor-functions/colorAdjust.glsl | 82 ++++ .../image-compositor-functions/colorAdjust.ts | 77 ++++ .../image-compositor-functions/colorClamp.glsl | 29 ++ .../image-compositor-functions/colorClamp.ts | 48 ++ .../colorClampAdvanced.ts | 88 ++++ .../image-compositor-functions/distort.glsl | 30 ++ .../utility/image-compositor-functions/distort.ts | 65 +++ .../utility/image-compositor-functions/fill.glsl | 50 ++ .../src/utility/image-compositor-functions/fill.ts | 100 ++++ .../image-compositor-functions/grayscale.glsl | 22 + .../image-compositor-functions/grayscale.ts | 21 + .../utility/image-compositor-functions/invert.glsl | 23 + .../utility/image-compositor-functions/invert.ts | 43 ++ .../utility/image-compositor-functions/mirror.glsl | 26 ++ .../utility/image-compositor-functions/mirror.ts | 46 ++ .../image-compositor-functions/pixelate.glsl | 68 +++ .../utility/image-compositor-functions/pixelate.ts | 93 ++++ .../image-compositor-functions/polkadot.glsl | 75 +++ .../utility/image-compositor-functions/polkadot.ts | 102 +++++ .../utility/image-compositor-functions/stripe.glsl | 45 ++ .../utility/image-compositor-functions/stripe.ts | 73 +++ .../image-compositor-functions/tearing.glsl | 33 ++ .../utility/image-compositor-functions/tearing.ts | 83 ++++ .../image-compositor-functions/threshold.glsl | 23 + .../image-compositor-functions/threshold.ts | 52 +++ .../image-compositor-functions/zoomLines.glsl | 48 ++ .../image-compositor-functions/zoomLines.ts | 87 ++++ .../src/utility/image-effector/ImageEffector.ts | 482 ++----------------- .../frontend/src/utility/image-effector/fxs.ts | 82 ++-- .../src/utility/image-effector/fxs/blockNoise.glsl | 43 -- .../src/utility/image-effector/fxs/blockNoise.ts | 86 ---- .../src/utility/image-effector/fxs/blur.glsl | 78 ---- .../src/utility/image-effector/fxs/blur.ts | 83 ---- .../src/utility/image-effector/fxs/checker.glsl | 43 -- .../src/utility/image-effector/fxs/checker.ts | 54 --- .../image-effector/fxs/chromaticAberration.glsl | 49 -- .../image-effector/fxs/chromaticAberration.ts | 34 -- .../utility/image-effector/fxs/colorAdjust.glsl | 82 ---- .../src/utility/image-effector/fxs/colorAdjust.ts | 69 --- .../src/utility/image-effector/fxs/colorClamp.glsl | 29 -- .../src/utility/image-effector/fxs/colorClamp.ts | 43 -- .../image-effector/fxs/colorClampAdvanced.ts | 79 ---- .../src/utility/image-effector/fxs/distort.glsl | 30 -- .../src/utility/image-effector/fxs/distort.ts | 58 --- .../src/utility/image-effector/fxs/fill.glsl | 50 -- .../src/utility/image-effector/fxs/fill.ts | 89 ---- .../src/utility/image-effector/fxs/grayscale.glsl | 22 - .../src/utility/image-effector/fxs/grayscale.ts | 19 - .../src/utility/image-effector/fxs/invert.glsl | 23 - .../src/utility/image-effector/fxs/invert.ts | 37 -- .../src/utility/image-effector/fxs/mirror.glsl | 26 -- .../src/utility/image-effector/fxs/mirror.ts | 41 -- .../src/utility/image-effector/fxs/pixelate.glsl | 68 --- .../src/utility/image-effector/fxs/pixelate.ts | 83 ---- .../src/utility/image-effector/fxs/polkadot.glsl | 75 --- .../src/utility/image-effector/fxs/polkadot.ts | 92 ---- .../src/utility/image-effector/fxs/stripe.glsl | 45 -- .../src/utility/image-effector/fxs/stripe.ts | 66 --- .../src/utility/image-effector/fxs/tearing.glsl | 33 -- .../src/utility/image-effector/fxs/tearing.ts | 75 --- .../src/utility/image-effector/fxs/threshold.glsl | 23 - .../src/utility/image-effector/fxs/threshold.ts | 46 -- .../image-effector/fxs/watermarkPlacement.glsl | 147 ------ .../image-effector/fxs/watermarkPlacement.ts | 94 ---- .../src/utility/image-effector/fxs/zoomLines.glsl | 48 -- .../src/utility/image-effector/fxs/zoomLines.ts | 77 ---- .../image-frame-renderer/ImageFrameRenderer.ts | 270 +++++++++++ .../src/utility/image-frame-renderer/frame.glsl | 61 +++ .../src/utility/image-frame-renderer/frame.ts | 57 +++ packages/frontend/src/utility/watermark.ts | 218 --------- .../src/utility/watermark/WatermarkRenderer.ts | 332 ++++++++++++++ .../frontend/src/utility/watermark/watermark.glsl | 147 ++++++ .../frontend/src/utility/watermark/watermark.ts | 57 +++ packages/frontend/src/utility/webgl.ts | 11 + 96 files changed, 4412 insertions(+), 3001 deletions(-) create mode 100644 packages/frontend/src/components/MkImageFrameEditorDialog.vue create mode 100644 packages/frontend/src/lib/ImageCompositor.ts create mode 100644 packages/frontend/src/pages/settings/drive.ImageFrameItem.vue create mode 100644 packages/frontend/src/utility/image-compositor-functions/blockNoise.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/blockNoise.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/blur.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/blur.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/checker.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/checker.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/chromaticAberration.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/chromaticAberration.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/colorAdjust.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/colorAdjust.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/colorClamp.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/colorClamp.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/colorClampAdvanced.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/distort.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/distort.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/fill.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/fill.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/grayscale.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/grayscale.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/invert.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/invert.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/mirror.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/mirror.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/pixelate.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/pixelate.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/polkadot.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/polkadot.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/stripe.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/stripe.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/tearing.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/tearing.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/threshold.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/threshold.ts create mode 100644 packages/frontend/src/utility/image-compositor-functions/zoomLines.glsl create mode 100644 packages/frontend/src/utility/image-compositor-functions/zoomLines.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/blockNoise.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/blockNoise.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/blur.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/blur.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/checker.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/checker.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/chromaticAberration.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/colorAdjust.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/colorClamp.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/colorClamp.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/distort.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/distort.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/fill.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/fill.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/grayscale.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/grayscale.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/invert.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/invert.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/mirror.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/mirror.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/pixelate.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/pixelate.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/polkadot.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/polkadot.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/stripe.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/stripe.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/tearing.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/tearing.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/threshold.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/threshold.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts delete mode 100644 packages/frontend/src/utility/image-effector/fxs/zoomLines.glsl delete mode 100644 packages/frontend/src/utility/image-effector/fxs/zoomLines.ts create mode 100644 packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts create mode 100644 packages/frontend/src/utility/image-frame-renderer/frame.glsl create mode 100644 packages/frontend/src/utility/image-frame-renderer/frame.ts delete mode 100644 packages/frontend/src/utility/watermark.ts create mode 100644 packages/frontend/src/utility/watermark/WatermarkRenderer.ts create mode 100644 packages/frontend/src/utility/watermark/watermark.glsl create mode 100644 packages/frontend/src/utility/watermark/watermark.ts (limited to 'packages') diff --git a/packages/frontend/package.json b/packages/frontend/package.json index bd81d1d2c6..1ad3437e86 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -48,6 +48,7 @@ "estree-walker": "3.0.3", "eventemitter3": "5.0.1", "execa": "9.6.0", + "exifreader": "4.32.0", "frontend-shared": "workspace:*", "icons-subsetter": "workspace:*", "idb-keyval": "6.2.2", diff --git a/packages/frontend/src/components/MkEmbedCodeGenDialog.vue b/packages/frontend/src/components/MkEmbedCodeGenDialog.vue index 0cb8499699..4f16149caa 100644 --- a/packages/frontend/src/components/MkEmbedCodeGenDialog.vue +++ b/packages/frontend/src/components/MkEmbedCodeGenDialog.vue @@ -24,9 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only :leaveToClass="$style.transition_x_leaveTo" >
{filename} - {{ i18n.ts._imageEditing._vars.filename }}{filename_without_ext} - {{ i18n.ts._imageEditing._vars.filename_without_ext }}{caption} - {{ i18n.ts._imageEditing._vars.caption }}{year} - {{ i18n.ts._imageEditing._vars.year }}{month} - {{ i18n.ts._imageEditing._vars.month }}{day} - {{ i18n.ts._imageEditing._vars.day }}{hour} - {{ i18n.ts._imageEditing._vars.hour }}{minute} - {{ i18n.ts._imageEditing._vars.minute }}{second} - {{ i18n.ts._imageEditing._vars.second }}{0month} - {{ i18n.ts._imageEditing._vars.month }} ({{ i18n.ts.zeroPadding }}){0day} - {{ i18n.ts._imageEditing._vars.day }} ({{ i18n.ts.zeroPadding }}){0hour} - {{ i18n.ts._imageEditing._vars.hour }} ({{ i18n.ts.zeroPadding }}){0minute} - {{ i18n.ts._imageEditing._vars.minute }} ({{ i18n.ts.zeroPadding }}){0second} - {{ i18n.ts._imageEditing._vars.second }} ({{ i18n.ts.zeroPadding }}){camera_model} - {{ i18n.ts._imageEditing._vars.camera_model }}{camera_lens_model} - {{ i18n.ts._imageEditing._vars.camera_lens_model }}{camera_mm} - {{ i18n.ts._imageEditing._vars.camera_mm }}{camera_mm_35} - {{ i18n.ts._imageEditing._vars.camera_mm_35 }}{camera_f} - {{ i18n.ts._imageEditing._vars.camera_f }}{camera_s} - {{ i18n.ts._imageEditing._vars.camera_s }}{camera_iso} - {{ i18n.ts._imageEditing._vars.camera_iso }}{gps_lat} - {{ i18n.ts._imageEditing._vars.gps_lat }}{gps_long} - {{ i18n.ts._imageEditing._vars.gps_long }}