ImageEffectorをwatermarkに隠蔽

This commit is contained in:
kakkokari-gtyih 2025-06-15 12:28:56 +09:00
parent f63ba04198
commit 8587deab74
2 changed files with 31 additions and 4 deletions

View File

@ -108,9 +108,9 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<MkImageEffectorFxForm
v-else-if="fx != null"
v-else-if="layerParamDefs != null"
v-model="layer"
:paramDefs="fx.params"
:paramDefs="layerParamDefs"
/>
</div>
</template>
@ -118,7 +118,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
import * as Misskey from 'misskey-js';
import { WATERMARK_FXS } from '@/utility/watermark.js';
import { WatermarkRenderer } from '@/utility/watermark.js';
import type { WatermarkPreset } from '@/utility/watermark.js';
import type { ImageEffectorFx } from '@/utility/image-effector/ImageEffector.js';
import { i18n } from '@/i18n.js';
@ -134,7 +134,11 @@ import { selectFile } from '@/utility/drive.js';
import { misskeyApi } from '@/utility/misskey-api.js';
const layer = defineModel<WatermarkPreset['layers'][number]>('layer', { required: true });
const fx = computed(() => WATERMARK_FXS.find((fx) => fx.id !== 'watermarkPlacement' && fx.id === layer.value.type) as Exclude<typeof WATERMARK_FXS[number], ImageEffectorFx<"watermarkPlacement", any, any>> ?? null);
const layerParamDefs = computed(() => {
const def = WatermarkRenderer.getLayerDef(layer.value.type);
if (def == null || def.id === 'watermarkPlacement') return null;
return def.params;
});
const driveFile = ref<Misskey.entities.DriveFile | null>(null);
const driveFileError = ref(false);

View File

@ -89,6 +89,29 @@ export class WatermarkRenderer {
});
}
public static getLayerDef(type: WatermarkPreset['layers'][number]['type']): ImageEffectorFx | null {
let fxId: typeof WATERMARK_FXS[number]['id'];
switch (type) {
case 'text':
case 'image':
fxId = 'watermarkPlacement';
break;
case 'stripe':
fxId = 'stripe';
break;
case 'polkadot':
fxId = 'polkadot';
break;
case 'checker':
fxId = 'checker';
break;
default:
throw new Error(`Unknown layer type: ${type}`);
}
return WATERMARK_FXS.find(fx => fx.id === fxId) ?? null;
}
private makeImageEffectorLayers(): ImageEffectorLayer[] {
return this.layers.map(layer => {
if (layer.type === 'text') {