Commit 6a9748c1 authored by fisherdaddy's avatar fisherdaddy

feature: 新增图像水印工具

parent 9fe8a7e8
......@@ -2,3 +2,5 @@ node_modules/
package-lock.json
dist/
src/.DS_Store
public/.DS_Store
.DS_Store
\ No newline at end of file
No preview for this file type
public/assets/icon/handwrite.png

324 KB | W: | H:

public/assets/icon/handwrite.png

188 KB | W: | H:

public/assets/icon/handwrite.png
public/assets/icon/handwrite.png
public/assets/icon/handwrite.png
public/assets/icon/handwrite.png
  • 2-up
  • Swipe
  • Onion skin
public/assets/icon/latex2image.png

347 KB | W: | H:

public/assets/icon/latex2image.png

182 KB | W: | H:

public/assets/icon/latex2image.png
public/assets/icon/latex2image.png
public/assets/icon/latex2image.png
public/assets/icon/latex2image.png
  • 2-up
  • Swipe
  • Onion skin
public/assets/icon/quotecard.png

396 KB | W: | H:

public/assets/icon/quotecard.png

178 KB | W: | H:

public/assets/icon/quotecard.png
public/assets/icon/quotecard.png
public/assets/icon/quotecard.png
public/assets/icon/quotecard.png
  • 2-up
  • Swipe
  • Onion skin
public/assets/icon/url-endecode.png

234 KB | W: | H:

public/assets/icon/url-endecode.png

193 KB | W: | H:

public/assets/icon/url-endecode.png
public/assets/icon/url-endecode.png
public/assets/icon/url-endecode.png
public/assets/icon/url-endecode.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -24,6 +24,7 @@ const LatexToImage = lazy(() => import('./components/LatexToImage'));
const TextDiff = lazy(() => import('./components/TextDiff'));
const SubtitleGenerator = lazy(() => import('./components/SubtitleGenerator'));
const ImageCompressor = lazy(() => import('./components/ImageCompressor'));
const ImageWatermark = lazy(() => import('./components/ImageWatermark'));
function App() {
return (
......@@ -54,6 +55,7 @@ function App() {
<Route path="/text-diff" element={<TextDiff />} />
<Route path="/subtitle-to-image" element={<SubtitleGenerator />} />
<Route path="/image-compressor" element={<ImageCompressor />} />
<Route path="/image-watermark" element={<ImageWatermark />} />
<Route path="*" element={<NotFound />} />
......
This diff is collapsed.
......@@ -158,5 +158,32 @@
"maxImagesHint": "You can upload a maximum of 10 images",
"recompress": "Recompress",
"compressionSettings": "Compression Settings"
}
},
"imageWatermark": {
"title": "Image Watermark",
"description": "Add text or image watermark to the image",
"uploadImage": "Upload Image",
"dropOrClick": "Drag or click to upload image",
"watermarkType": "Watermark Type",
"textWatermark": "Text Watermark",
"imageWatermark": "Image Watermark",
"watermarkText": "Watermark Text",
"watermarkTextPlaceholder": "Please enter watermark text",
"watermarkImage": "Watermark Image",
"uploadWatermark": "Upload Watermark Image",
"opacity": "Opacity",
"fontSize": "Font Size",
"rotation": "Rotation Angle",
"color": "Color",
"position": "Position",
"positions": {
"center": "Center",
"topLeft": "Top Left",
"topRight": "Top Right",
"bottomLeft": "Bottom Left",
"bottomRight": "Bottom Right"
},
"download": "Download Image",
"noImage": "Please upload an image"
}
}
\ No newline at end of file
......@@ -158,5 +158,32 @@
"maxImagesHint": "最大10枚の画像をアップロードできます",
"recompress": "再圧縮",
"compressionSettings": "圧縮設定"
},
"imageWatermark": {
"title": "画像の透かし",
"description": "画像にテキストまたは画像の透かしを追加",
"uploadImage": "画像をアップロード",
"dropOrClick": "ドラッグまたはクリックして画像をアップロード",
"watermarkType": "透かしの種類",
"textWatermark": "テキストの透かし",
"imageWatermark": "画像の透かし",
"watermarkText": "透かしテキスト",
"watermarkTextPlaceholder": "透かしテキストを入力してください",
"watermarkImage": "透かし画像",
"uploadWatermark": "透かし画像をアップロード",
"opacity": "不透明度",
"fontSize": "フォントサイズ",
"rotation": "回転角度",
"color": "カラー",
"position": "位置",
"positions": {
"center": "中央",
"topLeft": "左上",
"topRight": "右上",
"bottomLeft": "左下",
"bottomRight": "右下"
},
"download": "画像をダウンロード",
"noImage": "画像をアップロードしてください"
}
}
\ No newline at end of file
......@@ -159,5 +159,32 @@
"maxImagesHint": "최대 10개의 이미지를 업로드할 수 있습니다",
"recompress": "재압축",
"compressionSettings": "압축 설정"
},
"imageWatermark": {
"title": "이미지 워터마크",
"description": "이미지에 텍스트 또는 이미지 워터마크 추가",
"uploadImage": "이미지 업로드",
"dropOrClick": "드래그하거나 클릭하여 이미지 업로드",
"watermarkType": "워터마크 유형",
"textWatermark": "텍스트 워터마크",
"imageWatermark": "이미지 워터마크",
"watermarkText": "워터마크 텍스트",
"watermarkTextPlaceholder": "워터마크 텍스트를 입력하세요",
"watermarkImage": "워터마크 이미지",
"uploadWatermark": "워터마크 이미지 업로드",
"opacity": "불투명도",
"fontSize": "글꼴 크기",
"rotation": "회전 각도",
"color": "색상",
"position": "위치",
"positions": {
"center": "가운데",
"topLeft": "왼쪽 위",
"topRight": "오른쪽 위",
"bottomLeft": "왼쪽 아래",
"bottomRight": "오른쪽 아래"
},
"download": "이미지 다운로드",
"noImage": "이미지를 업로드하세요"
}
}
\ No newline at end of file
......@@ -113,7 +113,7 @@
"newPlaceholder": "在此输入新文本..."
},
"subtitleGenerator": {
"title": "字幕拼接工具",
"title": "字幕拼接",
"description": "快速生成多行字幕图片,支持自定义样式",
"uploadImage": "上传背景图片",
"removeImage": "移除图片",
......@@ -157,5 +157,32 @@
"maxImagesHint": "最多可上传 10 张图片",
"recompress": "重新压缩",
"compressionSettings": "压缩设置"
},
"imageWatermark": {
"title": "图片水印",
"description": "为图片添加文字或图片水印",
"uploadImage": "上传图片",
"dropOrClick": "拖拽或点击上传图片",
"watermarkType": "水印类型",
"textWatermark": "文字水印",
"imageWatermark": "图片水印",
"watermarkText": "水印文字",
"watermarkTextPlaceholder": "请输入水印文字",
"watermarkImage": "水印图片",
"uploadWatermark": "上传水印图片",
"opacity": "透明度",
"fontSize": "字体大小",
"rotation": "旋转角度",
"color": "颜色",
"position": "位置",
"positions": {
"center": "居中",
"topLeft": "左上角",
"topRight": "右上角",
"bottomLeft": "左下角",
"bottomRight": "右下角"
},
"download": "下载图片",
"noImage": "请上传图片"
}
}
......@@ -9,6 +9,7 @@ const tools = [
{ id: 'markdown2image', icon: '/assets/icon/markdown2image.png', path: '/markdown-to-image' },
{ id: 'subtitleGenerator', icon: '/assets/icon/subtitle2image.png', path: '/subtitle-to-image' },
{ id: 'imageCompressor', icon: '/assets/icon/image-compressor.png', path: '/image-compressor' },
{ id: 'imageWatermark', icon: '/assets/icon/image-watermark.png', path: '/image-watermark' },
{ id: 'latex2image', icon: '/assets/icon/latex2image.png', path: '/latex-to-image' },
{ id: 'jsonFormatter', icon: '/assets/icon/json-format.png', path: '/json-formatter' },
......
......@@ -10,7 +10,7 @@ const tools = [
{ id: 'latex2image', icon: '/assets/icon/latex2image.png', path: '/latex-to-image' },
{ id: 'subtitleGenerator', icon: '/assets/icon/subtitle2image.png', path: '/subtitle-to-image' },
{ id: 'imageCompressor', icon: '/assets/icon/image-compressor.png', path: '/image-compressor' },
{ id: 'imageWatermark', icon: '/assets/icon/image-watermark.png', path: '/image-watermark' },
];
const ImageTools = () => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment