diff --git a/CHANGELOG.md b/CHANGELOG.md
index c91d602692..659aaae694 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
-
### Client
+- Feat: 画像にウォーターマークを付与できるようになりました
- Enhance: ノートのリアクション一覧で、押せるリアクションを優先して表示できるようにするオプションを追加
- Fix: ドライブファイルの選択が不安定な問題を修正
- Fix: コントロールパネルのファイル欄などのデザインが崩れている問題を修正
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 0119b4ae5e..6f3d2b3853 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -5481,6 +5481,14 @@ export interface Locale extends ILocale {
* 全ての「ヒントとコツ」を非表示
*/
"hideAllTips": string;
+ /**
+ * デフォルトの画像圧縮度
+ */
+ "defaultImageCompressionLevel": string;
+ /**
+ * 低くすると画質を保てますが、ファイルサイズは増加します。
高くするとファイルサイズを減らせますが、画質は低下します。
+ */
+ "defaultImageCompressionLevel_description": string;
"_chat": {
/**
* まだメッセージはありません
@@ -12024,6 +12032,176 @@ export interface Locale extends ILocale {
*/
"tip": string;
};
+ /**
+ * ウォーターマーク
+ */
+ "watermark": string;
+ /**
+ * デフォルトのプリセット
+ */
+ "defaultPreset": string;
+ "_watermarkEditor": {
+ /**
+ * 画像にクレジット情報などのウォーターマークを追加することができます。
+ */
+ "tip": string;
+ /**
+ * 保存せずに終了しますか?
+ */
+ "quitWithoutSaveConfirm": string;
+ /**
+ * ウォーターマークの編集
+ */
+ "title": string;
+ /**
+ * 全体に被せる
+ */
+ "cover": string;
+ /**
+ * 敷き詰める
+ */
+ "repeat": string;
+ /**
+ * 不透明度
+ */
+ "opacity": string;
+ /**
+ * サイズ
+ */
+ "scale": string;
+ /**
+ * テキスト
+ */
+ "text": string;
+ /**
+ * 位置
+ */
+ "position": string;
+ /**
+ * タイプ
+ */
+ "type": string;
+ /**
+ * 画像
+ */
+ "image": string;
+ /**
+ * 高度
+ */
+ "advanced": string;
+ /**
+ * ストライプ
+ */
+ "stripe": string;
+ /**
+ * ラインの幅
+ */
+ "stripeWidth": string;
+ /**
+ * ラインの数
+ */
+ "stripeFrequency": string;
+ /**
+ * 角度
+ */
+ "angle": string;
+ /**
+ * ポルカドット
+ */
+ "polkadot": string;
+ /**
+ * チェッカー
+ */
+ "checker": string;
+ /**
+ * メインドットの不透明度
+ */
+ "polkadotMainDotOpacity": string;
+ /**
+ * メインドットの大きさ
+ */
+ "polkadotMainDotRadius": string;
+ /**
+ * サブドットの不透明度
+ */
+ "polkadotSubDotOpacity": string;
+ /**
+ * サブドットの大きさ
+ */
+ "polkadotSubDotRadius": string;
+ /**
+ * サブドットの数
+ */
+ "polkadotSubDotDivisions": string;
+ };
+ "_imageEffector": {
+ /**
+ * エフェクト
+ */
+ "title": string;
+ /**
+ * エフェクトを追加
+ */
+ "addEffect": string;
+ /**
+ * 変更を破棄して終了しますか?
+ */
+ "discardChangesConfirm": string;
+ "_fxs": {
+ /**
+ * 色収差
+ */
+ "chromaticAberration": string;
+ /**
+ * グリッチ
+ */
+ "glitch": string;
+ /**
+ * ミラー
+ */
+ "mirror": string;
+ /**
+ * 色の反転
+ */
+ "invert": string;
+ /**
+ * 白黒
+ */
+ "grayscale": string;
+ /**
+ * 色の圧縮
+ */
+ "colorClamp": string;
+ /**
+ * 色の圧縮(高度)
+ */
+ "colorClampAdvanced": string;
+ /**
+ * 歪み
+ */
+ "distort": string;
+ /**
+ * 二値化
+ */
+ "threshold": string;
+ /**
+ * 集中線
+ */
+ "zoomLines": string;
+ /**
+ * ストライプ
+ */
+ "stripe": string;
+ /**
+ * ポルカドット
+ */
+ "polkadot": string;
+ /**
+ * チェッカー
+ */
+ "checker": string;
+ };
+ };
}
declare const locales: {
[lang: string]: Locale;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index b61bbf4970..d4bd2c3116 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1365,6 +1365,8 @@ abort: "中止"
tip: "ヒントとコツ"
redisplayAllTips: "全ての「ヒントとコツ」を再表示"
hideAllTips: "全ての「ヒントとコツ」を非表示"
+defaultImageCompressionLevel: "デフォルトの画像圧縮度"
+defaultImageCompressionLevel_description: "低くすると画質を保てますが、ファイルサイズは増加します。
高くするとファイルサイズを減らせますが、画質は低下します。"
_chat:
noMessagesYet: "まだメッセージはありません"
@@ -3219,3 +3221,50 @@ _clip:
_userLists:
tip: "任意のユーザーが含まれるリストを作成できます。作成したリストはタイムラインとして表示可能です。"
+
+watermark: "ウォーターマーク"
+defaultPreset: "デフォルトのプリセット"
+_watermarkEditor:
+ tip: "画像にクレジット情報などのウォーターマークを追加することができます。"
+ quitWithoutSaveConfirm: "保存せずに終了しますか?"
+ title: "ウォーターマークの編集"
+ cover: "全体に被せる"
+ repeat: "敷き詰める"
+ opacity: "不透明度"
+ scale: "サイズ"
+ text: "テキスト"
+ position: "位置"
+ type: "タイプ"
+ image: "画像"
+ advanced: "高度"
+ stripe: "ストライプ"
+ stripeWidth: "ラインの幅"
+ stripeFrequency: "ラインの数"
+ angle: "角度"
+ polkadot: "ポルカドット"
+ checker: "チェッカー"
+ polkadotMainDotOpacity: "メインドットの不透明度"
+ polkadotMainDotRadius: "メインドットの大きさ"
+ polkadotSubDotOpacity: "サブドットの不透明度"
+ polkadotSubDotRadius: "サブドットの大きさ"
+ polkadotSubDotDivisions: "サブドットの数"
+
+_imageEffector:
+ title: "エフェクト"
+ addEffect: "エフェクトを追加"
+ discardChangesConfirm: "変更を破棄して終了しますか?"
+
+ _fxs:
+ chromaticAberration: "色収差"
+ glitch: "グリッチ"
+ mirror: "ミラー"
+ invert: "色の反転"
+ grayscale: "白黒"
+ colorClamp: "色の圧縮"
+ colorClampAdvanced: "色の圧縮(高度)"
+ distort: "歪み"
+ threshold: "二値化"
+ zoomLines: "集中線"
+ stripe: "ストライプ"
+ polkadot: "ポルカドット"
+ checker: "チェッカー"
diff --git a/packages/frontend/assets/sample/2-3.jpg b/packages/frontend/assets/sample/2-3.jpg
new file mode 100644
index 0000000000..ee9bff6527
Binary files /dev/null and b/packages/frontend/assets/sample/2-3.jpg differ
diff --git a/packages/frontend/assets/sample/3-2.jpg b/packages/frontend/assets/sample/3-2.jpg
new file mode 100644
index 0000000000..400de1649d
Binary files /dev/null and b/packages/frontend/assets/sample/3-2.jpg differ
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
new file mode 100644
index 0000000000..0312017d86
--- /dev/null
+++ b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
@@ -0,0 +1,78 @@
+
+
+
+