wip
This commit is contained in:
parent
fa2b60c06d
commit
cb6327dda6
|
|
@ -5614,6 +5614,10 @@ export interface Locale extends ILocale {
|
||||||
* フレームの編集
|
* フレームの編集
|
||||||
*/
|
*/
|
||||||
"title": string;
|
"title": string;
|
||||||
|
/**
|
||||||
|
* 画像にフレームやメタデータを含んだラベルを追加して装飾できます。
|
||||||
|
*/
|
||||||
|
"tip": string;
|
||||||
/**
|
/**
|
||||||
* フチの幅
|
* フチの幅
|
||||||
*/
|
*/
|
||||||
|
|
@ -12360,7 +12364,7 @@ export interface Locale extends ILocale {
|
||||||
"defaultPreset": string;
|
"defaultPreset": string;
|
||||||
"_watermarkEditor": {
|
"_watermarkEditor": {
|
||||||
/**
|
/**
|
||||||
* 画像にクレジット情報などのウォーターマークを追加することができます。
|
* 画像にクレジット情報などのウォーターマークを追加できます。
|
||||||
*/
|
*/
|
||||||
"tip": string;
|
"tip": string;
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1400,6 +1400,7 @@ frame: "フレーム"
|
||||||
|
|
||||||
_imageFrameEditor:
|
_imageFrameEditor:
|
||||||
title: "フレームの編集"
|
title: "フレームの編集"
|
||||||
|
tip: "画像にフレームやメタデータを含んだラベルを追加して装飾できます。"
|
||||||
borderThickness: "フチの幅"
|
borderThickness: "フチの幅"
|
||||||
labelThickness: "ラベルの幅"
|
labelThickness: "ラベルの幅"
|
||||||
labelScale: "ラベルのスケール"
|
labelScale: "ラベルのスケール"
|
||||||
|
|
@ -3310,7 +3311,7 @@ _userLists:
|
||||||
watermark: "ウォーターマーク"
|
watermark: "ウォーターマーク"
|
||||||
defaultPreset: "デフォルトのプリセット"
|
defaultPreset: "デフォルトのプリセット"
|
||||||
_watermarkEditor:
|
_watermarkEditor:
|
||||||
tip: "画像にクレジット情報などのウォーターマークを追加することができます。"
|
tip: "画像にクレジット情報などのウォーターマークを追加できます。"
|
||||||
quitWithoutSaveConfirm: "保存せずに終了しますか?"
|
quitWithoutSaveConfirm: "保存せずに終了しますか?"
|
||||||
driveFileTypeWarn: "このファイルは対応していません"
|
driveFileTypeWarn: "このファイルは対応していません"
|
||||||
driveFileTypeWarnDescription: "画像ファイルを選択してください"
|
driveFileTypeWarnDescription: "画像ファイルを選択してください"
|
||||||
|
|
|
||||||
|
|
@ -62,12 +62,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<MkInfo>
|
<MkInfo>
|
||||||
<div>{{ i18n.ts._imageFrameEditor.availableVariables }}:</div>
|
<div>{{ i18n.ts._imageFrameEditor.availableVariables }}:</div>
|
||||||
<div><code class="_selectableAtomic">{date}</code> - 撮影日時</div>
|
<div><code class="_selectableAtomic">{date}</code> - 撮影日時</div>
|
||||||
<div><code class="_selectableAtomic">{model}</code> - カメラモデル</div>
|
<div><code class="_selectableAtomic">{camera_model}</code> - カメラモデル</div>
|
||||||
<div><code class="_selectableAtomic">{lensModel}</code> - レンズモデル</div>
|
<div><code class="_selectableAtomic">{camera_lens_model}</code> - レンズモデル</div>
|
||||||
<div><code class="_selectableAtomic">{mm}</code> - 焦点距離 (例: 50)</div>
|
<div><code class="_selectableAtomic">{camera_mm}</code> - 焦点距離 (例: 50)</div>
|
||||||
<div><code class="_selectableAtomic">{f}</code> - 絞り値 (例: 1.8)</div>
|
<div><code class="_selectableAtomic">{camera_f}</code> - 絞り値 (例: 1.8)</div>
|
||||||
<div><code class="_selectableAtomic">{s}</code> - シャッタースピード (例: 1/125)</div>
|
<div><code class="_selectableAtomic">{camera_s}</code> - シャッタースピード (例: 1/125)</div>
|
||||||
<div><code class="_selectableAtomic">{iso}</code> - ISO感度 (例: 100)</div>
|
<div><code class="_selectableAtomic">{camera_iso}</code> - ISO感度 (例: 100)</div>
|
||||||
</MkInfo>
|
</MkInfo>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -102,7 +102,7 @@ import { useMkSelect } from '@/composables/use-mkselect.js';
|
||||||
const $i = ensureSignin();
|
const $i = ensureSignin();
|
||||||
|
|
||||||
const EXIF_MOCK = {
|
const EXIF_MOCK = {
|
||||||
DateTimeOriginal: { description: '2025:01:01 12:00:00' },
|
DateTimeOriginal: { description: '2012:03:04 5:06:07' },
|
||||||
Model: { description: 'Example camera' },
|
Model: { description: 'Example camera' },
|
||||||
LensModel: { description: 'Example lens 123mm f/1.23' },
|
LensModel: { description: 'Example lens 123mm f/1.23' },
|
||||||
FocalLength: { description: '123mm' },
|
FocalLength: { description: '123mm' },
|
||||||
|
|
@ -120,10 +120,12 @@ const frame = reactive<ImageFrameParams>(deepClone(props.frame) ?? {
|
||||||
borderThickness: 0.05,
|
borderThickness: 0.05,
|
||||||
labelThickness: 0.2,
|
labelThickness: 0.2,
|
||||||
labelScale: 1.0,
|
labelScale: 1.0,
|
||||||
title: 'Untitled by @syuilo',
|
title: '{year}/{0month}/{0day}',
|
||||||
text: '{mm}mm f/{f} {s}s ISO{iso}',
|
text: '{camera_mm}mm f/{camera_f} {camera_s}s ISO{camera_iso}',
|
||||||
centered: false,
|
centered: false,
|
||||||
withQrCode: true,
|
withQrCode: true,
|
||||||
|
bgColor: [255, 255, 255],
|
||||||
|
fgColor: [0, 0, 0],
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
|
|
@ -138,7 +140,7 @@ async function cancel() {
|
||||||
dialog.value?.close();
|
dialog.value?.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateThrottled = throttle(100, () => {
|
const updateThrottled = throttle(50, () => {
|
||||||
if (renderer != null) {
|
if (renderer != null) {
|
||||||
renderer.updateAndRender(frame);
|
renderer.updateAndRender(frame);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<MkFolder>
|
<MkFolder>
|
||||||
<template #icon><i class="ti ti-photo"></i></template>
|
<template #icon><i class="ti ti-photo"></i></template>
|
||||||
<template #label><SearchLabel>{{ i18n.ts.frame }}</SearchLabel></template>
|
<template #label><SearchLabel>{{ i18n.ts.frame }}</SearchLabel></template>
|
||||||
|
<template #caption>{{ i18n.ts._imageFrameEditor.tip }}</template>
|
||||||
|
|
||||||
<div class="_gaps">
|
<div class="_gaps">
|
||||||
<div class="_gaps_s">
|
<div class="_gaps_s">
|
||||||
|
|
|
||||||
|
|
@ -62,12 +62,23 @@ export class ImageFrameRenderer {
|
||||||
const date = meta_date.split(' ')[0].replaceAll(':', '/');
|
const date = meta_date.split(' ')[0].replaceAll(':', '/');
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'date': return date;
|
case 'date': return date;
|
||||||
case 'model': return this.exif.Model ? this.exif.Model.description : '-';
|
case 'year': return date.split('/')[0];
|
||||||
case 'lensModel': return this.exif.LensModel ? this.exif.LensModel.description : '-';
|
case 'month': return date.split('/')[1].replace(/^0/, '');
|
||||||
case 'mm': return this.exif.FocalLength ? this.exif.FocalLength.description.replace(' mm', '').replace('mm', '') : '-';
|
case 'day': return date.split('/')[2].replace(/^0/, '');
|
||||||
case 'f': return this.exif.FNumber ? this.exif.FNumber.description.replace('f/', '') : '-';
|
case 'hour': return meta_date.split(' ')[1].split(':')[0].replace(/^0/, '');
|
||||||
case 's': return this.exif.ExposureTime ? this.exif.ExposureTime.description : '-';
|
case 'minute': return meta_date.split(' ')[1].split(':')[1].replace(/^0/, '');
|
||||||
case 'iso': return this.exif.ISOSpeedRatings ? this.exif.ISOSpeedRatings.description : '-';
|
case 'second': return meta_date.split(' ')[1].split(':')[2].replace(/^0/, '');
|
||||||
|
case '0month': return date.split('/')[1];
|
||||||
|
case '0day': return date.split('/')[2];
|
||||||
|
case '0hour': return meta_date.split(' ')[1].split(':')[0];
|
||||||
|
case '0minute': return meta_date.split(' ')[1].split(':')[1];
|
||||||
|
case '0second': return meta_date.split(' ')[1].split(':')[2];
|
||||||
|
case 'camera_model': return this.exif.Model ? this.exif.Model.description : '-';
|
||||||
|
case 'camera_lens_model': return this.exif.LensModel ? this.exif.LensModel.description : '-';
|
||||||
|
case 'camera_mm': return this.exif.FocalLength ? this.exif.FocalLength.description.replace(' mm', '').replace('mm', '') : '-';
|
||||||
|
case 'camera_f': return this.exif.FNumber ? this.exif.FNumber.description.replace('f/', '') : '-';
|
||||||
|
case 'camera_s': return this.exif.ExposureTime ? this.exif.ExposureTime.description : '-';
|
||||||
|
case 'camera_iso': return this.exif.ISOSpeedRatings ? this.exif.ISOSpeedRatings.description : '-';
|
||||||
default: return '-';
|
default: return '-';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue