mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(docs-i18n): translate all documentation into 20 languages
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "ضبط السطوع والتباين والتشبّع ودرجة الحرارة والصبغة والقنوات وتطبيق مؤثّرات لونية."
|
||||
i18n_source_hash: 41b35fe5c2ba
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 805146b75cef
|
||||
---
|
||||
|
||||
# ضبط الألوان {#adjust-colors}
|
||||
|
||||
أداة شاملة لضبط الألوان تجمع السطوع والتباين والتعرّض والتشبّع ودرجة الحرارة والصبغة وتدوير الصبغة ومستويات كل قناة والمؤثّرات بنقرة واحدة (تدرّج رمادي، بنّي داكن، عكس) في نقطة نهاية واحدة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/adjust-colors`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| brightness | number | لا | `0` | ضبط السطوع (-100 إلى 100) |
|
||||
| contrast | number | لا | `0` | ضبط التباين (-100 إلى 100) |
|
||||
| exposure | number | لا | `0` | التعرّض / غاما النغمات الوسطى (-100 إلى 100) |
|
||||
| saturation | number | لا | `0` | تشبّع اللون (-100 إلى 100) |
|
||||
| temperature | number | لا | `0` | توازن اللون الأبيض: بارد/أزرق إلى دافئ/برتقالي (-100 إلى 100) |
|
||||
| tint | number | لا | `0` | إزاحة الصبغة: أخضر إلى أرجواني (-100 إلى 100) |
|
||||
| hue | number | لا | `0` | تدوير الصبغة بالدرجات (-180 إلى 180) |
|
||||
| sharpness | number | لا | `0` | قوة الحدّة (0 إلى 100) |
|
||||
| red | number | لا | `100` | مستوى القناة الحمراء (0 إلى 200، 100 = دون تغيير) |
|
||||
| green | number | لا | `100` | مستوى القناة الخضراء (0 إلى 200، 100 = دون تغيير) |
|
||||
| blue | number | لا | `100` | مستوى القناة الزرقاء (0 إلى 200، 100 = دون تغيير) |
|
||||
| effect | string | لا | `"none"` | المؤثّر اللوني: `none`، `grayscale`، `sepia`، `invert` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/adjust-colors \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"brightness": 20, "contrast": 10, "saturation": -30, "effect": "none"}'
|
||||
```
|
||||
|
||||
تطبيق مظهر عتيق دافئ:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/adjust-colors \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"temperature": 40, "saturation": -15, "contrast": 10, "effect": "sepia"}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تتخذ جميع المعاملات قيمًا محايدة افتراضيًا لتضبط ما تحتاجه فقط.
|
||||
- تُطبَّق التعديلات بهذا الترتيب: السطوع، التباين، التعرّض، التشبّع/الصبغة، درجة الحرارة/الصبغة، الحدّة، القنوات، المؤثّرات.
|
||||
- تستخدم درجة الحرارة مصفوفة إعادة تركيب لونية 3x3 على محورَي أزرق-برتقالي وأخضر-أرجواني.
|
||||
- يُطابَق التعرّض بدالة غاما في Sharp (الموجب يُفتّح النغمات الوسطى، والسالب يُعتّمها).
|
||||
- تستجيب نقطة النهاية هذه أيضًا على المسارات القديمة `/api/v1/tools/image/brightness-contrast`، `/api/v1/tools/image/saturation`، `/api/v1/tools/image/color-channels`، و`/api/v1/tools/image/color-effects`. وكلّها تستخدم المخطّط نفسه.
|
||||
- تطابِق صيغة المخرجات صيغة الإدخال. تُفكَّك مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
description: "توسيع لوحة الصورة بالرسم الخارجي بالذكاء الاصطناعي، مع مدّها في أي اتجاه وملء المناطق الجديدة لتطابق الأصل."
|
||||
i18n_source_hash: 1b00db4ed40d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 554b854ef598
|
||||
---
|
||||
|
||||
# توسيع اللوحة بالذكاء الاصطناعي {#ai-canvas-expand}
|
||||
|
||||
وسّع لوحة الصورة بملء مدعوم بالذكاء الاصطناعي (الرسم الخارجي). يمدّ الصورة في أي اتجاه ويملأ المناطق الجديدة بمحتوى مُولَّد بالذكاء الاصطناعي يطابق الصورة الموجودة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/ai-canvas-expand`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلِم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `object-eraser-colorize` (1-2 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف صورة (multipart) |
|
||||
| extendTop | integer | لا | `0` | البكسلات المراد مدّها في الأعلى |
|
||||
| extendRight | integer | لا | `0` | البكسلات المراد مدّها على اليمين |
|
||||
| extendBottom | integer | لا | `0` | البكسلات المراد مدّها في الأسفل |
|
||||
| extendLeft | integer | لا | `0` | البكسلات المراد مدّها على اليسار |
|
||||
| tier | string | لا | `"balanced"` | مستوى الجودة: `fast`، `balanced`، `high` |
|
||||
| format | string | لا | `"auto"` | صيغة المخرجات: `auto`، `png`، `jpg`، `jpeg`، `webp`، `tiff`، `gif`، `avif`، `heic`، `heif`، `jxl` |
|
||||
| quality | integer | لا | `95` | جودة المخرجات (1-100) |
|
||||
|
||||
يجب أن يكون اتجاه واحد على الأقل من اتجاهات المدّ أكبر من 0.
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/ai-canvas-expand \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"extendTop":200,"extendBottom":200,"extendLeft":100,"extendRight":100,"tier":"balanced"}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Expanding canvas...","percent":50}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_extended.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 300000,
|
||||
"processedSize": 520000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلّب تثبيت حزمة النموذج `object-eraser-colorize` (1-2 غيغابايت).
|
||||
- يستخدم الرسم الخارجي المبني على LaMa لتوليد محتوى للمناطق المُوسّعة.
|
||||
- يوازن المعامل `tier` بين السرعة والجودة: `fast` يُنتج نتائج بسرعة مع احتمال ظهور آثار، بينما `high` يستغرق وقتًا أطول لكنه يُنتج ملئًا أنعم وأكثر تماسكًا.
|
||||
- قيم المدّ بالبكسل. ستكون أبعاد الصورة النهائية: العرض الأصلي + extendLeft + extendRight في الارتفاع الأصلي + extendTop + extendBottom.
|
||||
- لصيغ المخرجات غير القابلة للمعاينة في المتصفّح (HEIC، JXL، TIFF)، تُولَّد معاينة WebP إلى جانب المخرجات الرئيسية.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر الفكّ التلقائي.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "استبدال خلفية الصورة بلون خالص أو تدرّج لوني باستخدام الذكاء الاصطناعي."
|
||||
i18n_source_hash: 930fe8890e55
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4af778e4a89c
|
||||
---
|
||||
|
||||
# استبدال الخلفية {#background-replace}
|
||||
|
||||
استبدل خلفية الصورة بلون خالص أو تدرّج لوني. يكتشف نموذج الذكاء الاصطناعي الموضوع، ويزيل الخلفية الأصلية، ويركّب الموضوع على الخلفية التي اخترتها.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/background-replace`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| backgroundType | string | لا | `"color"` | وضع الخلفية: `color` أو `gradient` |
|
||||
| color | string | لا | `"#ffffff"` | لون الخلفية بصيغة hex (عندما يكون backgroundType هو `color`) |
|
||||
| gradientColor1 | string | لا | - | أول لون تدرّج بصيغة hex |
|
||||
| gradientColor2 | string | لا | - | ثاني لون تدرّج بصيغة hex |
|
||||
| gradientAngle | integer | لا | `180` | زاوية التدرّج بالدرجات (0-360) |
|
||||
| feather | integer | لا | `0` | نصف قطر تنعيم الحواف (0-20) |
|
||||
| format | string | لا | `"png"` | صيغة المخرجات: `png` أو `webp` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/background-replace \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"backgroundType": "color", "color": "#2563eb", "feather": 2}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
تابِع التقدّم عبر SSE على `GET /api/v1/jobs/{jobId}/progress`. عند اكتمال المهمّة، يُصدر بثّ SSE حدث `completed` مع رابط التنزيل.
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- هذه أداة مدعومة بالذكاء الاصطناعي تُرجع `202 Accepted` وتعالج بشكل غير متزامن. اتّصل بنقطة نهاية SSE لتلقّي تحديثات التقدّم والنتيجة النهائية.
|
||||
- يتطلّب تثبيت حزمة ميزة **background-removal**. يُرجع `501` إذا لم تكن الحزمة متوفّرة.
|
||||
- تُفكَّك مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
- تتخذ المخرجات صيغة PNG افتراضيًا للحفاظ على الشفافية حول الموضوع.
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
description: "توليد الباركود بصيغ Code 128 وEAN-13 وUPC-A وCode 39 وITF-14 وData Matrix."
|
||||
i18n_source_hash: e84b1df40c7e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a29a8594bb32
|
||||
---
|
||||
|
||||
# مولّد الباركود {#barcode-generator}
|
||||
|
||||
ولّد صور باركود من نص مُدخَل. يدعم صيغ Code 128 وEAN-13 وUPC-A وCode 39 وITF-14 وData Matrix.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/barcode-generate`
|
||||
|
||||
يقبل جسم `application/json` (وليس multipart). يُولَّد الباركود من النص المُقدَّم، لا من ملف مرفوع.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | نعم | - | النص المراد ترميزه في الباركود (1-256 حرفًا) |
|
||||
| type | string | لا | `"code128"` | صيغة الباركود: `code128`، `ean13`، `upca`، `code39`، `itf14`، `datamatrix` |
|
||||
| scale | integer | لا | `3` | عامل تكبير الصورة (1-8) |
|
||||
| includeText | boolean | لا | `true` | ما إذا كان يُصيَّر النص أسفل الباركود |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/barcode-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "5901234123457", "type": "ean13", "scale": 4}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/barcode.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 4520
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- على خلاف معظم الأدوات، تقبل نقطة النهاية هذه جسم JSON لا بيانات نموذج متعدّد الأجزاء، لأن الباركود يُولَّد من نص لا من ملف مرفوع.
|
||||
- يتطلّب EAN-13 ما يعادل 12 أو 13 رقمًا بالضبط. ويتطلّب UPC-A ما يعادل 11 أو 12 رقمًا بالضبط. وإذا حُذف رقم التحقّق، فإنه يُحسَب تلقائيًا.
|
||||
- Code 128 هو الصيغة الأكثر مرونة ويدعم مجموعة أحرف ASCII الكاملة.
|
||||
- تُنتج Data Matrix باركود ثنائي الأبعاد مناسبًا لترميز سلاسل أطول في مربّع مضغوط.
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
description: "مسح الصور بحثًا عن رموز QR والباركود والرموز ثنائية الأبعاد مع مخرجات موسومة."
|
||||
i18n_source_hash: 97c9d395c257
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: dfb973d83488
|
||||
---
|
||||
|
||||
# قارئ الباركود {#barcode-reader}
|
||||
|
||||
امسح الصور المرفوعة بحثًا عن جميع أنواع الباركود ورموز QR. تُرجع النص المُفكَّك ونوع الباركود وبيانات الموضع لكل رمز مكتشَف. تولّد أيضًا صورة موسومة بمربّعات إحاطة ملوّنة حول الرموز المكتشَفة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/barcode-read`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع ملف صورة وحقل `settings` اختياري بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| tryHarder | boolean | لا | `true` | تفعيل وضع المسح المكثّف للباركود الأصعب قراءة (أبطأ لكن أكثر دقّة) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/barcode-read \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@receipt.jpg" \
|
||||
-F 'settings={"tryHarder": true}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "receipt.jpg",
|
||||
"barcodes": [
|
||||
{
|
||||
"type": "QRCode",
|
||||
"text": "https://example.com/product/123",
|
||||
"position": {
|
||||
"topLeft": { "x": 100, "y": 50 },
|
||||
"topRight": { "x": 250, "y": 50 },
|
||||
"bottomLeft": { "x": 100, "y": 200 },
|
||||
"bottomRight": { "x": 250, "y": 200 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "EAN-13",
|
||||
"text": "5901234123457",
|
||||
"position": {
|
||||
"topLeft": { "x": 50, "y": 400 },
|
||||
"topRight": { "x": 300, "y": 400 },
|
||||
"bottomLeft": { "x": 50, "y": 450 },
|
||||
"bottomRight": { "x": 300, "y": 450 }
|
||||
}
|
||||
}
|
||||
],
|
||||
"annotatedUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/annotated-receipt.png",
|
||||
"previewUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/annotated-receipt.png"
|
||||
}
|
||||
```
|
||||
|
||||
## حقول الاستجابة {#response-fields}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| filename | string | اسم الملف الأصلي |
|
||||
| barcodes | array | مصفوفة من كائنات الباركود المكتشَفة |
|
||||
| annotatedUrl | string أو null | رابط تنزيل الصورة الموسومة (null إذا لم يُعثَر على باركود) |
|
||||
| previewUrl | string أو null | مثل annotatedUrl (لتوافق معاينة الواجهة الأمامية) |
|
||||
|
||||
### كائن الباركود {#barcode-object}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| type | string | صيغة الباركود (QRCode، EAN-13، Code128، DataMatrix، PDF417، إلخ) |
|
||||
| text | string | المحتوى المُفكَّك للباركود |
|
||||
| position | object | مربّع إحاطة بإحداثيات topLeft وtopRight وbottomLeft وbottomRight |
|
||||
|
||||
## أنواع الباركود المدعومة {#supported-barcode-types}
|
||||
|
||||
الباركود أحادي الأبعاد: Code128، Code39، Code93، Codabar، EAN-8، EAN-13، ITF، UPC-A، UPC-E
|
||||
|
||||
الباركود ثنائي الأبعاد: QRCode، DataMatrix، PDF417، Aztec، MaxiCode
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يستخدم مكتبة zxing-wasm لاكتشاف الباركود.
|
||||
- تُراكِب الصورة الموسومة مربّعات إحاطة مضلّعة ملوّنة وعلامات مرقّمة على كل باركود مكتشَف.
|
||||
- يمكن اكتشاف ما يصل إلى 255 باركود في صورة واحدة.
|
||||
- إذا لم يُعثَر على أي باركود، تكون `barcodes` مصفوفة فارغة وتكون `annotatedUrl` قيمة null.
|
||||
- يجري وضع `tryHarder` مسحًا أكثر دقّة على حساب وقت المعالجة. عطّله لمعالجة أسرع للباركود النظيف والمحاذى جيدًا.
|
||||
- تكون المخرجات الموسومة دائمًا بصيغة PNG.
|
||||
- تُفكَّك مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المسح.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "حوّل لقطات الشاشة العادية إلى صور مصقولة بخلفيات متدرّجة وإطارات أجهزة وظلال وأحجام مناسبة لوسائل التواصل الاجتماعي."
|
||||
i18n_source_hash: 8fd8a930a45e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 66b480c18c3c
|
||||
---
|
||||
|
||||
# تجميل لقطة الشاشة {#beautify-screenshot}
|
||||
|
||||
أضِف خلفيات متدرّجة وإطارات أجهزة وظلالًا وعلامات مائية وأحجامًا مناسبة لوسائل التواصل الاجتماعي إلى لقطات الشاشة. مثالية لإنشاء صور مصقولة لتسويق المنتجات ووسائل التواصل الاجتماعي والتوثيق.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/beautify`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| backgroundType | string | لا | `"linear-gradient"` | نوع الخلفية: `solid`، `linear-gradient`، `radial-gradient`، `image`، `transparent` |
|
||||
| backgroundColor | string | لا | `"#667eea"` | لون خلفية خالص (يُستخدَم عندما تكون `backgroundType` هي `solid`) |
|
||||
| gradientStops | array | لا | `[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}]` | محطّات ألوان التدرّج (حدّ أدنى 2). كل محطّة لها `color` (hex) و`position` (0-100). |
|
||||
| gradientAngle | number | لا | 135 | زاوية التدرّج بالدرجات (0 إلى 360) |
|
||||
| padding | number | لا | 64 | الحشوة حول الصورة بالبكسل (0 إلى 256) |
|
||||
| borderRadius | number | لا | 12 | نصف قطر الزوايا على لقطة الشاشة (0 إلى 64) |
|
||||
| shadowPreset | string | لا | `"subtle"` | إعداد الظلّ المُسبَق: `none`، `subtle`، `medium`، `dramatic`، `custom` |
|
||||
| shadowBlur | number | لا | 20 | نصف قطر ضبابية الظلّ المخصّص (0 إلى 100، يُستخدَم عندما تكون `shadowPreset` هي `custom`) |
|
||||
| shadowOffsetX | number | لا | 0 | إزاحة الظلّ الأفقية المخصّصة (-50 إلى 50) |
|
||||
| shadowOffsetY | number | لا | 10 | إزاحة الظلّ العمودية المخصّصة (-50 إلى 50) |
|
||||
| shadowColor | string | لا | `"#000000"` | لون الظلّ المخصّص بصيغة hex |
|
||||
| shadowOpacity | number | لا | 30 | تعتيم الظلّ المخصّص (0 إلى 100) |
|
||||
| frame | string | لا | `"none"` | إطار الجهاز أو النافذة: `none`، `macos-light`، `macos-dark`، `windows-light`، `windows-dark`، `browser-light`، `browser-dark`، `iphone`، `iphone-dark`، `macbook`، `macbook-dark`، `ipad`، `ipad-dark` |
|
||||
| frameTitle | string | لا | - | نص العنوان المعروض في أشرطة عنوان إطار النافذة |
|
||||
| socialPreset | string | لا | `"none"` | تغيير الحجم إلى أبعاد وسائل التواصل الاجتماعي: `none`، `twitter`، `linkedin`، `instagram-square`، `instagram-story`، `facebook`، `producthunt` |
|
||||
| watermarkText | string | لا | - | نص علامة مائية اختياري كطبقة علوية |
|
||||
| watermarkPosition | string | لا | `"bottom-right"` | موضع العلامة المائية: `top-left`، `top-right`، `bottom-left`، `bottom-right`، `center` |
|
||||
| watermarkOpacity | number | لا | 50 | تعتيم العلامة المائية (0 إلى 100) |
|
||||
| outputFormat | string | لا | `"png"` | صيغة المخرجات: `png`، `jpeg`، `webp` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/beautify \
|
||||
-F "file=@screenshot.png" \
|
||||
-F 'settings={"backgroundType":"linear-gradient","gradientStops":[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}],"gradientAngle":135,"padding":64,"borderRadius":12,"shadowPreset":"medium","frame":"macos-dark","socialPreset":"twitter"}'
|
||||
```
|
||||
|
||||
### مع صورة خلفية {#with-background-image}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/beautify \
|
||||
-F "file=@screenshot.png" \
|
||||
-F "backgroundImage=@bg-texture.jpg" \
|
||||
-F 'settings={"backgroundType":"image","padding":80,"borderRadius":16,"shadowPreset":"dramatic"}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
|
||||
"originalSize": 234567,
|
||||
"processedSize": 567890
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يقبل حقلَي ملف: `file` (مطلوب، لقطة الشاشة الرئيسية) و`backgroundImage` (اختياري، يُستخدَم عندما تكون `backgroundType` هي `image`).
|
||||
- يدعم صيغ الإدخال HEIC وRAW وPSD وSVG (تُفكَّك تلقائيًا).
|
||||
- تُطابَق إعدادات الظلّ المُسبَقة بقيم محدّدة:
|
||||
- `subtle`: ضبابية 20، offsetY 4، تعتيم 20%
|
||||
- `medium`: ضبابية 40، offsetY 10، تعتيم 35%
|
||||
- `dramatic`: ضبابية 80، offsetY 20، تعتيم 50%
|
||||
- تغيّر إعدادات وسائل التواصل الاجتماعي المُسبَقة حجم المخرجات النهائية لتلائم الأبعاد المستهدفة باستخدام وضع `contain`:
|
||||
- `twitter`: 1600x900
|
||||
- `linkedin`: 1200x627
|
||||
- `instagram-square`: 1080x1080
|
||||
- `instagram-story`: 1080x1920
|
||||
- `facebook`: 1200x630
|
||||
- `producthunt`: 1270x760
|
||||
- تطبّق إطارات الأجهزة (`iphone`، `macbook`، `ipad`) حافّة عتاد حول الصورة وتتجاوز إعداد `borderRadius`.
|
||||
- عند الحاجة إلى الشفافية (ظلّ، أو نصف قطر حدود، أو إطارات أجهزة، أو خلفية شفّافة)، تُفرَض المخرجات إلى PNG حتى لو اختيرت `jpeg`.
|
||||
- خلفيات الصور غير مدعومة في وضع خطّ الأنابيب/الدفعات.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "تمويه الخلفية مع الحفاظ على وضوح الموضوع باستخدام الذكاء الاصطناعي."
|
||||
i18n_source_hash: 9073f10e6e9d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: de4d8b4f37a2
|
||||
---
|
||||
|
||||
# تمويه الخلفية {#blur-background}
|
||||
|
||||
موّه خلفية الصورة مع الحفاظ على وضوح الموضوع. يعزل نموذج الذكاء الاصطناعي الموضوع، ويطبّق تمويهًا على الخلفية الأصلية، ويركّب الموضوع الواضح فوقها.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/blur-background`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| intensity | integer | لا | `50` | شدّة التمويه (1-100) |
|
||||
| feather | integer | لا | `0` | نصف قطر تنعيم الحواف (0-20) |
|
||||
| format | string | لا | `"png"` | صيغة المخرجات: `png` أو `webp` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/blur-background \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"intensity": 75, "feather": 3}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
تابِع التقدّم عبر SSE على `GET /api/v1/jobs/{jobId}/progress`. عند اكتمال المهمّة، يُصدر بثّ SSE حدث `completed` مع رابط التنزيل.
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- هذه أداة مدعومة بالذكاء الاصطناعي تُرجع `202 Accepted` وتعالج بشكل غير متزامن. اتّصل بنقطة نهاية SSE لتلقّي تحديثات التقدّم والنتيجة النهائية.
|
||||
- يتطلّب تثبيت حزمة ميزة **background-removal**. يُرجع `501` إذا لم تكن الحزمة متوفّرة.
|
||||
- تُنتج القيم الأعلى للشدّة تأثير تمويه أقوى. تُنشئ القيم فوق 80 فصلًا بارزًا يشبه البوكيه.
|
||||
- تُفكَّك مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "اكتشاف الوجوه وتمويهها تلقائيًا في الصور بكشف الوجوه بالذكاء الاصطناعي حفاظًا على الخصوصية والتجهيل المتوافق مع GDPR."
|
||||
i18n_source_hash: fb861c12aea5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 285d3d7226d6
|
||||
---
|
||||
|
||||
# تمويه الوجوه / المعلومات الشخصية {#face-pii-blur}
|
||||
|
||||
اكتشف الوجوه وموّهها تلقائيًا في الصور باستخدام كشف الوجوه المدعوم بالذكاء الاصطناعي (MediaPipe).
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/blur-faces`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلِم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `face-detection` (200-300 ميغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف صورة (multipart) |
|
||||
| blurRadius | number | لا | `30` | نصف قطر التمويه المطبّق على الوجوه المكتشَفة (1-100) |
|
||||
| sensitivity | number | لا | `0.5` | حساسية كشف الوجوه (0-1). القيم الأدنى تكتشف وجوهًا أقل بثقة أعلى |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/blur-faces \
|
||||
-F "file=@group-photo.jpg" \
|
||||
-F 'settings={"blurRadius":40,"sensitivity":0.3}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Detecting faces...","percent":40}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/group-photo_blurred.jpg",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 420000,
|
||||
"facesDetected": 3,
|
||||
"faces": [
|
||||
{"x": 100, "y": 50, "w": 80, "h": 80},
|
||||
{"x": 300, "y": 60, "w": 75, "h": 75},
|
||||
{"x": 500, "y": 55, "w": 85, "h": 85}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### لم تُكتشَف وجوه {#no-faces-detected}
|
||||
|
||||
إذا لم يُعثَر على أي وجوه، تتضمّن النتيجة تحذيرًا:
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"facesDetected": 0,
|
||||
"warning": "No faces detected in this image. Try increasing detection sensitivity."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلّب تثبيت حزمة النموذج `face-detection` (200-300 ميغابايت).
|
||||
- تطابِق صيغة المخرجات صيغة الإدخال تلقائيًا.
|
||||
- تحتوي المصفوفة `faces` على إحداثيات مربّع الإحاطة (x، y، width، height) لكل وجه مكتشَف.
|
||||
- ارفع قيمة `sensitivity` (أقرب إلى 1.0) لاكتشاف مزيد من الوجوه، بما فيها الوجوه المحجوبة جزئيًا.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر الفكّ التلقائي.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
description: "إضافة حدود وحشوة وزوايا مستديرة وظلال مسقطة إلى الصور بترتيب قابل للتنبّؤ والتحكّم."
|
||||
i18n_source_hash: 8845150736a9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 22b7c5cf11d2
|
||||
---
|
||||
|
||||
# الحدود والإطار {#border-frame}
|
||||
|
||||
أضِف حدودًا وحشوة وزوايا مستديرة وظلالًا مسقطة إلى الصور. تطبّق الأداة المؤثّرات بالترتيب: الحشوة، الحدّ، نصف قطر الزوايا، ثم الظلّ.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/border`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| borderWidth | number | لا | 10 | سُمك الحدّ بالبكسل (0 إلى 2000) |
|
||||
| borderColor | string | لا | `"#000000"` | لون الحدّ بصيغة hex (مثل `#FF0000`) |
|
||||
| padding | number | لا | 0 | الحشوة الداخلية بين الصورة والحدّ بالبكسل (0 إلى 200) |
|
||||
| paddingColor | string | لا | `"#FFFFFF"` | لون تعبئة الحشوة بصيغة hex |
|
||||
| cornerRadius | number | لا | 0 | نصف قطر الزوايا بالبكسل (0 إلى 2000) |
|
||||
| shadow | boolean | لا | `false` | ما إذا كان يُضاف ظلّ مسقط |
|
||||
| shadowBlur | number | لا | 15 | نصف قطر ضبابية الظلّ (1 إلى 200) |
|
||||
| shadowOffsetX | number | لا | 0 | إزاحة الظلّ الأفقية (-50 إلى 50) |
|
||||
| shadowOffsetY | number | لا | 5 | إزاحة الظلّ العمودية (-50 إلى 50) |
|
||||
| shadowColor | string | لا | `"#000000"` | لون الظلّ بصيغة hex |
|
||||
| shadowOpacity | number | لا | 40 | نسبة تعتيم الظلّ (0 إلى 100) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/border \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"borderWidth":20,"borderColor":"#333333","cornerRadius":16,"shadow":true,"shadowBlur":25,"shadowOpacity":50}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 456789,
|
||||
"processedSize": 523456
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يستخدم مصنع `createToolRoute` القياسي. يقبل ملف صورة واحدًا عبر رفع multipart.
|
||||
- يدعم صيغ الإدخال HEIC وRAW وPSD وSVG (تُفكَّك تلقائيًا).
|
||||
- ترتيب المعالجة: تُضاف الحشوة أولًا، ثم يلتفّ الحدّ حولها، ثم يُطبَّق نصف قطر الزوايا، ثم يُركَّب الظلّ.
|
||||
- عند تفعيل `cornerRadius` أو `shadow`، تُفرَض المخرجات إلى PNG (بغضّ النظر عن صيغة الإدخال) للحفاظ على الشفافية. أما الصيغ التي تدعم قناة ألفا (PNG، WebP، AVIF) فتحتفظ بصيغتها الأصلية.
|
||||
- الظلّ واعٍ بالشكل: فهو يتبع الزوايا المستديرة بدلًا من إنشاء ظلّ مستطيل.
|
||||
- يؤدّي ضبط `borderWidth` على 0 واستخدام `cornerRadius` + `shadow` فقط إلى إنشاء تأثير ظلّ مستدير بلا إطار.
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
description: "إعادة تسمية عدّة ملفات باستخدام قالب نمط وتنزيلها كملف ZIP."
|
||||
i18n_source_hash: 2776dcc2f71c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: ce423a6d3e41
|
||||
---
|
||||
|
||||
# إعادة التسمية الجماعية {#bulk-rename}
|
||||
|
||||
أعِد تسمية عدّة ملفات باستخدام قالب نمط يحوي عناصر نائبة للفهرس والفهرس المبطّن واسم الملف الأصلي. تُرجع أرشيف ZIP يحتوي على جميع الملفات المُعاد تسميتها.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/bulk-rename`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع عدّة ملفات وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| pattern | string | لا | `"image-{{index}}"` | نمط التسمية مع العناصر النائبة (بحدّ أقصى 1000 حرف) |
|
||||
| startIndex | number | لا | `1` | رقم الفهرس الابتدائي |
|
||||
|
||||
### العناصر النائبة في النمط {#pattern-placeholders}
|
||||
|
||||
| العنصر النائب | الوصف | مثال |
|
||||
|-------------|-------------|---------|
|
||||
| `{{index}}` | رقم تسلسلي يبدأ من `startIndex` | `1`، `2`، `3` |
|
||||
| `{{padded}}` | رقم تسلسلي مبطّن بالأصفار | `01`، `02`، `03` |
|
||||
| `{{original}}` | اسم الملف الأصلي بدون امتداد | `photo`، `IMG_001` |
|
||||
|
||||
يُحفَظ امتداد الملف الأصلي دائمًا.
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/bulk-rename \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F 'settings={"pattern": "vacation-{{padded}}", "startIndex": 1}'
|
||||
```
|
||||
|
||||
ينتج عن هذا: `vacation-1.jpg`، `vacation-2.jpg`، `vacation-3.jpg`
|
||||
|
||||
باستخدام اسم الملف الأصلي:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/bulk-rename \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@IMG_001.jpg" \
|
||||
-F "file=@IMG_002.jpg" \
|
||||
-F 'settings={"pattern": "2024-trip-{{original}}-{{index}}"}'
|
||||
```
|
||||
|
||||
ينتج عن هذا: `2024-trip-IMG_001-1.jpg`، `2024-trip-IMG_002-2.jpg`
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
الاستجابة ملف ZIP مُدفَّق مباشرةً (وليست استجابة JSON). ترويسات الاستجابة هي:
|
||||
|
||||
```
|
||||
Content-Type: application/zip
|
||||
Content-Disposition: attachment; filename="renamed-a1b2c3d4.zip"
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- لا تعالج هذه الأداة الصور. فهي تُعيد تسمية الملفات فقط وتحزمها في أرشيف ZIP.
|
||||
- يُحدَّد عرض التبطين بالأصفار لـ `{{padded}}` تلقائيًا بناءً على العدد الإجمالي للملفات (مثلًا 100 ملف تستخدم تبطينًا من 3 خانات: `001`، `002`، إلخ).
|
||||
- تُحفَظ امتدادات الملفات من أسماء الملفات الأصلية.
|
||||
- تُنقَّى أسماء الملفات لإزالة الأحرف غير الآمنة.
|
||||
- يجب توفير ملف واحد على الأقل.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "قصّ صورة إلى دائرة موسّطة بزوايا شفّافة."
|
||||
i18n_source_hash: 06c50ccd96b2
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 1a1acaa9d988
|
||||
---
|
||||
|
||||
# القصّ الدائري {#circle-crop}
|
||||
|
||||
اقصص صورة إلى دائرة موسّطة بزوايا شفّافة. يدعم تكبيرًا وإزاحة وحدًّا وحجم مخرجات قابلة للضبط.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/circle-crop`
|
||||
|
||||
يقبل بيانات نموذج متعدّد الأجزاء (multipart) مع ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| zoom | number | لا | `1` | عامل التكبير (1-5)؛ القيم الأعلى تقصّ بإحكام أكبر |
|
||||
| offsetX | number | لا | `0.5` | موضع المركز الأفقي (0-1) |
|
||||
| offsetY | number | لا | `0.5` | موضع المركز العمودي (0-1) |
|
||||
| borderWidth | integer | لا | `0` | عرض الحدّ بالبكسل (0-200) |
|
||||
| borderColor | string | لا | `"#ffffff"` | لون الحدّ بصيغة hex |
|
||||
| background | string | لا | `"transparent"` | تعبئة الزوايا: `"transparent"` أو لون بصيغة hex |
|
||||
| outputSize | integer | لا | - | البُعد المربّع النهائي بالبكسل (16-4096) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/circle-crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"zoom": 1.2, "borderWidth": 4, "borderColor": "#333333"}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 185000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تكون المخرجات دائمًا بصيغة PNG للحفاظ على الزوايا الشفّافة (ما لم تُضبَط `background` على لون خالص).
|
||||
- تُرسَم الدائرة داخل البُعد الأقصر للصورة. استخدم `zoom` للقصّ بإحكام أكبر و`offsetX`/`offsetY` لإزاحة المنطقة المرئية.
|
||||
- عند توفير `outputSize`، يُعاد ضبط حجم النتيجة إلى ذلك البُعد المربّع بعد القصّ.
|
||||
- تُفكَّك مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "دمج عدة صور في صور مجمّعة شبكية باستخدام أكثر من 25 قالبًا، مع فجوات وزوايا قابلة للتعديل، وتحريك وتكبير لكل خلية."
|
||||
i18n_source_hash: 96f2055717df
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f966a795442b
|
||||
---
|
||||
|
||||
# Collage / Grid {#collage-grid}
|
||||
|
||||
ادمج عدة صور في صور مجمّعة شبكية جميلة باستخدام أكثر من 25 قالبًا. يدعم تخطيطات من صورتين إلى 9 صور مع فجوة قابلة للتخصيص، ونصف قطر للزوايا، ولون خلفية، وعناصر تحكم بالتحريك والتكبير لكل خلية.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/collage`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| templateId | string | Yes | - | معرّف تخطيط القالب (مثل `2-h-equal`، `3-left-large`، `4-grid`، `9-grid`) |
|
||||
| cells | array | No | - | مصفوفة إعدادات لكل خلية تحتوي على `imageIndex`، `panX`، `panY`، `zoom`، `objectFit` |
|
||||
| cells[].imageIndex | integer | Yes | - | فهرس الصورة المراد وضعها في هذه الخلية (يبدأ من 0) |
|
||||
| cells[].panX | number | No | 0 | إزاحة التحريك الأفقية (-100 إلى 100) |
|
||||
| cells[].panY | number | No | 0 | إزاحة التحريك العمودية (-100 إلى 100) |
|
||||
| cells[].zoom | number | No | 1 | مستوى التكبير (1 إلى 10) |
|
||||
| cells[].objectFit | string | No | `"cover"` | كيفية ملء الصورة للخلية: `cover` أو `contain` |
|
||||
| gap | number | No | 8 | الفجوة بين الخلايا بالبكسل (0 إلى 500) |
|
||||
| cornerRadius | number | No | 0 | نصف قطر الزوايا لكل خلية بالبكسل (0 إلى 500) |
|
||||
| backgroundColor | string | No | `"#FFFFFF"` | لون الخلفية كقيمة hex أو `"transparent"` |
|
||||
| aspectRatio | string | No | `"free"` | نسبة أبعاد اللوحة: `free`، `1:1`، `4:3`، `3:2`، `16:9`، `9:16`، `4:5` |
|
||||
| outputFormat | string | No | `"png"` | صيغة الإخراج: `png`، `jpeg`، `webp`، `avif`، `jxl` |
|
||||
| quality | number | No | 90 | جودة الإخراج (1 إلى 100) |
|
||||
|
||||
## Available Templates {#available-templates}
|
||||
|
||||
| Template ID | Images | Layout |
|
||||
|-------------|--------|--------|
|
||||
| `2-h-equal` | 2 | عمودان متساويان |
|
||||
| `2-v-equal` | 2 | صفّان متساويان |
|
||||
| `2-h-left-large` | 2 | اليسار الثلثان، اليمين الثلث |
|
||||
| `2-h-right-large` | 2 | اليسار الثلث، اليمين الثلثان |
|
||||
| `3-left-large` | 3 | كبيرة على اليسار، اثنتان مكدّستان على اليمين |
|
||||
| `3-right-large` | 3 | اثنتان مكدّستان على اليسار، كبيرة على اليمين |
|
||||
| `3-top-large` | 3 | كبيرة في الأعلى، عمودان في الأسفل |
|
||||
| `3-h-equal` | 3 | ثلاثة أعمدة متساوية |
|
||||
| `3-v-equal` | 3 | ثلاثة صفوف متساوية |
|
||||
| `4-grid` | 4 | شبكة 2x2 |
|
||||
| `4-left-large` | 4 | كبيرة على اليسار، ثلاث مكدّسة على اليمين |
|
||||
| `4-top-large` | 4 | كبيرة في الأعلى، ثلاثة أعمدة في الأسفل |
|
||||
| `4-bottom-large` | 4 | ثلاثة أعمدة في الأعلى، كبيرة في الأسفل |
|
||||
| `5-top2-bottom3` | 5 | اثنتان في الأعلى، ثلاث في الأسفل |
|
||||
| `5-top3-bottom2` | 5 | ثلاث في الأعلى، اثنتان في الأسفل |
|
||||
| `5-left-large` | 5 | كبيرة على اليسار، أربع مكدّسة على اليمين |
|
||||
| `5-center-large` | 5 | كبيرة في المنتصف، أربع في الزوايا |
|
||||
| `6-grid-2x3` | 6 | عمودان × ثلاثة صفوف |
|
||||
| `6-grid-3x2` | 6 | ثلاثة أعمدة × صفّان |
|
||||
| `6-top-large` | 6 | كبيرة في الأعلى، خمسة أعمدة في الأسفل |
|
||||
| `7-mosaic` | 7 | تخطيط فسيفسائي |
|
||||
| `8-mosaic` | 8 | تخطيط فسيفسائي |
|
||||
| `9-grid` | 9 | شبكة 3x3 |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/collage \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F "file=@photo4.jpg" \
|
||||
-F 'settings={"templateId":"4-grid","gap":12,"cornerRadius":8,"backgroundColor":"#F5F5F5","outputFormat":"png","quality":90}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/collage.png",
|
||||
"originalSize": 2456789,
|
||||
"processedSize": 1823456
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- ارفع عدة ملفات صور في طلب multipart. تُسنَد الصور إلى خلايا القالب بترتيب الرفع.
|
||||
- إذا رُفعت صور أكثر مما يدعمه القالب، تُتجاهَل الصور الزائدة.
|
||||
- يدعم صيغ الإدخال HEIC وRAW وPSD وSVG (تُفَكّ شفرتها تلقائيًا).
|
||||
- الحجم الأساسي للوحة هو 2400 بكسل على الجانب الأطول، مع تحجيمه وفق نسبة الأبعاد المختارة.
|
||||
- عندما تكون `aspectRatio` هي `"free"`، تكون اللوحة افتراضيًا 4:3 (2400x1800).
|
||||
- تُزيح قيم `panX`/`panY` لكل خلية نافذة الاقتصاص داخل الخلية. قيمة 100 تحرّكها بالكامل نحو حافة، و-100 نحو الحافة المقابلة.
|
||||
- يُحفَظ لون الخلفية `"transparent"` فقط مع صيغ الإخراج `png` أو `webp` أو `avif`.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "محاكاة كيفية ظهور الصور للأشخاص المصابين بأنواع مختلفة من قصور رؤية الألوان."
|
||||
i18n_source_hash: 0b537628ba79
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e1a86fed371d
|
||||
---
|
||||
|
||||
# Color Blindness Simulation {#color-blindness-simulation}
|
||||
|
||||
حاكِ قصور رؤية الألوان (CVD) لمعاينة كيفية ظهور الصور للأشخاص المصابين بأنواع مختلفة من عمى الألوان. مفيد لاختبار إمكانية الوصول للتصاميم والمخططات وواجهات المستخدم.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/color-blindness`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| simulationType | string | No | `"deuteranomaly"` | نوع قصور رؤية الألوان المراد محاكاته |
|
||||
|
||||
### Simulation Types {#simulation-types}
|
||||
|
||||
| Value | Condition | Description |
|
||||
|-------|-----------|-------------|
|
||||
| `protanopia` | عمى اللون الأحمر | غياب كامل للخلايا المخروطية الحمراء |
|
||||
| `deuteranopia` | عمى اللون الأخضر | غياب كامل للخلايا المخروطية الخضراء |
|
||||
| `tritanopia` | عمى اللون الأزرق | غياب كامل للخلايا المخروطية الزرقاء |
|
||||
| `protanomaly` | ضعف اللون الأحمر | انخفاض حساسية الخلايا المخروطية الحمراء |
|
||||
| `deuteranomaly` | ضعف اللون الأخضر | انخفاض حساسية الخلايا المخروطية الخضراء (الأكثر شيوعًا) |
|
||||
| `tritanomaly` | ضعف اللون الأزرق | انخفاض حساسية الخلايا المخروطية الزرقاء |
|
||||
| `achromatopsia` | عمى ألوان كامل | غياب كامل لرؤية الألوان |
|
||||
| `blueConeMonochromacy` | مخاريط زرقاء فقط | المخاريط الزرقاء فقط تعمل |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/color-blindness \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@design.png" \
|
||||
-F 'settings={"simulationType": "deuteranopia"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/design.png",
|
||||
"originalSize": 1850000,
|
||||
"processedSize": 1820000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- ضعف اللون الأخضر (Deuteranomaly) هو الافتراضي لأنه أكثر أشكال قصور رؤية الألوان شيوعًا، ويصيب نحو 6% من الذكور.
|
||||
- تستخدم المحاكاة مصفوفات تحويل ألوان تُنمذج كيف تغيّر المستقبلات الضوئية المخروطية المنخفضة أو الغائبة الألوان المُدرَكة.
|
||||
- هذه الأداة غير متلفة وتنتج معاينة فقط. لا تعدّل الصورة الأصلية لأغراض إمكانية الوصول.
|
||||
- صيغة الإخراج تطابق صيغة الإدخال. تُفَكّ شفرة مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
description: "استخراج الألوان السائدة من صورة كلوحة ألوان."
|
||||
i18n_source_hash: 65ab22dd75a9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: bb9674f0c7fa
|
||||
---
|
||||
|
||||
# Color Palette {#color-palette}
|
||||
|
||||
استخرج الألوان السائدة من صورة وأعِدها كقيم ألوان hex. يستخدم تحليل التردد المُكمّم لتحديد الألوان الأكثر بروزًا وتمايزًا بصريًا.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/color-palette`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON اختياري باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| count | integer | No | `8` | عدد الألوان المراد استخراجها (2-16) |
|
||||
| format | string | No | `"hex"` | صيغة اللون: `hex`، `rgb`، `hsl` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/color-palette \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"count": 6, "format": "hex"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"colors": [
|
||||
"#304080",
|
||||
"#e0a060",
|
||||
"#f0f0f0",
|
||||
"#203020",
|
||||
"#a0c0e0",
|
||||
"#806040"
|
||||
],
|
||||
"hex": [
|
||||
"#304080",
|
||||
"#e0a060",
|
||||
"#f0f0f0",
|
||||
"#203020",
|
||||
"#a0c0e0",
|
||||
"#806040"
|
||||
],
|
||||
"count": 6
|
||||
}
|
||||
```
|
||||
|
||||
## Response Fields {#response-fields}
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| filename | string | اسم الملف المُنقّى |
|
||||
| colors | array | مصفوفة سلاسل الألوان بالصيغة المطلوبة، مرتّبة حسب الهيمنة (الأكثر تكرارًا أولًا) |
|
||||
| hex | array | مصفوفة سلاسل ألوان hex (دائمًا hex بغض النظر عن إعداد `format`) |
|
||||
| count | number | عدد الألوان المستخرَجة |
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يُعيد حتى `count` لونًا سائدًا (الافتراضي 8، المدى 2-16)، مرتّبة حسب التردد (الأكثر شيوعًا أولًا).
|
||||
- يُعاد تحجيم الصورة داخليًا إلى 100x100 بكسل للتحليل، لذا تمثّل اللوحة توزيع الألوان العام بدلًا من التفاصيل الصغيرة.
|
||||
- تُستخرَج الألوان باستخدام تكميم median-cut، الذي يقسّم مجموعات البكسل بشكل متكرر على طول القناة ذات المدى الأوسع.
|
||||
- تُزال قناة الشفافية قبل التحليل، لذا لا تُؤخَذ المناطق الشفافة في الاعتبار.
|
||||
- هذه نقطة نهاية للقراءة فقط. لا تنتج ملف إخراج قابل للتنزيل ولا `jobId`.
|
||||
- تُفَكّ شفرة مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل التحليل.
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
description: "تلوين الصور بالأبيض والأسود أو بتدرّج الرمادي تلقائيًا باستخدام نموذج الذكاء الاصطناعي DDColor."
|
||||
i18n_source_hash: 688aa3abbdae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8f952ccbb441
|
||||
---
|
||||
|
||||
# AI Colorization {#ai-colorization}
|
||||
|
||||
حوّل الصور بالأبيض والأسود أو بتدرّج الرمادي إلى ألوان كاملة باستخدام الذكاء الاصطناعي (نموذج DDColor مع OpenCV DNN كخيار احتياطي).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/colorize`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُعيد 202، استعلِم من `/api/v1/jobs/{jobId}/progress` عن الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `object-eraser-colorize` (1-2 غيغابايت)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | ملف الصورة (multipart) |
|
||||
| intensity | number | No | `1.0` | شدة اللون (0-1). القيم الأقل تنتج تلوينًا أكثر خفوتًا |
|
||||
| model | string | No | `"auto"` | النموذج المستخدم: `auto`، `ddcolor`، `opencv` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/colorize \
|
||||
-F "file=@old-bw-photo.jpg" \
|
||||
-F 'settings={"intensity":0.9,"model":"auto"}'
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Colorizing...","percent":55}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/old-bw-photo_colorized.jpg",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 180000,
|
||||
"processedSize": 210000,
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"method": "ddcolor"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `object-eraser-colorize` (1-2 غيغابايت).
|
||||
- ينتج DDColor نتائج أعلى جودة لكنه أبطأ؛ وOpenCV DNN أسرع بجودة أقل قليلًا. يستخدم `auto` نموذج DDColor عند توفره مع OpenCV كخيار احتياطي.
|
||||
- يمزج المُعامِل `intensity` بين النسخة الأصلية بتدرّج الرمادي والنتيجة الملوّنة بالذكاء الاصطناعي. استخدم 1.0 للون الكامل، والقيم الأقل لمظهر عتيق جزئي التشبّع.
|
||||
- صيغة الإخراج تطابق صيغة الإدخال تلقائيًا.
|
||||
- لصيغ الإخراج غير القابلة للمعاينة في المتصفح، تُولَّد معاينة WebP إلى جانب الإخراج الرئيسي.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فكّ الشفرة التلقائي.
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
description: "مقارنة صورتين جنبًا إلى جنب مع تصوّر للفروق على مستوى البكسل ودرجة تشابه."
|
||||
i18n_source_hash: cc0a02bd75c6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: dfce18f25f71
|
||||
---
|
||||
|
||||
# Image Compare {#image-compare}
|
||||
|
||||
ارفع صورتين لحساب خريطة فروق على مستوى البكسل ونسبة تشابه رقمية. الإخراج صورة فروق تُبرِز المناطق المتغيرة باللون الأحمر.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compare`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملفَّي صورة **اثنين**. لا حاجة لحقل إعدادات.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
هذه الأداة ليس لها مُعامِلات قابلة للتهيئة. ارفع ملفَّي صورة اثنين بالضبط.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| file (first) | file | Yes | الصورة الأولى |
|
||||
| file (second) | file | Yes | الصورة الثانية |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compare \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@original.jpg" \
|
||||
-F "file=@modified.jpg"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"similarity": 94.52,
|
||||
"dimensions": { "width": 1920, "height": 1080 },
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/diff.png",
|
||||
"originalSize": 4900000,
|
||||
"processedSize": 280000
|
||||
}
|
||||
```
|
||||
|
||||
## Response Fields {#response-fields}
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| jobId | string | معرّف المهمة لتنزيل صورة الفروق |
|
||||
| similarity | number | نسبة التشابه بين الصورتين (0 إلى 100) |
|
||||
| dimensions | object | العرض والارتفاع المستخدمان في المقارنة |
|
||||
| downloadUrl | string | رابط تنزيل صورة الفروق المُولَّدة |
|
||||
| originalSize | number | الحجم المجمّع لكلا الصورتين المُدخَلتين بالبايت |
|
||||
| processedSize | number | حجم صورة الفروق المُخرَجة بالبايت |
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يُعاد تحجيم كلتا الصورتين إلى الأبعاد نفسها (القيمة القصوى لكل محور) قبل المقارنة.
|
||||
- تُبرِز صورة الفروق الاختلافات باللون الأحمر بشفافية تتناسب مع مقدار التغيّر. تُعرَض البكسلات المتطابقة أو شبه المتطابقة (الفرق < 10) كنسخ شبه شفافة من الأصل.
|
||||
- يُحسَب التشابه كمعكوس متوسط فرق البكسل عبر جميع البكسلات، مُعبَّرًا عنه كنسبة مئوية.
|
||||
- تشابه بنسبة 100% يعني أن الصورتين متطابقتان على مستوى البكسل (بدقة المقارنة).
|
||||
- إخراج الفروق دائمًا بصيغة PNG بغض النظر عن صيغ الإدخال.
|
||||
- تُتحقَّق كلتا الصورتين وتُفَكّ شفرتهما (HEIC وRAW وPSD وSVG مدعومة) قبل المقارنة.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا على كلتا الصورتين قبل المعالجة.
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
description: "طبقات الصور بموضع وشفافية وأوضاع مزج للتركيب."
|
||||
i18n_source_hash: c5d09eb13fde
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: af43c04df024
|
||||
---
|
||||
|
||||
# Image Composition {#image-composition}
|
||||
|
||||
ضع صورة متراكبة فوق صورة أساسية مع موضع وشفافية ووضع مزج قابل للتهيئة. مفيد لتركيب الشعارات أو الرسومات أو دمج عدة صور.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compose`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملفَّي صورة **اثنين** وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| x | number | No | `0` | الإزاحة الأفقية للطبقة المتراكبة من الزاوية العلوية اليسرى بالبكسل (الحد الأدنى 0) |
|
||||
| y | number | No | `0` | الإزاحة العمودية للطبقة المتراكبة من الزاوية العلوية اليسرى بالبكسل (الحد الأدنى 0) |
|
||||
| opacity | number | No | `100` | نسبة شفافية الطبقة المتراكبة (0 إلى 100) |
|
||||
| blendMode | string | No | `"over"` | وضع مزج التركيب |
|
||||
|
||||
### Blend Modes {#blend-modes}
|
||||
|
||||
| Value | Description |
|
||||
|-------|-------------|
|
||||
| `over` | تراكب عادي (افتراضي) |
|
||||
| `multiply` | تعتيم بضرب قيم البكسل |
|
||||
| `screen` | تفتيح بالعكس ثم الضرب ثم العكس مرة أخرى |
|
||||
| `overlay` | يجمع بين الضرب والشاشة استنادًا إلى سطوع الأساس |
|
||||
| `darken` | الاحتفاظ بالبكسل الأغمق من كل طبقة |
|
||||
| `lighten` | الاحتفاظ بالبكسل الأفتح من كل طبقة |
|
||||
| `hard-light` | تراكب تباين قوي |
|
||||
| `soft-light` | تراكب تباين خفيف |
|
||||
| `difference` | الفرق المطلق بين الطبقتين |
|
||||
| `exclusion` | مشابه للفرق لكن بتباين أقل |
|
||||
|
||||
### File Fields {#file-fields}
|
||||
|
||||
| Field Name | Required | Description |
|
||||
|------------|----------|-------------|
|
||||
| file | Yes | الصورة الأساسية/الخلفية |
|
||||
| overlay | Yes | الصورة المتراكبة/الأمامية |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compose \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@background.jpg" \
|
||||
-F "overlay=@graphic.png" \
|
||||
-F 'settings={"x": 100, "y": 50, "opacity": 80, "blendMode": "over"}'
|
||||
```
|
||||
|
||||
باستخدام وضع مزج الضرب:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compose \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "overlay=@texture.jpg" \
|
||||
-F 'settings={"x": 0, "y": 0, "opacity": 50, "blendMode": "multiply"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/background.jpg",
|
||||
"originalSize": 3200000,
|
||||
"processedSize": 3450000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- تُتحقَّق كلتا الصورتين وتُفَكّ شفرتهما (HEIC وRAW وPSD وSVG مدعومة) قبل التركيب.
|
||||
- تُوضَع الطبقة المتراكبة عند إحداثيات البكسل المحددة بالضبط بواسطة `x` و`y`. ولا يُعاد تحجيمها لتلائم.
|
||||
- إذا كانت الشفافية أقل من 100، يُطبَّق قناع ألفا على الطبقة المتراكبة قبل المزج.
|
||||
- يمكن أن تمتد الطبقة المتراكبة إلى ما وراء حدود الصورة الأساسية (وستُقتَص).
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا على كلتا الصورتين قبل المعالجة.
|
||||
- تطابق أبعاد الإخراج أبعاد الصورة الأساسية.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "تقليل حجم ملف الصورة حسب مستوى الجودة أو إلى حجم ملف مستهدف."
|
||||
i18n_source_hash: af4685da7e64
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: afd5e716e0ea
|
||||
---
|
||||
|
||||
# Compress {#compress}
|
||||
|
||||
قلّل حجم ملف الصورة بتحديد مستوى جودة أو حجم ملف مستهدف بالكيلوبايت. تستخدم الأداة بحثًا ثنائيًا تكراريًا للوصول إلى أحجام الأهداف بدقة.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compress`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | No | `"quality"` | وضع الضغط: `quality` أو `targetSize` |
|
||||
| quality | number | No | `80` | مستوى الجودة (1-100). يُستخدَم عندما يكون الوضع `quality`. |
|
||||
| targetSizeKb | number | No | - | حجم الملف المستهدف بالكيلوبايت. يُستخدَم عندما يكون الوضع `targetSize`. |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
الضغط إلى جودة 60:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compress \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode": "quality", "quality": 60}'
|
||||
```
|
||||
|
||||
الضغط إلى حجم مستهدف قدره 200 كيلوبايت:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compress \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode": "targetSize", "targetSizeKb": 200}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 204800
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- في وضع `quality`، تنتج القيم الأقل ملفات أصغر بمزيد من عيوب الضغط. القيمة 80 افتراضية جيدة للاستخدام على الويب.
|
||||
- في وضع `targetSize`، ينفّذ المحرّك ضغطًا تكراريًا للاقتراب من الهدف قدر الإمكان دون تجاوزه.
|
||||
- صيغة الإخراج تطابق صيغة الإدخال. يُطبَّق الضغط على الترميز الأصلي للصيغة (مثل جودة JPEG لملفات JPEG، وجودة WebP لملفات WebP).
|
||||
- إذا كانت الجودة الافتراضية (80) مقبولة، يمكنك حذف المُعامِل `quality` بالكامل.
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
description: "إعادة تحجيم بنحت الشقوق تضيف أو تزيل بكسلات على طول المسارات الأقل أهمية للحفاظ على المحتوى الأساسي والوجوه."
|
||||
i18n_source_hash: f383b28ab62a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 98ba7932c1cf
|
||||
---
|
||||
|
||||
# Content-Aware Resize {#content-aware-resize}
|
||||
|
||||
إعادة تحجيم بنحت الشقوق تزيل أو تضيف البكسلات بذكاء على طول المسارات الأقل أهمية بصريًا، مع الحفاظ على المحتوى المهم وحماية الوجوه اختياريًا.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/content-aware-resize`
|
||||
|
||||
**المعالجة:** متزامنة (تُعيد النتيجة مباشرة)
|
||||
|
||||
**حزمة النموذج:** لا حاجة إليها للتشغيل الأساسي. تستخدم حماية الوجوه حزمة `face-detection` (200-300 ميغابايت) إذا كانت مفعّلة.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | ملف الصورة (multipart) |
|
||||
| width | number | No | - | العرض المستهدف بالبكسل |
|
||||
| height | number | No | - | الارتفاع المستهدف بالبكسل |
|
||||
| protectFaces | boolean | No | `false` | اكتشاف الوجوه وحمايتها من إزالة الشقوق |
|
||||
| blurRadius | number | No | `4` | نصف قطر التمويه للمعالجة المسبقة لحساب الطاقة (0-20) |
|
||||
| sobelThreshold | number | No | `2` | عتبة اكتشاف حواف Sobel (1-20). القيم الأعلى تجعل الخوارزمية أكثر حدّة |
|
||||
| square | boolean | No | `false` | إعادة التحجيم إلى مربع (يستخدم البُعد الأصغر) |
|
||||
|
||||
يجب تحديد واحد على الأقل من `width` أو `height` أو `square`.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/content-aware-resize \
|
||||
-F "file=@landscape.jpg" \
|
||||
-F 'settings={"width":800,"protectFaces":true}'
|
||||
```
|
||||
|
||||
## Response (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/landscape_seam.png",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 380000,
|
||||
"width": 800,
|
||||
"height": 600
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يُعيد هذا المسار المخصص حاليًا استجابة 200 متزامنة.
|
||||
- يستخدم مكتبة نحت الشقوق `caire` لإعادة التحجيم المدركة للمحتوى.
|
||||
- يقلّل الأبعاد فقط (يزيل الشقوق). لا يمكنه توسيع الصورة إلى ما وراء حجمها الأصلي.
|
||||
- يستخدم خيار `protectFaces` اكتشاف الوجوه بالذكاء الاصطناعي لتحديد مناطق الوجه كذات طاقة عالية، مما يمنع مرور الشقوق عبر الوجوه.
|
||||
- يتحكّم `blurRadius` في التنعيم قبل حساب خريطة الطاقة. القيم الأعلى تجعل خريطة الطاقة أكثر تجانسًا، مما قد يساعد مع الصور المشوّشة.
|
||||
- يؤثّر `sobelThreshold` في مدى حدّة اكتشاف الحواف. القيم الأقل تحافظ على مزيد من الحواف الخفيفة.
|
||||
- الإخراج دائمًا بصيغة PNG.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فكّ الشفرة التلقائي.
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
description: "تحويل الصور بين الصيغ بما في ذلك الصيغ الحديثة مثل AVIF وJXL وHEIC."
|
||||
i18n_source_hash: 562f8270e8c3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c4d219043dd6
|
||||
---
|
||||
|
||||
# Convert {#convert}
|
||||
|
||||
حوّل الصور بين الصيغ. يدعم صيغ الويب الشائعة إضافة إلى صيغ متخصصة مثل HEIC وJXL وBMP وICO وJP2 وQOI وPSD.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/convert`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | Yes | - | الصيغة المستهدفة: `jpg`، `png`، `webp`، `avif`، `tiff`، `gif`، `heic`، `heif`، `jxl`، `bmp`، `ico`، `jp2`، `qoi`، `psd`، `ppm`، `eps`، `tga` |
|
||||
| quality | number | No | - | جودة الإخراج (1-100). تنطبق على الصيغ ذات الفقد مثل jpg وwebp وavif وheic. |
|
||||
|
||||
## Supported Output Formats {#supported-output-formats}
|
||||
|
||||
| Format | Type | Notes |
|
||||
|--------|------|-------|
|
||||
| jpg | ذات فقد | JPEG، أفضل توافق |
|
||||
| png | بلا فقد | يدعم الشفافية |
|
||||
| webp | كلاهما | صيغة ويب حديثة، ضغط جيد |
|
||||
| avif | ذات فقد | صيغة الجيل القادم، ضغط ممتاز |
|
||||
| tiff | كلاهما | سير عمل الطباعة/النشر |
|
||||
| gif | بلا فقد | محدودة بـ 256 لونًا |
|
||||
| heic / heif | ذات فقد | صيغة منظومة Apple |
|
||||
| jxl | كلاهما | JPEG XL، صيغة الجيل القادم |
|
||||
| bmp | بلا فقد | صورة نقطية غير مضغوطة |
|
||||
| ico | بلا فقد | صيغة أيقونة Windows |
|
||||
| jp2 | ذات فقد | JPEG 2000 |
|
||||
| qoi | بلا فقد | صيغة Quite OK Image |
|
||||
| psd | متعددة الطبقات | Adobe Photoshop (يتطلب ImageMagick) |
|
||||
| ppm | بلا فقد | Portable Pixmap (PPM/PGM/PBM) |
|
||||
| eps | متجهية | Encapsulated PostScript |
|
||||
| tga | بلا فقد | صيغة صورة Targa |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
التحويل إلى WebP:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/convert \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "webp", "quality": 85}'
|
||||
```
|
||||
|
||||
التحويل إلى PNG (بلا فقد):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/convert \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "png"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 680000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يُحدَّث امتداد اسم ملف الإخراج تلقائيًا ليطابق الصيغة المستهدفة.
|
||||
- تُنقَّط مدخلات SVG عند 300 DPI قبل التحويل.
|
||||
- يتطلب تحويل PSD تثبيت ImageMagick على الخادم.
|
||||
- تستخدم BMP وEPS وICO وJP2 وJXL وPPM وQOI وTGA مُرمِّزات CLI متخصصة وتتجاوز معالجة Sharp.
|
||||
- يستخدم ترميز HEIC/HEIF مكتبة مُرمِّز HEIC في النظام.
|
||||
- صيغ الإدخال واسعة: JPEG وPNG وWebP وAVIF وTIFF وGIF وHEIC وRAW (CR2 وNEF وARW وغيرها) وPSD وSVG وBMP والمزيد.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "اقتصاص الصور بتحديد منطقة بموضع وأبعاد."
|
||||
i18n_source_hash: aab38ccd7c53
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 507104de8aef
|
||||
---
|
||||
|
||||
# Crop {#crop}
|
||||
|
||||
اقتص الصور بتعريف منطقة مستطيلة باستخدام الموضع والحجم. يدعم وحدات البكسل والنسبة المئوية.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/crop`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| left | number | Yes | - | إزاحة X لمنطقة الاقتصاص (من الحافة اليسرى) |
|
||||
| top | number | Yes | - | إزاحة Y لمنطقة الاقتصاص (من الحافة العلوية) |
|
||||
| width | number | Yes | - | عرض منطقة الاقتصاص |
|
||||
| height | number | Yes | - | ارتفاع منطقة الاقتصاص |
|
||||
| unit | string | No | `"px"` | وحدة القيم: `px` أو `percent` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"left": 100, "top": 50, "width": 800, "height": 600}'
|
||||
```
|
||||
|
||||
الاقتصاص باستخدام قيم النسبة المئوية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"left": 10, "top": 10, "width": 80, "height": 80, "unit": "percent"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 1200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يجب أن تلائم منطقة الاقتصاص حدود الصورة. إذا امتدت المنطقة إلى ما وراء الصورة، سيفشل الطلب.
|
||||
- عند استخدام وحدة `percent`، تمثّل القيم نسبًا مئوية من أبعاد الصورة (مثل `left: 10` يعني 10% من الحافة اليسرى).
|
||||
- صيغة الإخراج تطابق صيغة الإدخال.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا قبل الاقتصاص، لذا تتوافق الإحداثيات مع الاتجاه الصحيح بصريًا.
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: "تطبيق تأثير ثنائي اللون بلونَي ظل وإبراز مخصّصين."
|
||||
i18n_source_hash: ab99c4f0152c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: cd4e9baf6e86
|
||||
---
|
||||
|
||||
# Duotone {#duotone}
|
||||
|
||||
طبّق تأثيرًا ثنائي اللون على صورة. تُحوَّل الصورة إلى تدرّج رمادي، ثم تُربَط بتدرّج بين لون الظل (الدرجات الداكنة) ولون الإبراز (الدرجات الفاتحة).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/duotone`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| shadow | string | No | `"#1e3a8a"` | لون الظل hex (يُطبَّق على الدرجات الداكنة) |
|
||||
| highlight | string | No | `"#fbbf24"` | لون الإبراز hex (يُطبَّق على الدرجات الفاتحة) |
|
||||
| intensity | integer | No | `100` | شدة التأثير (0-100)؛ 0 يعيد الأصل، و100 يطبّق التأثير ثنائي اللون بالكامل |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/duotone \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"shadow": "#0f172a", "highlight": "#f97316", "intensity": 80}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 1870000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- صيغة الإخراج تطابق صيغة الإدخال. تُفَكّ شفرة مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
- قيمة `intensity` أقل من 100 تمزج النتيجة ثنائية اللون مع الصورة الأصلية، مما يتيح تأثيرات أخفت.
|
||||
- تشمل تركيبات duotone الشائعة الكحلي/الذهبي، والفيروزي/المرجاني، والبنفسجي/الوردي.
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
description: "تحرير حقول بيانات EXIF وIPTC وGPS وXMP الوصفية في الصور دون إعادة ترميز البكسلات."
|
||||
i18n_source_hash: a37746db11c3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 476b3bfa39e7
|
||||
---
|
||||
|
||||
# Edit Metadata {#edit-metadata}
|
||||
|
||||
حرّر حقول البيانات الوصفية للصورة بما في ذلك EXIF وIPTC وإحداثيات GPS والتواريخ والكلمات المفتاحية. يستخدم ExifTool خلف الكواليس، لذا تُكتَب البيانات الوصفية في مكانها دون إعادة ترميز البكسلات، مع الحفاظ على جودة الصورة الكاملة.
|
||||
|
||||
## API Endpoints {#api-endpoints}
|
||||
|
||||
### Edit Metadata {#edit-metadata-1}
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata`
|
||||
|
||||
يكتب حقول البيانات الوصفية إلى الصورة ويعيد الملف المعدّل.
|
||||
|
||||
### Inspect Metadata {#inspect-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata/inspect`
|
||||
|
||||
يعيد البيانات الوصفية الكاملة من الصورة عبر ExifTool بصيغة JSON. لا يعدّل الصورة.
|
||||
|
||||
## Parameters (Edit) {#parameters-edit}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| title | string | No | - | عنوان الصورة (XMP/EXIF) |
|
||||
| author | string | No | - | اسم المؤلف |
|
||||
| artist | string | No | - | اسم الفنان (وسم EXIF Artist) |
|
||||
| copyright | string | No | - | إشعار حقوق النشر |
|
||||
| imageDescription | string | No | - | وصف الصورة (EXIF) |
|
||||
| software | string | No | - | وسم البرنامج |
|
||||
| dateTime | string | No | - | قيمة EXIF DateTime |
|
||||
| dateTimeOriginal | string | No | - | قيمة EXIF DateTimeOriginal |
|
||||
| setAllDates | string | No | - | تعيين جميع حقول التاريخ دفعة واحدة |
|
||||
| dateShift | string | No | - | إزاحة جميع التواريخ بمقدار محدد (الصيغة: `+HH:MM` أو `-HH:MM`) |
|
||||
| clearGps | boolean | No | `false` | إزالة جميع بيانات GPS |
|
||||
| gpsLatitude | number | No | - | تعيين خط عرض GPS (-90 إلى 90) |
|
||||
| gpsLongitude | number | No | - | تعيين خط طول GPS (-180 إلى 180) |
|
||||
| gpsAltitude | number | No | - | تعيين ارتفاع GPS بالأمتار |
|
||||
| keywords | string[] | No | - | الكلمات المفتاحية/الوسوم المراد إضافتها أو تعيينها |
|
||||
| keywordsMode | string | No | `"add"` | كيفية التعامل مع الكلمات المفتاحية: `add` (إلحاق) أو `set` (استبدال) |
|
||||
| fieldsToRemove | string[] | No | `[]` | قائمة بأسماء حقول بيانات وصفية محددة لإزالتها |
|
||||
| iptcTitle | string | No | - | IPTC Object Name |
|
||||
| iptcHeadline | string | No | - | IPTC Headline |
|
||||
| iptcCity | string | No | - | IPTC City |
|
||||
| iptcState | string | No | - | IPTC Province/State |
|
||||
| iptcCountry | string | No | - | IPTC Country |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
تعيين المؤلف وحقوق النشر:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"author": "Jane Smith", "copyright": "2024 Jane Smith"}'
|
||||
```
|
||||
|
||||
تعيين إحداثيات GPS:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"gpsLatitude": 48.8566, "gpsLongitude": 2.3522, "gpsAltitude": 35}'
|
||||
```
|
||||
|
||||
إزالة GPS وإضافة كلمات مفتاحية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"clearGps": true, "keywords": ["landscape", "sunset"], "keywordsMode": "add"}'
|
||||
```
|
||||
|
||||
فحص البيانات الوصفية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata/inspect \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## Example Response (Edit) {#example-response-edit}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2452000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- تتطلب هذه الأداة تثبيت ExifTool على الخادم. وهو مضمّن في صورة Docker.
|
||||
- تُكتَب البيانات الوصفية في مكانها، لذا لا يحدث أي إعادة ترميز للبكسلات. تغيّر حجم الملف ضئيل (فقط بايتات البيانات الوصفية).
|
||||
- يُزيح المُعامِل `dateShift` جميع حقول التاريخ بالمقدار المحدد، وهو مفيد لتصحيح أخطاء المنطقة الزمنية (مثل `+02:00` أو `-05:30`).
|
||||
- إذا لم تُطلَب أي تغييرات (جميع المُعامِلات محذوفة أو فارغة)، يُعاد الملف الأصلي دون تغيير.
|
||||
- الصيغ المدعومة: JPEG وPNG وWebP وAVIF وTIFF وGIF وHEIC/HEIF.
|
||||
- للصيغ غير القابلة للمعاينة في المتصفح (HEIF وTIFF)، تتضمن الاستجابة حقل `previewUrl` مع معاينة WebP.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "استعادة وتحسين حدّة الوجوه المشوّشة أو منخفضة الجودة في الصور باستخدام نموذجَي الذكاء الاصطناعي GFPGAN وCodeFormer."
|
||||
i18n_source_hash: 7f9f6af8ebda
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9fd7af07c413
|
||||
---
|
||||
|
||||
# Face Enhancement {#face-enhancement}
|
||||
|
||||
استعِد وحسّن الوجوه في الصور باستخدام نماذج الذكاء الاصطناعي (GFPGAN/CodeFormer).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/enhance-faces`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُعيد 202، استعلِم من `/api/v1/jobs/{jobId}/progress` عن الحالة عبر SSE)
|
||||
|
||||
**حزم النماذج:** `upscale-enhance` (5-6 غيغابايت) و`face-detection` (200-300 ميغابايت)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | ملف الصورة (multipart) |
|
||||
| model | string | No | `"auto"` | النموذج المستخدم: `auto`، `gfpgan`، `codeformer` |
|
||||
| strength | number | No | `0.8` | قوة التحسين (0-1). القيم الأعلى تنتج تحسينًا أقوى |
|
||||
| onlyCenterFace | boolean | No | `false` | تحسين الوجه الأكثر مركزية/بروزًا فقط |
|
||||
| sensitivity | number | No | `0.5` | حساسية اكتشاف الوجه (0-1) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/enhance-faces \
|
||||
-F "file=@portrait.jpg" \
|
||||
-F 'settings={"model":"codeformer","strength":0.7,"onlyCenterFace":false}'
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/portrait_enhanced.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 350000,
|
||||
"processedSize": 600000,
|
||||
"facesDetected": 2,
|
||||
"faces": [
|
||||
{"x": 120, "y": 80, "w": 100, "h": 100},
|
||||
{"x": 350, "y": 90, "w": 95, "h": 95}
|
||||
],
|
||||
"model": "codeformer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يتطلب كلًّا من حزمة النموذج `upscale-enhance` (5-6 غيغابايت) وحزمة النموذج `face-detection` (200-300 ميغابايت).
|
||||
- ينتج GFPGAN تحسينًا أكثر حدّة؛ ويحافظ CodeFormer على الهوية بشكل أفضل. يختار `auto` أفضل نموذج للمدخل.
|
||||
- الإخراج دائمًا بصيغة PNG لأقصى جودة.
|
||||
- تُولَّد معاينة WebP إلى جانب الإخراج بدقّته الكاملة لعرض أسرع في الواجهة الأمامية.
|
||||
- يمزج المُعامِل `strength` الوجه المُحسَّن مع الأصل. استخدم القيم الأقل (0.3-0.5) للتحسينات الخفيفة، والقيم الأعلى (0.7-1.0) للاستعادة الأقوى.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فكّ الشفرة التلقائي.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "إزالة الكائنات غير المرغوبة من الصور بالطلاء التصحيحي بالذكاء الاصطناعي (LaMa)، بتوجيه من قناع للمنطقة المراد محوها."
|
||||
i18n_source_hash: 8e2e42a5e4f9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: be557633a7a0
|
||||
---
|
||||
|
||||
# Object Eraser {#object-eraser}
|
||||
|
||||
أزِل الكائنات غير المرغوبة من الصور بالطلاء التصحيحي بالذكاء الاصطناعي (نموذج LaMa). يقبل صورة وقناعًا يشير إلى المنطقة المراد محوها.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/erase-object`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُعيد 202، استعلِم من `/api/v1/jobs/{jobId}/progress` عن الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `object-eraser-colorize` (1-2 غيغابايت)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | ملف الصورة المصدر (multipart) |
|
||||
| mask | file | Yes | - | صورة القناع (الأبيض = المنطقة المراد محوها، الأسود = الاحتفاظ). يجب رفعها باسم الحقل `mask` |
|
||||
| format | string | No | `"auto"` | صيغة الإخراج: `auto`، `png`، `jpg`، `jpeg`، `webp`، `tiff`، `gif`، `avif`، `heic`، `heif`، `jxl` |
|
||||
| quality | integer | No | `95` | جودة الإخراج (1-100) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/erase-object \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "mask=@mask.png" \
|
||||
-F "format=png" \
|
||||
-F "quality=95"
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Inpainting...","percent":70}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_erased.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 245000,
|
||||
"processedSize": 230000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `object-eraser-colorize` (1-2 غيغابايت).
|
||||
- يجب أن يكون القناع بالأبعاد نفسها للصورة المصدر. البكسلات البيضاء تشير إلى المناطق المراد محوها؛ يملؤها الذكاء الاصطناعي بمحتوى معقول.
|
||||
- يستخدم LaMa (Large Mask Inpainting) لإزالة الكائنات بجودة عالية.
|
||||
- لصيغ الإخراج غير القابلة للمعاينة في المتصفح، تُولَّد معاينة WebP إلى جانب الإخراج الرئيسي.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فكّ الشفرة التلقائي.
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
description: "إنشاء جميع أحجام أيقونات favicon وأيقونات التطبيقات القياسية من صورة مصدر."
|
||||
i18n_source_hash: 3a6451a94b7a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2869b8daff33
|
||||
---
|
||||
|
||||
# مولّد Favicon {#favicon-generator}
|
||||
|
||||
أنشئ مجموعة كاملة من ملفات favicon وأيقونات التطبيقات من صورة مصدر. يُنتج جميع الأحجام القياسية التي تحتاجها المتصفحات وأجهزة Apple وAndroid، إلى جانب web manifest ومقتطف HTML.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/favicon`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة واحد أو أكثر وحقل JSON اختياري `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| background | string | لا | - | لون خلفية hex (مثل `"#ffffff"`). عند تعيينه، يتم تسطيح الأيقونة فوق هذا اللون. |
|
||||
| padding | integer | لا | `0` | نسبة الحشو حول محتوى الأيقونة (0 إلى 40) |
|
||||
| radius | integer | لا | `0` | نسبة نصف قطر الزوايا للأيقونات المستديرة (0 إلى 50) |
|
||||
| sizes | integer[] | لا | - | تقييد المخرجات على أحجام بكسل محددة (مثل `[16, 32, 180]`). احذفه لإنشاء جميع الأحجام القياسية. |
|
||||
| themeColor | string | لا | `"#ffffff"` | لون السمة hex الخاص بـ web manifest |
|
||||
|
||||
## الملفات المُنشأة {#generated-files}
|
||||
|
||||
لكل صورة إدخال، يتم إنتاج الملفات التالية:
|
||||
|
||||
| الملف | الحجم | الغرض |
|
||||
|------|------|---------|
|
||||
| `favicon-16x16.png` | 16x16 | أيقونة تبويب المتصفح |
|
||||
| `favicon-32x32.png` | 32x32 | أيقونة تبويب المتصفح (HiDPI) |
|
||||
| `favicon-48x48.png` | 48x48 | اختصار سطح المكتب |
|
||||
| `apple-touch-icon.png` | 180x180 | شاشة iOS الرئيسية |
|
||||
| `android-chrome-192x192.png` | 192x192 | شاشة Android الرئيسية |
|
||||
| `android-chrome-512x512.png` | 512x512 | شاشة بدء تشغيل Android |
|
||||
| `favicon.ico` | 32x32 | صيغة ICO القديمة |
|
||||
| `manifest.json` | - | web app manifest مع مراجع الأيقونات |
|
||||
| `favicon-snippet.html` | - | وسوم رابط HTML جاهزة للاستخدام |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
صورة مصدر واحدة بزوايا مستديرة وحشو:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/favicon \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@logo.png" \
|
||||
-F 'settings={"padding": 10, "radius": 20, "themeColor": "#0a0a0a"}'
|
||||
```
|
||||
|
||||
صور مصدر متعددة (كل واحدة تحصل على مجموعتها الخاصة في مجلد فرعي):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/favicon \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@logo-light.png" \
|
||||
-F "file=@logo-dark.png"
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
الاستجابة عبارة عن ملف ZIP يُبث مباشرة. ترويسات الاستجابة هي:
|
||||
|
||||
```
|
||||
Content-Type: application/zip
|
||||
Content-Disposition: attachment; filename="favicons-a1b2c3d4.zip"
|
||||
```
|
||||
|
||||
## مقتطف HTML المُضمّن {#html-snippet-included}
|
||||
|
||||
يتضمن ملف ZIP ملف `favicon-snippet.html` يمكنك لصقه في `<head>` الخاص بـ HTML:
|
||||
|
||||
```html
|
||||
<!-- Favicons -->
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تتم إعادة تحجيم صور المصدر باستخدام وضع الملاءمة `cover`، ما يعني أنه يتم اقتصاصها لملء كل حجم مربع. للحصول على أفضل النتائج، استخدم صورة مصدر مربعة.
|
||||
- عند رفع ملفات متعددة، يحصل كل ملف على مجلده الفرعي الخاص في ZIP (باسم ملف المصدر).
|
||||
- عند رفع ملف واحد، تكون جميع المخرجات في جذر ZIP دون مجلد فرعي.
|
||||
- يتم تخطي الملفات التي تفشل في التحقق أو فك الترميز، ويُضمّن ملف `skipped-files.txt` في ZIP يشرح المشكلات.
|
||||
- صيغ الإدخال المدعومة: JPEG وPNG وWebP وAVIF وTIFF وGIF وHEIC وSVG وRAW وPSD والمزيد.
|
||||
- يتم تطبيق اتجاه EXIF تلقائياً قبل إعادة التحجيم.
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
description: "اكتشاف الصور المكررة وشبه المكررة باستخدام التجزئة الإدراكية."
|
||||
i18n_source_hash: 4e1f4413f90f
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5c70395f39ee
|
||||
---
|
||||
|
||||
# البحث عن التكرارات {#find-duplicates}
|
||||
|
||||
ارفع صوراً متعددة لاكتشاف التكرارات وشبه التكرارات باستخدام التجزئة الإدراكية (dHash). يجمّع الصور المتشابهة معاً، ويحدد أفضل نسخة جودة في كل مجموعة، ويحسب التوفير المحتمل في المساحة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/find-duplicates`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملفات صور متعددة وحقل JSON اختياري `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| threshold | number | لا | `8` | أقصى مسافة Hamming لاعتبار الصور مكررة (0 إلى 20). أقل = مطابقة أكثر صرامة |
|
||||
|
||||
### حقول الملفات {#file-fields}
|
||||
|
||||
ارفع صورتين على الأقل في طلب multipart (جميعها باستخدام اسم الحقل `file` أو أي اسم حقل لأجزاء الملفات).
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F "file=@photo4.jpg" \
|
||||
-F 'settings={"threshold": 8}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"totalImages": 4,
|
||||
"duplicateGroups": [
|
||||
{
|
||||
"groupId": 1,
|
||||
"files": [
|
||||
{
|
||||
"filename": "photo1.jpg",
|
||||
"similarity": 100,
|
||||
"width": 4032,
|
||||
"height": 3024,
|
||||
"fileSize": 2450000,
|
||||
"format": "jpeg",
|
||||
"isBest": true,
|
||||
"thumbnail": "data:image/jpeg;base64,/9j/..."
|
||||
},
|
||||
{
|
||||
"filename": "photo2.jpg",
|
||||
"similarity": 96.88,
|
||||
"width": 1920,
|
||||
"height": 1440,
|
||||
"fileSize": 850000,
|
||||
"format": "jpeg",
|
||||
"isBest": false,
|
||||
"thumbnail": "data:image/jpeg;base64,/9j/..."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"uniqueImages": 2,
|
||||
"spaceSaveable": 850000,
|
||||
"skippedFiles": []
|
||||
}
|
||||
```
|
||||
|
||||
## حقول الاستجابة {#response-fields}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| totalImages | number | عدد الصور التي تم تحليلها بنجاح |
|
||||
| duplicateGroups | array | مجموعات الصور المكررة |
|
||||
| uniqueImages | number | عدد الصور التي ليست جزءاً من أي مجموعة تكرار |
|
||||
| spaceSaveable | number | إجمالي البايتات التي يمكن توفيرها بإزالة التكرارات غير الأفضل |
|
||||
| skippedFiles | array | الملفات التي تعذّرت معالجتها (مع اسم الملف والسبب) |
|
||||
|
||||
### كائن مجموعة التكرار {#duplicate-group-object}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| groupId | number | معرّف المجموعة |
|
||||
| files | array | الصور في مجموعة التكرار هذه |
|
||||
|
||||
### كائن الملف (ضمن مجموعة) {#file-object-within-a-group}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| filename | string | اسم الملف الأصلي |
|
||||
| similarity | number | نسبة التشابه مع الصورة المرجعية (الأولى في المجموعة) |
|
||||
| width | number | عرض الصورة بالبكسل |
|
||||
| height | number | ارتفاع الصورة بالبكسل |
|
||||
| fileSize | number | حجم الملف بالبايت |
|
||||
| format | string | صيغة الصورة |
|
||||
| isBest | boolean | ما إذا كانت هذه أعلى نسخة جودة (أكثر بكسلات، أكبر ملف) |
|
||||
| thumbnail | string أو null | صورة مصغرة Base64 JPEG (بعرض 200 بكسل) للمعاينة |
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يستخدم dHash بحجم 128 بت (64 بت للصف + 64 بت للعمود) لاكتشاف التشابه الإدراكي. هذا يلتقط التكرارات حتى عبر إعادة التحجيم وإعادة الضغط والتعديلات الطفيفة.
|
||||
- يمثّل العتبة أقصى مسافة Hamming بين التجزئات. الافتراضي 8 يلتقط شبه التكرارات مع تجنّب النتائج الإيجابية الخاطئة. استخدم 0 للتطابق البكسلي فقط، أو 15-20 للمطابقة الفضفاضة جداً.
|
||||
- الصورة "الأفضل" في كل مجموعة هي التي تحتوي على أكثر بكسلات (العرض × الارتفاع)، مع حجم الملف كعامل فاصل.
|
||||
- مطلوب صورتان على الأقل. تُبلَّغ الملفات التي تفشل في التحقق أو فك الترميز في `skippedFiles` بدلاً من التسبب في فشل الطلب بأكمله.
|
||||
- الصور المصغرة هي معاينات JPEG بعرض 200 بكسل مُرمّزة كـ data URIs.
|
||||
- جميع الصيغ الشائعة مدعومة (HEIC وRAW وPSD وSVG تُفك ترميزها تلقائياً).
|
||||
@@ -0,0 +1,147 @@
|
||||
---
|
||||
description: "إعادة تحجيم وتحسين وتغيير السرعة وعكس وتدوير واستخراج إطارات من صور GIF المتحركة في أداة واحدة."
|
||||
i18n_source_hash: 5e525e80db92
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: fe96d3fe5525
|
||||
---
|
||||
|
||||
# أدوات GIF {#gif-tools}
|
||||
|
||||
إعادة تحجيم وتحسين وتغيير السرعة وعكس واستخراج الإطارات وتدوير صور GIF المتحركة. توفّر أوضاع تشغيل متعددة في أداة واحدة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/gif-tools`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
### المعاملات المشتركة {#common-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | لا | `"resize"` | وضع التشغيل: `resize`، `optimize`، `speed`، `reverse`، `extract`، `rotate` |
|
||||
| loop | number | لا | 0 | عدد مرات التكرار لمخرجات GIF (0 = لا نهائي، 1-100 = تكرارات محدودة) |
|
||||
|
||||
### معاملات وضع إعادة التحجيم {#resize-mode-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | لا | - | العرض المستهدف بالبكسل (1 إلى 16384) |
|
||||
| height | integer | لا | - | الارتفاع المستهدف بالبكسل (1 إلى 16384) |
|
||||
| percentage | number | لا | - | التحجيم بالنسبة المئوية (1 إلى 500). يتجاوز width/height إذا تم تعيينه. |
|
||||
|
||||
### معاملات وضع التحسين {#optimize-mode-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| colors | number | لا | 256 | الحد الأقصى لعدد الألوان في اللوحة (2 إلى 256) |
|
||||
| dither | number | لا | 1.0 | قوة التوزيع اللوني (0 إلى 1، حيث 0 يعطّل التوزيع اللوني) |
|
||||
| effort | number | لا | 7 | مستوى جهد التحسين (1 إلى 10، أعلى = أبطأ لكن أصغر) |
|
||||
|
||||
### معاملات وضع السرعة {#speed-mode-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| speedFactor | number | لا | 1.0 | مضاعف السرعة (0.1 إلى 10). القيم > 1 تسرّع، < 1 تبطّئ. |
|
||||
|
||||
### معاملات وضع الاستخراج {#extract-mode-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| extractMode | string | لا | `"single"` | وضع الاستخراج: `single`، `range`، `all` |
|
||||
| frameNumber | number | لا | 0 | فهرس الإطار للاستخراج في وضع `single` (يبدأ من 0) |
|
||||
| frameStart | number | لا | 0 | فهرس إطار البداية لوضع `range` (يبدأ من 0) |
|
||||
| frameEnd | number | لا | - | فهرس إطار النهاية لوضع `range` (يبدأ من 0، شامل) |
|
||||
| extractFormat | string | لا | `"png"` | صيغة الإطارات المستخرجة: `png`، `webp` |
|
||||
|
||||
### معاملات وضع التدوير {#rotate-mode-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| angle | number | لا | - | زاوية التدوير: `90`، `180`، أو `270` درجة |
|
||||
| flipH | boolean | لا | `false` | القلب أفقياً |
|
||||
| flipV | boolean | لا | `false` | القلب عمودياً |
|
||||
|
||||
## أمثلة على الطلبات {#example-requests}
|
||||
|
||||
### إعادة التحجيم {#resize}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"mode":"resize","percentage":50}'
|
||||
```
|
||||
|
||||
### التحسين {#optimize}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
|
||||
-F "file=@large.gif" \
|
||||
-F 'settings={"mode":"optimize","colors":128,"effort":9}'
|
||||
```
|
||||
|
||||
### التسريع {#speed-up}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"mode":"speed","speedFactor":2.0}'
|
||||
```
|
||||
|
||||
### استخراج إطار واحد {#extract-single-frame}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"mode":"extract","extractMode":"single","frameNumber":5,"extractFormat":"png"}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.gif",
|
||||
"originalSize": 2345678,
|
||||
"processedSize": 1234567
|
||||
}
|
||||
```
|
||||
|
||||
## المسار الفرعي للمعلومات {#info-sub-route}
|
||||
|
||||
`POST /api/v1/tools/image/gif-tools/info`
|
||||
|
||||
يُرجع بيانات وصفية عن GIF متحرك دون معالجته.
|
||||
|
||||
### طلب المعلومات {#info-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools/info \
|
||||
-F "file=@animation.gif"
|
||||
```
|
||||
|
||||
### استجابة المعلومات {#info-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"width": 480,
|
||||
"height": 320,
|
||||
"pages": 24,
|
||||
"delay": [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100],
|
||||
"loop": 0,
|
||||
"fileSize": 2345678,
|
||||
"duration": 2400
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يستخدم مصنع `createToolRoute` القياسي لنقطة نهاية المعالجة الرئيسية.
|
||||
- تتطلب نقطة نهاية المعلومات رفع ملف فقط (لا حاجة لإعدادات).
|
||||
- في وضع `resize`، إذا تم توفير `percentage` فإنه يأخذ الأولوية على `width`/`height`. تستخدم إعادة التحجيم `fit: inside` للحفاظ على نسبة العرض إلى الارتفاع.
|
||||
- في وضع `speed`، تُقسَّم تأخيرات الإطارات على عامل السرعة. الحد الأدنى للتأخير لكل إطار هو 20 مللي ثانية (قيد مواصفات GIF).
|
||||
- في وضع `reverse`، يتوفر أيضاً معامل `speedFactor` لضبط السرعة في آن واحد أثناء العكس.
|
||||
- في وضع `extract` مع `range` أو `all`، تكون المخرجات ملف ZIP يحتوي على إطارات فردية.
|
||||
- في وضع `rotate`، تتم معالجة كل إطار على حدة ثم إعادة تجميعه في رسم متحرك.
|
||||
- يتحكم معامل `loop` في عدد مرات تكرار مخرجات GIF. استخدم 0 للتكرار اللانهائي.
|
||||
- حقل `duration` في استجابة المعلومات هو إجمالي مدة الرسم المتحرك بالمللي ثانية.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "تحويل GIF المتحرك إلى WebP والعكس، مع الحفاظ على جميع الإطارات."
|
||||
i18n_source_hash: 20946e5001cb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2b08a1d5a43a
|
||||
---
|
||||
|
||||
# محوّل GIF/WebP {#gif-webp-converter}
|
||||
|
||||
حوّل ملفات GIF المتحركة إلى WebP والعكس، مع الحفاظ على جميع الإطارات وتوقيت الرسم المتحرك. عادةً ما تكون رسوم WebP المتحركة أصغر بنسبة 25-35٪ من نظيراتها من GIF.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/gif-webp`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف GIF أو WebP وحقل JSON `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | integer | لا | `80` | جودة المخرجات لترميز WebP (1-100) |
|
||||
| lossless | boolean | لا | `false` | استخدام ضغط WebP بدون فقدان |
|
||||
| resizePercent | integer | لا | `100` | تحجيم المخرجات بالنسبة المئوية (10-100) |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-webp \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"quality": 85, "resizePercent": 50}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.webp",
|
||||
"originalSize": 3500000,
|
||||
"processedSize": 2200000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تُقبل ملفات `.gif` و`.webp` فقط. صيغ الصور الأخرى غير مدعومة في هذه الأداة.
|
||||
- اتجاه التحويل تلقائي: إدخال GIF يُنتج مخرجات WebP، وإدخال WebP يُنتج مخرجات GIF.
|
||||
- ينطبق خيارا `quality` و`lossless` فقط عند الترميز إلى WebP. عند التحويل إلى GIF، تستخدم المخرجات لوحة ألوان GIF القياسية.
|
||||
- استخدم `resizePercent` لتقليل أبعاد (وحجم ملف) الرسوم المتحركة الكبيرة.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "إنشاء مخطط رسم بياني RGB مع إحصائيات لكل قناة من صورة."
|
||||
i18n_source_hash: 57aa610206a5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 350b5993c177
|
||||
---
|
||||
|
||||
# الرسم البياني {#histogram}
|
||||
|
||||
أنشئ مخطط رسم بياني RGB من صورة. يُرجع صورة رسم بياني PNG إلى جانب إحصائيات لكل قناة وبيانات رسم بياني خام مكوّنة من 256 خانة في JSON الاستجابة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/histogram`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| scale | string | لا | `"linear"` | مقياس المحور الصادي: `linear` أو `log` |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/histogram \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"scale": "linear"}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/histogram.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 12000,
|
||||
"bins": {
|
||||
"r": [0, 12, 45, "... (256 values)"],
|
||||
"g": [0, 8, 38, "... (256 values)"],
|
||||
"b": [2, 15, 52, "... (256 values)"],
|
||||
"lum": [0, 10, 40, "... (256 values)"]
|
||||
},
|
||||
"stats": {
|
||||
"r": { "mean": 128, "median": 132, "stdev": 48.5 },
|
||||
"g": { "mean": 119, "median": 121, "stdev": 44.2 },
|
||||
"b": { "mean": 105, "median": 108, "stdev": 51.3 },
|
||||
"lum": { "mean": 118, "median": 120, "stdev": 45.1 }
|
||||
},
|
||||
"mean": { "r": 128, "g": 119, "b": 105 },
|
||||
"max": { "r": 4200, "g": 3800, "b": 4100 }
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يشير `downloadUrl` إلى مخطط رسم بياني PNG مُصيّر يوضّح توزيعات R وG وB والإضاءة.
|
||||
- يحتوي `bins` على مصفوفات خام من 256 قيمة لكل قناة (الأحمر، الأخضر، الأزرق، الإضاءة)، مناسبة لتصيير تصورات مخصصة.
|
||||
- يوفّر `stats` المتوسط والوسيط والانحراف المعياري لكل قناة.
|
||||
- `mean` و`max` حقول اختصار متوافقة مع الإصدارات السابقة.
|
||||
- استخدم مقياس `log` عندما يهيمن على الرسم البياني عدد قليل من القمم وتريد رؤية التفاصيل في الخانات الأدنى.
|
||||
- تُفك ترميز إدخالات HEIC وRAW وPSD وSVG تلقائياً قبل التحليل.
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
description: "التقاط صفحات الويب أو مقتطفات HTML كصور عالية الجودة مع محاكاة الأجهزة."
|
||||
i18n_source_hash: 1e49d070ea2e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3cddba8ad0f1
|
||||
---
|
||||
|
||||
# HTML إلى صورة {#html-to-image}
|
||||
|
||||
التقط عنوان URL لصفحة ويب أو محتوى HTML خام كصورة لقطة شاشة. يدعم محاكاة الأجهزة (سطح المكتب، الجهاز اللوحي، الهاتف المحمول)، والتقاط الصفحة الكاملة، وصيغ مخرجات متعددة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/html-to-image`
|
||||
|
||||
يقبل **جسم JSON** (وليس multipart). لا حاجة لرفع ملف.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| url | string | مشروط | - | عنوان URL للالتقاط (يجب أن يكون عنوان URL صالحاً) |
|
||||
| html | string | مشروط | - | محتوى HTML خام للتصيير (1 إلى 5,000,000 حرف) |
|
||||
| format | string | لا | `"png"` | صيغة المخرجات: `jpg`، `png`، `webp` |
|
||||
| quality | number | لا | `90` | جودة المخرجات للصيغ ذات الفقدان (1 إلى 100) |
|
||||
| fullPage | boolean | لا | `false` | التقاط الصفحة القابلة للتمرير بالكامل، وليس منفذ العرض فقط |
|
||||
| devicePreset | string | لا | `"desktop"` | محاكاة الجهاز: `desktop`، `tablet`، `mobile`، `custom` |
|
||||
| viewportWidth | number | لا | `1280` | عرض منفذ العرض المخصص بالبكسل (320 إلى 3840، يُستخدم عندما يكون devicePreset هو `custom`) |
|
||||
| viewportHeight | number | لا | `720` | ارتفاع منفذ العرض المخصص بالبكسل (320 إلى 2160، يُستخدم عندما يكون devicePreset هو `custom`) |
|
||||
|
||||
يجب توفير `url` أو `html`، لكن ليس كليهما.
|
||||
|
||||
### إعدادات الأجهزة المسبقة {#device-presets}
|
||||
|
||||
| الإعداد المسبق | العرض | الارتفاع | UA الجوال |
|
||||
|--------|-------|--------|-----------|
|
||||
| `desktop` | 1280 | 720 | لا |
|
||||
| `tablet` | 768 | 1024 | لا |
|
||||
| `mobile` | 375 | 812 | نعم |
|
||||
| `custom` | (يحدده المستخدم) | (يحدده المستخدم) | لا |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
التقاط صفحة ويب:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/html-to-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"url": "https://example.com", "format": "png", "fullPage": true, "devicePreset": "desktop"}'
|
||||
```
|
||||
|
||||
تصيير محتوى HTML:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/html-to-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"html": "<div style=\"padding: 20px; background: #f0f0f0;\"><h1>Hello</h1></div>", "format": "png"}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 145000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت Chromium على الخادم. يُرجع HTTP 503 إذا لم تكن خدمة المتصفح متاحة.
|
||||
- يتم التحقق من عناوين URL ضد هجمات SSRF (يتم حظر عناوين الشبكة الخاصة/الداخلية).
|
||||
- نقطة النهاية هذه محدودة المعدل إلى 120 طلباً في الساعة.
|
||||
- `originalSize` يكون دائماً 0 لأن هذه الأداة تولّد صوراً من عناوين URL/HTML.
|
||||
- اسم ملف المخرجات هو `screenshot.<format>`.
|
||||
- إذا استغرقت الصفحة وقتاً طويلاً في التحميل، يُرجع الطلب HTTP 504 (مهلة البوابة).
|
||||
- إذا تعطلت خدمة المتصفح مراراً، يتم تعطيلها مؤقتاً وتُرجع HTTP 503 مع الرمز `BROWSER_CRASHED`.
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
description: "تحسين تلقائي بنقرة واحدة يحلّل الصورة ويصحّح التعرّض والتباين وتوازن الأبيض والتشبّع والحدة."
|
||||
i18n_source_hash: 42b6ab956f91
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: ce9f6d93e33c
|
||||
---
|
||||
|
||||
# تحسين الصورة {#image-enhancement}
|
||||
|
||||
تحسين تلقائي بنقرة واحدة مع تحليل ذكي. يحلّل الصورة ويطبّق تصحيحات التعرّض والتباين وتوازن الأبيض والتشبّع والحدة وإزالة التشويش.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-enhancement`
|
||||
|
||||
**المعالجة:** متزامنة (تستخدم مصنع `createToolRoute`، تُرجع النتيجة مباشرة)
|
||||
|
||||
**حزمة النموذج:** لا شيء مطلوب للتحسين الأساسي. تُستخدم حزمة `upscale-enhance` (5-6 جيجابايت) فقط عند تفعيل `deepEnhance` (لإزالة التشويش بالذكاء الاصطناعي عبر SCUNet).
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (multipart) |
|
||||
| mode | string | لا | `"auto"` | وضع التحسين: `auto`، `portrait`، `landscape`، `low-light`، `food`، `document` |
|
||||
| intensity | number | لا | `50` | شدة التحسين الإجمالية (0-100) |
|
||||
| corrections | object | لا | جميعها `true` | التصحيحات الانتقائية للتطبيق (انظر أدناه) |
|
||||
| deepEnhance | boolean | لا | `false` | تفعيل إزالة التشويش المدعومة بالذكاء الاصطناعي (يتطلب تثبيت أداة `noise-removal`) |
|
||||
|
||||
### كائن التصحيحات {#corrections-object}
|
||||
|
||||
| الحقل | النوع | الافتراضي | الوصف |
|
||||
|-------|------|---------|-------------|
|
||||
| exposure | boolean | `true` | تصحيح التعرّض تلقائياً |
|
||||
| contrast | boolean | `true` | تصحيح التباين تلقائياً |
|
||||
| whiteBalance | boolean | `true` | تصحيح توازن الأبيض تلقائياً |
|
||||
| saturation | boolean | `true` | تصحيح التشبّع تلقائياً |
|
||||
| sharpness | boolean | `true` | زيادة الحدة تلقائياً |
|
||||
| denoise | boolean | `true` | إزالة تشويش خفيفة |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode":"portrait","intensity":70,"corrections":{"exposure":true,"contrast":true,"sharpness":false}}'
|
||||
```
|
||||
|
||||
## الاستجابة (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo.jpg",
|
||||
"originalSize": 300000,
|
||||
"processedSize": 310000
|
||||
}
|
||||
```
|
||||
|
||||
## نقطة نهاية التحليل {#analyze-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-enhancement/analyze`
|
||||
|
||||
يحلّل صورة ويُرجع توصيات التصحيح دون تطبيقها.
|
||||
|
||||
### المعاملات {#parameters-1}
|
||||
|
||||
| المعامل | النوع | مطلوب | الوصف |
|
||||
|-----------|------|----------|-------------|
|
||||
| file | file | نعم | ملف الصورة (multipart) |
|
||||
|
||||
### مثال على طلب {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement/analyze \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
### الاستجابة (200 OK) {#response-200-ok-1}
|
||||
|
||||
```json
|
||||
{
|
||||
"corrections": {
|
||||
"exposure": { "value": 0.3, "direction": "brighten" },
|
||||
"contrast": { "value": 0.2, "direction": "increase" },
|
||||
"whiteBalance": { "value": 200, "direction": "warmer" },
|
||||
"saturation": { "value": 0.1, "direction": "increase" },
|
||||
"sharpness": { "value": 0.4, "direction": "sharpen" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تستخدم هذه الأداة مصنع `createToolRoute` المتزامن، لذا تُرجع استجابة قياسية (وليس 202 غير متزامنة).
|
||||
- يضبط معامل `mode` كيفية ترجيح التصحيحات (مثلاً، وضع البورتريه ألطف على درجات لون البشرة، ووضع المناظر الطبيعية يعزّز التشبّع).
|
||||
- عند تفعيل `deepEnhance` وتثبيت أداة `noise-removal` (SCUNet)، يُطبَّق تمرير إضافي لإزالة التشويش بالذكاء الاصطناعي بعد التصحيحات القياسية.
|
||||
- نقطة نهاية التحليل مفيدة لمعاينة التصحيحات التي ستُطبَّق قبل الالتزام بها.
|
||||
- تدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "حشو صورة إلى نسبة عرض إلى ارتفاع مستهدفة بلون خالص أو خلفية شفافة أو مموّهة."
|
||||
i18n_source_hash: 796122da3dae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7d682d59ad24
|
||||
---
|
||||
|
||||
# حشو الصورة {#image-pad}
|
||||
|
||||
احشُ صورة إلى نسبة عرض إلى ارتفاع مستهدفة بإضافة لون خالص أو خلفية شفافة أو مموّهة حولها. مفيد لملاءمة الصور في نسب عرض إلى ارتفاع ثابتة لوسائل التواصل الاجتماعي أو الطباعة دون اقتصاص.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-pad`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | لا | `"1:1"` | نسبة العرض إلى الارتفاع المستهدفة: `16:9`، `9:16`، `1:1`، `4:3`، `3:4`، أو `custom` |
|
||||
| ratioW | integer | لا | `1` | عرض النسبة المخصصة (1-100، يُستخدم عندما يكون target هو `custom`) |
|
||||
| ratioH | integer | لا | `1` | ارتفاع النسبة المخصصة (1-100، يُستخدم عندما يكون target هو `custom`) |
|
||||
| background | string | لا | `"color"` | وضع الخلفية: `color`، `transparent`، أو `blur` |
|
||||
| color | string | لا | `"#ffffff"` | لون خلفية hex (عندما تكون الخلفية `color`) |
|
||||
| padding | integer | لا | `0` | حشو إضافي كنسبة مئوية من اللوحة (0-50) |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-pad \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"target": "16:9", "background": "blur", "padding": 5}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 3100000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- ينشئ وضع الخلفية `blur` نسخة مموّهة من الصورة الأصلية كحشو للتعبئة، ما يُنتج نتيجة متماسكة بصرياً.
|
||||
- عند استخدام خلفية `transparent`، تُحوَّل المخرجات إلى PNG للحفاظ على قناة alpha.
|
||||
- تتطابق صيغة المخرجات مع صيغة الإدخال ما لم تكن هناك شفافية. تُفك ترميز إدخالات HEIC وRAW وPSD وSVG تلقائياً قبل المعالجة.
|
||||
- عيّن `target` إلى `custom` ووفّر `ratioW` و`ratioH` للحصول على نسب عرض إلى ارتفاع اعتباطية (مثل `ratioW: 3, ratioH: 2` لـ 3:2).
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "تحويل الصور إلى data URIs بترميز base64 للتضمين في HTML وCSS والمزيد."
|
||||
i18n_source_hash: ba4b8f3b4ece
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 62301a0edbe2
|
||||
---
|
||||
|
||||
# صورة إلى Base64 {#image-to-base64}
|
||||
|
||||
حوّل صورة واحدة أو أكثر إلى سلاسل مُرمّزة بـ base64 وdata URIs. يدعم تحويل الصيغة الاختياري والتحكم في الجودة وإعادة التحجيم. مفيد لتضمين الصور مباشرة في HTML أو CSS أو JSON أو قوالب البريد الإلكتروني.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-to-base64`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة واحد أو أكثر وحقل JSON اختياري `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| outputFormat | string | لا | `"original"` | التحويل قبل الترميز: `original`، `jpeg`، `png`، `webp`، `avif`، `jxl` |
|
||||
| quality | number | لا | `80` | جودة المخرجات للصيغ ذات الفقدان (1 إلى 100) |
|
||||
| maxWidth | number | لا | `0` | أقصى عرض بالبكسل (0 = بلا إعادة تحجيم، لن يتم التكبير) |
|
||||
| maxHeight | number | لا | `0` | أقصى ارتفاع بالبكسل (0 = بلا إعادة تحجيم، لن يتم التكبير) |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-base64 \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@icon.png" \
|
||||
-F 'settings={"outputFormat": "webp", "quality": 80, "maxWidth": 200}'
|
||||
```
|
||||
|
||||
ملفات متعددة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-base64 \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@icon1.png" \
|
||||
-F "file=@icon2.png" \
|
||||
-F "file=@icon3.png" \
|
||||
-F 'settings={"outputFormat": "original"}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"filename": "icon.png",
|
||||
"mimeType": "image/webp",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"originalSize": 45000,
|
||||
"encodedSize": 28800,
|
||||
"overheadPercent": -36.0,
|
||||
"base64": "UklGRlYAAABXRUJQ...",
|
||||
"dataUri": "data:image/webp;base64,UklGRlYAAABXRUJQ..."
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
}
|
||||
```
|
||||
|
||||
## حقول الاستجابة {#response-fields}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| results | array | الصور التي تم تحويلها بنجاح |
|
||||
| errors | array | الصور التي فشلت في المعالجة (مع اسم الملف ورسالة الخطأ) |
|
||||
|
||||
### كائن النتيجة {#result-object}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| filename | string | اسم الملف الأصلي |
|
||||
| mimeType | string | نوع MIME للمخرجات المُرمّزة |
|
||||
| width | number | العرض النهائي بالبكسل (بعد أي إعادة تحجيم) |
|
||||
| height | number | الارتفاع النهائي بالبكسل (بعد أي إعادة تحجيم) |
|
||||
| originalSize | number | حجم الملف الأصلي بالبايت |
|
||||
| encodedSize | number | حجم سلسلة base64 بالبايت |
|
||||
| overheadPercent | number | نسبة فرق الحجم مقابل الأصل (موجب = أكبر، سالب = أصغر) |
|
||||
| base64 | string | بيانات الصورة الخام المُرمّزة بـ base64 |
|
||||
| dataUri | string | data URI كامل جاهز للاستخدام في سمات `src` |
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- عادةً ما يزيد ترميز base64 الحجم بنحو 33٪ مقارنةً بالملف الثنائي. يُظهر حقل `overheadPercent` الفرق الفعلي.
|
||||
- عندما يكون `outputFormat` هو `"original"`، تُحوَّل ملفات HEIC/HEIF إلى JPEG (لأن المتصفحات لا تستطيع عرض HEIC في data URIs).
|
||||
- يعيد خيارا `maxWidth` و`maxHeight` التحجيم باستخدام `fit: inside` مع `withoutEnlargement`، لذا لا يتم تكبير الصور الأصغر من الأبعاد المحددة.
|
||||
- يمكن معالجة ملفات متعددة في طلب واحد. تتم معالجة كل ملف على حدة، والفشل لا يمنع نجاح الملفات الأخرى.
|
||||
- تُمرَّر ملفات SVG كما هي بصيغة `image/svg+xml` دون إعادة ترميز (ما لم يُطلب تحويل صيغة).
|
||||
- هذه نقطة نهاية للقراءة فقط. لا تُنتج ملفاً قابلاً للتنزيل ولا `jobId`. تُرجَع بيانات base64 مباشرة في جسم الاستجابة.
|
||||
@@ -0,0 +1,119 @@
|
||||
---
|
||||
description: "دمج صورة واحدة أو أكثر في مستند PDF مع خيارات حجم الصفحة والاتجاه وحجم الملف المستهدف."
|
||||
i18n_source_hash: f659c7e7f56b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a56718b49ca3
|
||||
---
|
||||
|
||||
# صورة إلى PDF {#image-to-pdf}
|
||||
|
||||
ادمج صورة واحدة أو أكثر في مستند PDF. يدعم أحجام صفحات واتجاهات وهوامش متعددة، واستهداف حجم الملف اختيارياً عبر ضبط الجودة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-to-pdf`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة واحد أو أكثر وحقل JSON `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| pageSize | string | لا | `"A4"` | حجم الصفحة: `A4`، `Letter`، `A3`، `A5` |
|
||||
| orientation | string | لا | `"portrait"` | اتجاه الصفحة: `portrait` أو `landscape` |
|
||||
| margin | number | لا | `20` | هامش الصفحة بالنقاط (0-500) |
|
||||
| targetSize | object | لا | - | قيد حجم الملف المستهدف (انظر أدناه) |
|
||||
| collate | boolean | لا | `true` | دمج جميع الصور في PDF واحد. إذا كان `false`، ينشئ PDF واحداً لكل صورة. |
|
||||
|
||||
### كائن الحجم المستهدف {#target-size-object}
|
||||
|
||||
| الحقل | النوع | مطلوب | الوصف |
|
||||
|-------|------|----------|-------------|
|
||||
| value | number | نعم | قيمة الحجم المستهدف |
|
||||
| unit | string | نعم | الوحدة: `KB` أو `MB` |
|
||||
|
||||
الحد الأدنى للحجم المستهدف هو 50 كيلوبايت.
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
PDF متعدد الصور أساسي:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@page1.jpg" \
|
||||
-F "file=@page2.jpg" \
|
||||
-F "file=@page3.jpg" \
|
||||
-F 'settings={"pageSize": "A4", "orientation": "portrait", "margin": 20}'
|
||||
```
|
||||
|
||||
مع حجم ملف مستهدف:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@scan1.jpg" \
|
||||
-F "file=@scan2.jpg" \
|
||||
-F 'settings={"pageSize": "Letter", "targetSize": {"value": 2, "unit": "MB"}}'
|
||||
```
|
||||
|
||||
PDF واحد لكل صورة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F 'settings={"collate": false}'
|
||||
```
|
||||
|
||||
## مثال على استجابة (مُجمّعة) {#example-response-collated}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.pdf",
|
||||
"originalSize": 5000000,
|
||||
"processedSize": 1200000,
|
||||
"pages": 3
|
||||
}
|
||||
```
|
||||
|
||||
## مثال على استجابة (غير مُجمّعة) {#example-response-non-collated}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.zip",
|
||||
"originalSize": 5000000,
|
||||
"processedSize": 2400000,
|
||||
"pages": 2,
|
||||
"collated": false
|
||||
}
|
||||
```
|
||||
|
||||
## مثال على استجابة (مع حجم مستهدف) {#example-response-with-target-size}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.pdf",
|
||||
"originalSize": 10000000,
|
||||
"processedSize": 2000000,
|
||||
"pages": 5,
|
||||
"compression": {
|
||||
"targetRequested": 2097152,
|
||||
"targetMet": true,
|
||||
"jpegQuality": 72
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- توضَع الصور في منتصف الصفحة وتُحجَّم لتلائم داخل الهوامش مع الحفاظ على نسبة العرض إلى الارتفاع. لا يتم تكبير الصور أبداً.
|
||||
- عندما يكون `collate` هو `false`، تصبح كل صورة ملف PDF منفصلاً، ويكون التنزيل أرشيف ZIP يحتوي على جميع ملفات PDF.
|
||||
- تستخدم ميزة الحجم المستهدف بحثاً ثنائياً تكرارياً على مستويات جودة JPEG (10-95) لإيجاد أفضل جودة تلائم الميزانية.
|
||||
- تُسطَّح الصور الشفافة إلى الأبيض قبل تضمينها في PDF.
|
||||
- صيغ الإدخال المدعومة: JPEG وPNG وWebP وAVIF وTIFF وGIF وHEIC وRAW وPSD وSVG والمزيد.
|
||||
- يتم تطبيق اتجاه EXIF تلقائياً قبل التضمين.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "عرض بيانات وصفية تفصيلية للصورة وخصائصها وإحصائيات الرسم البياني لكل قناة."
|
||||
i18n_source_hash: 8a0f7a0b0153
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 709f24e5d07c
|
||||
---
|
||||
|
||||
# معلومات الصورة {#image-info}
|
||||
|
||||
أداة تحليل للقراءة فقط تُرجع بيانات وصفية شاملة للصورة تشمل الأبعاد والصيغة ومساحة اللون ووجود EXIF/ICC/XMP وإحصائيات الرسم البياني لكل قناة. لا تُنتج ملف مخرجات معالجاً.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/info`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة. لا حاجة لحقل إعدادات.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
لا تحتوي هذه الأداة على معاملات قابلة للتكوين. ما عليك سوى رفع ملف الصورة.
|
||||
|
||||
| الحقل | النوع | مطلوب | الوصف |
|
||||
|-------|------|----------|-------------|
|
||||
| file | file | نعم | الصورة المراد تحليلها |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/info \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"fileSize": 2450000,
|
||||
"width": 4032,
|
||||
"height": 3024,
|
||||
"format": "jpeg",
|
||||
"channels": 3,
|
||||
"hasAlpha": false,
|
||||
"colorSpace": "srgb",
|
||||
"density": 72,
|
||||
"isProgressive": false,
|
||||
"orientation": 1,
|
||||
"hasProfile": true,
|
||||
"hasExif": true,
|
||||
"hasIcc": true,
|
||||
"hasXmp": false,
|
||||
"bitDepth": "8",
|
||||
"pages": 1,
|
||||
"histogram": [
|
||||
{ "channel": "red", "min": 0, "max": 255, "mean": 128.45, "stdev": 52.31 },
|
||||
{ "channel": "green", "min": 2, "max": 253, "mean": 115.22, "stdev": 48.76 },
|
||||
{ "channel": "blue", "min": 0, "max": 250, "mean": 102.89, "stdev": 55.14 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## حقول الاستجابة {#response-fields}
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| filename | string | اسم الملف المُطهَّر |
|
||||
| fileSize | number | حجم الملف بالبايت |
|
||||
| width | number | عرض الصورة بالبكسل |
|
||||
| height | number | ارتفاع الصورة بالبكسل |
|
||||
| format | string | الصيغة المكتشفة (jpeg، png، webp، إلخ) |
|
||||
| channels | number | عدد قنوات الألوان |
|
||||
| hasAlpha | boolean | ما إذا كانت الصورة تحتوي على قناة alpha |
|
||||
| colorSpace | string | مساحة اللون (srgb، cmyk، إلخ) |
|
||||
| density | number أو null | دقة DPI/PPI |
|
||||
| isProgressive | boolean | ما إذا كان JPEG يستخدم الترميز التدريجي |
|
||||
| orientation | number أو null | قيمة اتجاه EXIF (1-8) |
|
||||
| hasProfile | boolean | ما إذا كان ملف تعريف ICC مُضمّناً |
|
||||
| hasExif | boolean | ما إذا كانت بيانات EXIF الوصفية موجودة |
|
||||
| hasIcc | boolean | ما إذا كان ملف تعريف لون ICC موجوداً |
|
||||
| hasXmp | boolean | ما إذا كانت بيانات XMP الوصفية موجودة |
|
||||
| bitDepth | string أو null | البتات لكل عينة |
|
||||
| pages | number | عدد الصفحات (للصيغ متعددة الصفحات مثل TIFF وGIF) |
|
||||
| histogram | array | إحصائيات لكل قناة (الأدنى، الأعلى، المتوسط، الانحراف المعياري) |
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- هذه نقطة نهاية للقراءة فقط. لا تُنتج ملف مخرجات قابلاً للتنزيل ولا `jobId`.
|
||||
- بالنسبة لصور صيغة RAW (DNG وCR2 وNEF وARW وإلخ)، يُستخدم ExifTool لاستخراج أبعاد المستشعر الحقيقية وأعلام البيانات الوصفية التي لا يستطيع Sharp قراءتها مباشرة.
|
||||
- تُفك ترميز ملفات HEIC/HEIF إلى PNG داخلياً لاستخراج إحصائيات البكسل، لأن Sharp لا يستطيع فك ترميز بكسلات HEVC.
|
||||
- يوفّر الرسم البياني الأدنى/الأعلى/المتوسط/الانحراف المعياري لكل قناة، وليس توزيعاً كاملاً من 256 خانة.
|
||||
- يعكس حقل `density` بيانات DPI الوصفية المُضمّنة، إن وُجدت.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "إنشاء عنصر نائب صغير منخفض الجودة للصورة مع data URI بترميز base64."
|
||||
i18n_source_hash: f8a27c8021f5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 12c0e11492ab
|
||||
---
|
||||
|
||||
# العنصر النائب LQIP {#lqip-placeholder}
|
||||
|
||||
أنشئ عنصراً نائباً صغيراً منخفض الجودة للصورة (LQIP) من صورة مصدر. يُرجع ملف عنصر نائب صغير إلى جانب data URI بترميز base64، ووسم HTML `<img>` جاهز للاستخدام، ومقتطف CSS `background-image` للتضمين الفوري.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/lqip-placeholder`
|
||||
|
||||
يقبل بيانات نموذج multipart تحتوي على ملف صورة وحقل JSON `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | لا | `16` | العرض المستهدف بالبكسل (4-64) |
|
||||
| blur | number | لا | `2` | نصف قطر التمويه لاستراتيجية التمويه (0-20) |
|
||||
| strategy | string | لا | `"blur"` | استراتيجية العنصر النائب: `blur`، `pixelate`، أو `solid` |
|
||||
| format | string | لا | `"webp"` | صيغة المخرجات: `webp`، `png`، أو `jpeg` |
|
||||
| quality | integer | لا | `50` | جودة المخرجات (1-100) |
|
||||
|
||||
## مثال على طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/lqip-placeholder \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"width": 20, "strategy": "blur", "format": "webp"}'
|
||||
```
|
||||
|
||||
## مثال على استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 280,
|
||||
"dataUri": "data:image/webp;base64,UklGR...",
|
||||
"width": 20,
|
||||
"height": 13,
|
||||
"bytes": 280,
|
||||
"strategy": "blur",
|
||||
"html": "<img src=\"data:image/webp;base64,UklGR...\" />",
|
||||
"css": "background-image:url('data:image/webp;base64,UklGR...');background-size:cover;background-position:center;"
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يحتوي حقل `dataUri` على data URI الكامل، جاهز للاستخدام في سمات `src` أو CSS دون أي طلبات إضافية.
|
||||
- يوفّر حقلا `html` و`css` مقتطفات نسخ ولصق لحالات الاستخدام الشائعة.
|
||||
- تُنتج استراتيجية `blur` صورة مصغرة ناعمة مموّهة. وتنشئ استراتيجية `pixelate` فسيفساء مربّعة. وتُرجع استراتيجية `solid` لوناً واحداً بمتوسط.
|
||||
- تتراوح أحجام العنصر النائب النموذجية بين 200-500 بايت، ما يجعلها مناسبة للتضمين المباشر في HTML.
|
||||
- يُحسَب الارتفاع تلقائياً للحفاظ على نسبة العرض إلى الارتفاع لصورة المصدر.
|
||||
- تُفك ترميز إدخالات HEIC وRAW وPSD وSVG تلقائياً قبل المعالجة.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "إنشاء الميمات باستخدام القوالب أو الصور المخصصة، وصناديق نص منسّقة، وخيارات الخطوط."
|
||||
i18n_source_hash: 0a4970112ca6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 70a79e6dcc11
|
||||
---
|
||||
|
||||
# مولّد الميمات {#meme-generator}
|
||||
|
||||
أنشئ ميمات باستخدام القوالب المدمجة أو الصور المخصصة. أضف نصًا بتنسيق الميم الكلاسيكي (نص عريض وذو حدود خارجية)، وإعدادات تخطيط متعددة، وخيارات خطوط.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/meme-generator`
|
||||
|
||||
يقبل أحد الأمرين:
|
||||
- **بيانات نموذج متعدد الأجزاء (Multipart form data)** مع ملف صورة وحقل JSON باسم `settings` (وضع الصورة المخصصة)
|
||||
- **جسم JSON** مع `templateId` (وضع القالب، لا حاجة لرفع ملف)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| templateId | string | لا | - | معرّف قالب الميم المدمج. إذا تم توفيره، فلا حاجة لرفع صورة |
|
||||
| textLayout | string | لا | `"top-bottom"` | تخطيط صندوق النص: `top-bottom`، `top-only`، `bottom-only`، `center`، `side-by-side` |
|
||||
| textBoxes | array | لا | `[]` | مصفوفة من كائنات صناديق النص تحتوي على حقلي `id` و `text` |
|
||||
| fontFamily | string | لا | `"anton"` | الخط: `anton`، `arial-black`، `comic-sans`، `montserrat`، `bebas-neue`، `permanent-marker`، `roboto` |
|
||||
| fontSize | number | لا | تلقائي | حجم الخط بالبكسل (8 إلى 200). يُحسب تلقائيًا إذا تم حذفه |
|
||||
| textColor | string | لا | `"#ffffff"` | لون تعبئة النص |
|
||||
| strokeColor | string | لا | `"#000000"` | لون حدود/إطار النص الخارجي |
|
||||
| textAlign | string | لا | `"center"` | محاذاة النص: `left`، `center`، `right` |
|
||||
| allCaps | boolean | لا | `true` | تحويل النص إلى أحرف كبيرة |
|
||||
|
||||
### صناديق النص {#text-boxes}
|
||||
|
||||
يجب أن يحتوي كل عنصر في مصفوفة `textBoxes` على:
|
||||
|
||||
| الحقل | النوع | الوصف |
|
||||
|-------|------|-------------|
|
||||
| id | string | معرّف الصندوق المطابق للتخطيط (مثل `"top"`، `"bottom"`، `"left"`، `"right"`، `"center"`) |
|
||||
| text | string | نص الميم المراد عرضه |
|
||||
|
||||
### معرّفات صناديق تخطيط النص {#text-layout-box-ids}
|
||||
|
||||
| التخطيط | معرّفات الصناديق المتاحة |
|
||||
|--------|-------------------|
|
||||
| `top-bottom` | `top`، `bottom` |
|
||||
| `top-only` | `top` |
|
||||
| `bottom-only` | `bottom` |
|
||||
| `center` | `center` |
|
||||
| `side-by-side` | `left`، `right` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
صورة مخصصة مع نص علوي وسفلي:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/meme-generator \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"textLayout": "top-bottom", "textBoxes": [{"id": "top", "text": "When the code works"}, {"id": "bottom", "text": "On the first try"}], "fontFamily": "anton", "allCaps": true}'
|
||||
```
|
||||
|
||||
باستخدام قالب مدمج (جسم JSON، بدون رفع ملف):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/meme-generator \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"templateId": "drake", "textBoxes": [{"id": "top", "text": "Manual testing"}, {"id": "bottom", "text": "Automated tests"}]}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/meme-drake.png",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 520000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يجب توفير إما `templateId` أو ملف صورة مرفوع. عند توفير كليهما يُستخدم القالب.
|
||||
- تحدد القوالب مواضع صناديق النص الخاصة بها؛ ويُتجاهل المعامل `textLayout` عند استخدام القوالب.
|
||||
- يُعرض النص بصيغة SVG مع حدود خارجية لإضفاء مظهر الميم الكلاسيكي.
|
||||
- يُحسب حجم الخط تلقائيًا ليناسب صندوق النص إذا لم يُضبط صراحةً.
|
||||
- تُتجاوز صناديق النص الفارغة (لا يحدث أي عرض إذا كانت جميع الصناديق فارغة).
|
||||
- يتضمن اسم ملف الإخراج معرّف القالب عند استخدام القوالب (مثل `meme-drake.png`).
|
||||
- تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "إزالة الضوضاء والحبيبات المدعومة بالذكاء الاصطناعي مع خيارات جودة متعددة المستويات."
|
||||
i18n_source_hash: f0dfc876e0e0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 660ad3ea66a7
|
||||
---
|
||||
|
||||
# إزالة الضوضاء {#noise-removal}
|
||||
|
||||
إزالة الضوضاء والحبيبات المدعومة بالذكاء الاصطناعي مع خيارات جودة متعددة المستويات، باستخدام الوحدة الجانبية لـ Python (نموذج SCUNet).
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/noise-removal`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `upscale-enhance` (5-6 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| tier | string | لا | `"balanced"` | مستوى الجودة: `quick`، `balanced`، `quality`، `maximum` |
|
||||
| strength | number | لا | `50` | شدة إزالة الضوضاء (0-100) |
|
||||
| detailPreservation | number | لا | `50` | مقدار التفاصيل المراد الحفاظ عليها (0-100). القيم الأعلى تُبقي المزيد من الملمس |
|
||||
| colorNoise | number | لا | `30` | شدة تقليل ضوضاء الألوان (0-100) |
|
||||
| format | string | لا | `"original"` | صيغة الإخراج: `original`، `png`، `jpeg`، `webp`، `avif`، `jxl` |
|
||||
| quality | number | لا | `90` | جودة ترميز الإخراج (1-100) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/noise-removal \
|
||||
-F "file=@noisy-photo.jpg" \
|
||||
-F 'settings={"tier":"quality","strength":60,"detailPreservation":70,"colorNoise":40}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Denoising...","percent":65}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/noisy-photo_denoised.jpg",
|
||||
"originalSize": 500000,
|
||||
"processedSize": 380000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `upscale-enhance` (5-6 غيغابايت).
|
||||
- تُوازن مستويات الجودة بين السرعة والجودة: `quick` هو الأسرع مع إزالة أساسية للضوضاء، بينما يستخدم `maximum` النهج الأكثر شمولًا متعدد المرات.
|
||||
- يُعد المعامل `detailPreservation` حاسمًا للأجسام ذات الملمس (القماش، الشعر، أوراق النبات). القيم الأعلى تمنع مزيل الضوضاء من طمس التفاصيل الدقيقة.
|
||||
- عند ضبط `format` على `"original"`، تطابق صيغة الإخراج صيغة ملف الإدخال.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "استخراج النص من الصور باستخدام التعرّف الضوئي على الحروف المدعوم بالذكاء الاصطناعي."
|
||||
i18n_source_hash: 3d85d423b82c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 982e52ed678e
|
||||
---
|
||||
|
||||
# التعرّف الضوئي على الحروف / استخراج النص {#ocr-text-extraction}
|
||||
|
||||
استخرج النص من الصور باستخدام التعرّف الضوئي على الحروف المدعوم بالذكاء الاصطناعي. يدعم لغات متعددة ومستويات جودة متعددة.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/ocr`
|
||||
|
||||
**المعالجة:** استجابة JSON متزامنة. إذا تم توفير `clientJobId`، يُبلَّغ عن التقدّم أيضًا عبر SSE.
|
||||
|
||||
**حزمة النموذج:** `ocr` (5-6 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| quality | string | لا | `"balanced"` | مستوى الجودة: `fast` (Tesseract)، `balanced` (PaddleOCR v5)، `best` (PaddleOCR VL) |
|
||||
| language | string | لا | `"auto"` | تلميح اللغة: `auto`، `en`، `de`، `fr`، `es`، `zh`، `ja`، `ko` |
|
||||
| enhance | boolean | لا | `true` | معالجة الصورة مسبقًا لتحسين دقة التعرّف الضوئي |
|
||||
| engine | string | لا | - | مهجور. استخدم `quality` بدلًا منه. يربط `tesseract` بـ `fast`، و `paddleocr` بـ `balanced` |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/ocr \
|
||||
-F "file=@document.png" \
|
||||
-F 'settings={"quality":"best","language":"en","enhance":true}'
|
||||
```
|
||||
|
||||
## الاستجابة (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"filename": "document.png",
|
||||
"text": "Extracted text content from the image...",
|
||||
"engine": "paddleocr-vl"
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE، اختياري) {#progress-sse-optional}
|
||||
|
||||
إذا تم توفير حقل نموذج `clientJobId`، تُبثّ أحداث التقدّم:
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Recognizing text...","percent":50}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `ocr` (5-6 غيغابايت).
|
||||
- يُرجع التعرّف الضوئي النص المستخرج مباشرةً بدلًا من رابط تنزيل صورة.
|
||||
- يستخدم سلسلة احتياطية: إذا تعطّل مستوى جودة أعلى (مثل انهيار PaddleOCR)، يُعيد المحاولة تلقائيًا بالمستوى الأدنى التالي.
|
||||
- إذا أرجع مستوى ما نصًا فارغًا دون انهيار، فإنه يتراجع أيضًا إلى المستوى التالي.
|
||||
- تُربط مستويات الجودة بالمحرّكات: `fast` = Tesseract، `balanced` = PaddleOCR v5، `best` = PaddleOCR VL.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
description: "تحسين الصور للنشر على الويب مع تحويل الصيغة والتحكم في الجودة وتغيير الحجم وإزالة البيانات الوصفية."
|
||||
i18n_source_hash: c327bbbce768
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d080461b91b6
|
||||
---
|
||||
|
||||
# التحسين للويب {#optimize-for-web}
|
||||
|
||||
حسّن الصور للنشر على الويب في خطوة واحدة. يجمع بين تحويل الصيغة وضبط الجودة وتغيير الحجم الاختياري والترميز التدريجي وإزالة البيانات الوصفية.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/optimize-for-web`
|
||||
|
||||
يقبل بيانات نموذج متعدد الأجزاء مع ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
تتوفر أيضًا نقطة نهاية للمعاينة الحية على `POST /api/v1/tools/image/optimize-for-web/preview`، والتي تُرجع الصورة المعالَجة مباشرةً كبيانات ثنائية (دون إنشاء مساحة عمل) لضبط المعاملات في الوقت الفعلي.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | لا | `"webp"` | صيغة الإخراج: `webp`، `jpeg`، `avif`، `png`، `jxl` |
|
||||
| quality | number | لا | `80` | جودة الإخراج (1-100) |
|
||||
| maxWidth | number | لا | - | أقصى عرض بالبكسل. تُصغَّر الصورة إذا كانت أعرض. |
|
||||
| maxHeight | number | لا | - | أقصى ارتفاع بالبكسل. تُصغَّر الصورة إذا كانت أطول. |
|
||||
| progressive | boolean | لا | `true` | تفعيل الترميز التدريجي/المتشابك |
|
||||
| stripMetadata | boolean | لا | `true` | إزالة البيانات الوصفية EXIF وGPS وICC وXMP |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/optimize-for-web \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "webp", "quality": 75, "maxWidth": 1920}'
|
||||
```
|
||||
|
||||
التحسين إلى AVIF مع ضغط قوي:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/optimize-for-web \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "avif", "quality": 50, "maxWidth": 1200, "maxHeight": 800}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 4500000,
|
||||
"processedSize": 320000
|
||||
}
|
||||
```
|
||||
|
||||
### استجابة نقطة نهاية المعاينة {#preview-endpoint-response}
|
||||
|
||||
تُرجع نقطة نهاية المعاينة (`/api/v1/tools/image/optimize-for-web/preview`) الصورة الثنائية مباشرةً مع ترويسات معلوماتية:
|
||||
|
||||
- `X-Original-Size` - حجم الملف الأصلي بالبايت
|
||||
- `X-Processed-Size` - حجم الملف المعالَج بالبايت
|
||||
- `X-Output-Filename` - اسم ملف الإخراج مُرمَّز بترميز عنوان URL
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- صُمّم هذا الأداة كخط تحسين شامل لأصول الويب. يتولى تحويل الصيغة وضبط الجودة وتقييد الأبعاد القصوى وإزالة البيانات الوصفية في مرور واحد.
|
||||
- يُحدَّث امتداد اسم ملف الإخراج ليطابق الصيغة المختارة.
|
||||
- يستخدم ترميز JXL (JPEG XL) مُرمِّزًا متخصصًا عبر سطر الأوامر. تُعالَج الصورة أولًا كـ PNG، ثم تُرمَّز إلى JXL.
|
||||
- يُحسّن الترميز التدريجي وقت التحميل المُدرَك لصيغتي JPEG وPNG بالسماح للمتصفحات بعرض معاينة منخفضة الجودة قبل تحميل الصورة الكاملة.
|
||||
- نقطة نهاية المعاينة أخف وزنًا (دون إنشاء مساحة عمل/مهمة) ومخصصة لواجهة ضبط المعاملات الحية في الواجهة الأمامية.
|
||||
@@ -0,0 +1,173 @@
|
||||
---
|
||||
description: "مولّد صور جوازات السفر وبطاقات الهوية المدعوم بالذكاء الاصطناعي مع كشف الوجه وإزالة الخلفية وترتيب أوراق الطباعة."
|
||||
i18n_source_hash: d4b4f4ced988
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 455734f143be
|
||||
---
|
||||
|
||||
# صورة جواز السفر {#passport-photo}
|
||||
|
||||
مولّد صور جوازات السفر وبطاقات الهوية المدعوم بالذكاء الاصطناعي. سير عمل من مرحلتين: التحليل (كشف الوجه + إزالة الخلفية) ثم التوليد (القص وتغيير الحجم والترتيب للطباعة).
|
||||
|
||||
## نقاط نهاية الـ API {#api-endpoints}
|
||||
|
||||
يستخدم هذا الأداة تدفقًا من مرحلتين مع نقاط نهاية منفصلة للتحليل والتوليد.
|
||||
|
||||
**حزم النماذج:** `background-removal` و `face-detection`
|
||||
|
||||
---
|
||||
|
||||
### المرحلة 1: التحليل {#phase-1-analyze}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo/analyze`
|
||||
|
||||
يكشف معالم الوجه ويزيل الخلفية. يُرجع بيانات المعالم ومعاينة لتعرضها الواجهة الأمامية كمعاينة قص.
|
||||
|
||||
#### المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| clientJobId | string | لا | - | معرّف مهمة اختياري لتتبّع التقدّم عبر SSE |
|
||||
|
||||
#### مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
|
||||
-F "file=@headshot.jpg"
|
||||
```
|
||||
|
||||
#### الاستجابة (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"filename": "headshot.jpg",
|
||||
"preview": "<base64-encoded PNG>",
|
||||
"previewWidth": 800,
|
||||
"previewHeight": 1067,
|
||||
"landmarks": {
|
||||
"leftEye": { "x": 0.42, "y": 0.35 },
|
||||
"rightEye": { "x": 0.58, "y": 0.35 },
|
||||
"eyeCenter": { "x": 0.50, "y": 0.35 },
|
||||
"chin": { "x": 0.50, "y": 0.65 },
|
||||
"forehead": { "x": 0.50, "y": 0.22 },
|
||||
"crown": { "x": 0.50, "y": 0.18 },
|
||||
"nose": { "x": 0.50, "y": 0.48 },
|
||||
"faceCenterX": 0.50
|
||||
},
|
||||
"imageWidth": 2400,
|
||||
"imageHeight": 3200
|
||||
}
|
||||
```
|
||||
|
||||
#### التقدّم (SSE، اختياري) {#progress-sse-optional}
|
||||
|
||||
إذا تم توفير `clientJobId`، يُبثّ التقدّم (0-30% لكشف الوجه، و30-95% لإزالة الخلفية).
|
||||
|
||||
#### خطأ: لم يُكتشف وجه (422) {#error-no-face-detected-422}
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "No face detected",
|
||||
"details": "Could not detect a face in the uploaded image. Please upload a clear, front-facing photo with good lighting."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المرحلة 2: التوليد {#phase-2-generate}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo/generate`
|
||||
|
||||
يقص الصورة ويغيّر حجمها ويرتّبها اختياريًا على ورقة طباعة. يستخدم الصور المخزّنة مؤقتًا من المرحلة 1 (دون إعادة تشغيل الذكاء الاصطناعي).
|
||||
|
||||
#### المعاملات (جسم JSON) {#parameters-json-body}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| jobId | string | نعم | - | معرّف المهمة من المرحلة 1 |
|
||||
| filename | string | نعم | - | اسم الملف الأصلي من المرحلة 1 |
|
||||
| countryCode | string | نعم | - | رمز الدولة لمواصفات جواز السفر (مثل `US`، `GB`، `IN`) |
|
||||
| documentType | string | لا | `"passport"` | نوع المستند (من مواصفات الدولة) |
|
||||
| bgColor | string | لا | `"#FFFFFF"` | لون الخلفية بصيغة hex |
|
||||
| printLayout | string | لا | `"none"` | تخطيط ورق الطباعة: `none`، `4x6`، `a4` |
|
||||
| maxFileSizeKb | number | لا | `0` | قيد أقصى حجم للملف بالكيلوبايت (0 = بلا حد) |
|
||||
| dpi | number | لا | `300` | دقة الإخراج DPI (72-1200) |
|
||||
| customWidthMm | number | لا | - | عرض الصورة المخصص بالمليمتر (يتجاوز مواصفات الدولة) |
|
||||
| customHeightMm | number | لا | - | ارتفاع الصورة المخصص بالمليمتر (يتجاوز مواصفات الدولة) |
|
||||
| zoom | number | لا | `1` | معامل التكبير (0.5-3). القيم > 1 تقص بشكل أضيق |
|
||||
| adjustX | number | لا | `0` | ضبط الموضع الأفقي |
|
||||
| adjustY | number | لا | `0` | ضبط الموضع الرأسي |
|
||||
| landmarks | object | نعم | - | كائن المعالم من استجابة المرحلة 1 |
|
||||
| imageWidth | number | نعم | - | عرض الصورة من استجابة المرحلة 1 |
|
||||
| imageHeight | number | نعم | - | ارتفاع الصورة من استجابة المرحلة 1 |
|
||||
|
||||
#### مثال على الطلب {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jobId": "a1b2c3d4-...",
|
||||
"filename": "headshot.jpg",
|
||||
"countryCode": "US",
|
||||
"documentType": "passport",
|
||||
"bgColor": "#FFFFFF",
|
||||
"printLayout": "4x6",
|
||||
"dpi": 300,
|
||||
"zoom": 1,
|
||||
"adjustX": 0,
|
||||
"adjustY": 0,
|
||||
"landmarks": { "leftEye": {"x":0.42,"y":0.35}, "rightEye": {"x":0.58,"y":0.35}, "eyeCenter": {"x":0.50,"y":0.35}, "chin": {"x":0.50,"y":0.65}, "forehead": {"x":0.50,"y":0.22}, "crown": {"x":0.50,"y":0.18}, "nose": {"x":0.50,"y":0.48}, "faceCenterX": 0.50 },
|
||||
"imageWidth": 2400,
|
||||
"imageHeight": 3200
|
||||
}'
|
||||
```
|
||||
|
||||
#### الاستجابة (200 OK) {#response-200-ok-1}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/headshot_passport.jpg",
|
||||
"dimensions": {
|
||||
"widthMm": 51,
|
||||
"heightMm": 51,
|
||||
"widthPx": 602,
|
||||
"heightPx": 602,
|
||||
"dpi": 300
|
||||
},
|
||||
"spec": {
|
||||
"country": "United States",
|
||||
"countryCode": "US",
|
||||
"documentType": "passport",
|
||||
"documentLabel": "Passport"
|
||||
},
|
||||
"printDownloadUrl": "/api/v1/download/{jobId}/headshot_passport_print_4x6.jpg"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### المسار الأساسي {#base-route}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo`
|
||||
|
||||
يُرجع إرشادات لاستخدام نقطة النهاية الفرعية الصحيحة.
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمتي النماذج `background-removal` و `face-detection`.
|
||||
- تُشغّل المرحلة 1 الذكاء الاصطناعي (معالم الوجه + إزالة الخلفية) وتخزّن النتائج مؤقتًا. المرحلة 2 هي معالجة صور خالصة عبر Sharp (سريعة، لا حاجة للذكاء الاصطناعي).
|
||||
- تُرجع المعالم كإحداثيات مُطبَّعة (نطاق 0-1 نسبةً إلى أبعاد الصورة).
|
||||
- حقل `preview` في استجابة التحليل هو صورة PNG مُرمَّزة بترميز base64 (أقصى عرض 800 بكسل) للعرض السريع.
|
||||
- تتضمن مواصفات الدول أبعاد المستند ونسب ارتفاع الرأس وتموضع خط العين استنادًا إلى المتطلبات الرسمية لصور جوازات السفر.
|
||||
- يولّد خيار `printLayout` ورقة مرتّبة على ورق مقاس 4x6 بوصة أو A4 مع فواصل بمقدار 2 مليمتر بين الصور.
|
||||
- عند ضبط `maxFileSizeKb`، يُضغط الإخراج بشكل تكراري ليناسب حد الحجم.
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
description: "تطبيق تأثير التبكسل على الصورة بالكامل أو على منطقة محددة."
|
||||
i18n_source_hash: a3ad29841f7b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e713378c97a7
|
||||
---
|
||||
|
||||
# التبكسل {#pixelate}
|
||||
|
||||
طبّق تأثير التبكسل على صورة كاملة أو على منطقة مستطيلة محددة. مفيد لإخفاء المحتوى الحساس مثل الوجوه أو لوحات المركبات أو المعلومات الشخصية.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/pixelate`
|
||||
|
||||
يقبل بيانات نموذج متعدد الأجزاء مع ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| blockSize | integer | لا | `12` | حجم كتلة البكسل (2-128)؛ القيم الأكبر تنتج تبكسلًا أخشن |
|
||||
| region | object | لا | - | تقييد التبكسل بمستطيل (انظر أدناه) |
|
||||
|
||||
### كائن المنطقة {#region-object}
|
||||
|
||||
| الحقل | النوع | مطلوب | الوصف |
|
||||
|-------|------|----------|-------------|
|
||||
| left | integer | نعم | الإزاحة اليسرى بالبكسل (>= 0) |
|
||||
| top | integer | نعم | الإزاحة العلوية بالبكسل (>= 0) |
|
||||
| width | integer | نعم | عرض المنطقة بالبكسل (>= 1) |
|
||||
| height | integer | نعم | ارتفاع المنطقة بالبكسل (>= 1) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
تبكسل الصورة بالكامل:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/pixelate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"blockSize": 20}'
|
||||
```
|
||||
|
||||
تبكسل منطقة محددة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/pixelate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"blockSize": 16, "region": {"left": 100, "top": 50, "width": 200, "height": 150}}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- عند حذف `region`، تُبكسل الصورة بالكامل.
|
||||
- إحداثيات المنطقة بالبكسل نسبةً إلى الركن العلوي الأيسر للصورة. يجب أن تقع المنطقة ضمن حدود الصورة.
|
||||
- تطابق صيغة الإخراج صيغة الإدخال. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
description: "توليد رموز QR بألوان مخصصة ومستويات تصحيح أخطاء."
|
||||
i18n_source_hash: 096ef4d90da5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: cd103feefcaa
|
||||
---
|
||||
|
||||
# مولّد رموز QR {#qr-code-generator}
|
||||
|
||||
ولّد صور رموز QR من نص أو روابط URL مع حجم قابل للتهيئة، ومستوى تصحيح أخطاء، وألوان مخصصة للمقدمة/الخلفية.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/qr-generate`
|
||||
|
||||
يقبل **جسم JSON** (وليس متعدد الأجزاء). لا حاجة لرفع ملف.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | نعم | - | المحتوى المراد ترميزه في رمز QR (1 إلى 2000 حرف) |
|
||||
| size | number | لا | `400` | عرض/ارتفاع صورة الإخراج بالبكسل (100 إلى 10000) |
|
||||
| errorCorrection | string | لا | `"M"` | مستوى تصحيح الأخطاء: `L` (7%)، `M` (15%)، `Q` (25%)، `H` (30%) |
|
||||
| foreground | string | لا | `"#000000"` | لون مقدمة/وحدات رمز QR بصيغة hex (`#RRGGBB`) |
|
||||
| background | string | لا | `"#FFFFFF"` | لون خلفية رمز QR بصيغة hex (`#RRGGBB`) |
|
||||
| logoDataUri | string | لا | - | صورة الشعار كـ data URI (`data:image/png;base64,...` أو `data:image/jpeg;base64,...`، أقصى 700 كيلوبايت). تُوسَّط على رمز QR بنسبة 22% من حجم الرمز. تفرض تصحيح الأخطاء على `H` |
|
||||
|
||||
### مستويات تصحيح الأخطاء {#error-correction-levels}
|
||||
|
||||
| المستوى | الاسترداد | حالة الاستخدام |
|
||||
|-------|----------|----------|
|
||||
| `L` | ~7% | أقصى كثافة بيانات |
|
||||
| `M` | ~15% | متوازن (افتراضي) |
|
||||
| `Q` | ~25% | جيد للرموز المطبوعة |
|
||||
| `H` | ~30% | الأفضل للرموز التي تحتوي على شعارات متراكبة |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/qr-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "https://snapotter.com", "size": 500, "errorCorrection": "H"}'
|
||||
```
|
||||
|
||||
رمز QR بعلامة تجارية مع ألوان مخصصة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/qr-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "Hello World", "size": 300, "foreground": "#1a365d", "background": "#f7fafc"}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/qrcode.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 4520
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تقبل هذه النقطة النهائية JSON وليس بيانات نموذج متعدد الأجزاء، إذ لا حاجة لرفع صورة.
|
||||
- الإخراج دائمًا صورة PNG.
|
||||
- اسم ملف الإخراج دائمًا `qrcode.png`.
|
||||
- `originalSize` دائمًا 0 لأن هذا الأداة يولّد الصور من الصفر.
|
||||
- تُضمَّن منطقة هادئة (هامش) بعرض وحدتين حول رمز QR.
|
||||
- أقصى طول للنص هو 2000 حرف. تعتمد السعة الفعلية على مستوى تصحيح الأخطاء وترميز الأحرف.
|
||||
- تتيح مستويات تصحيح الأخطاء الأعلى بقاء رمز QR قابلًا للمسح حتى لو حُجب جزئيًا، لكنها تقلل من سعة البيانات.
|
||||
- عند توفير `logoDataUri`، يُفرض تصحيح الأخطاء تلقائيًا على `H` (30%) بحيث يبقى رمز QR قابلًا للمسح رغم حجب الشعار للمركز.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "كشف وتصحيح العين الحمراء الناتجة عن فلاش الكاميرا مدعوم بالذكاء الاصطناعي."
|
||||
i18n_source_hash: 647c6ff1ef7c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b549adab4fa6
|
||||
---
|
||||
|
||||
# إزالة العين الحمراء {#red-eye-removal}
|
||||
|
||||
كشف وتصحيح العين الحمراء الناتجة عن فلاش الكاميرا مدعوم بالذكاء الاصطناعي.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/red-eye-removal`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `face-detection` (200-300 ميغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| sensitivity | number | لا | `50` | حساسية كشف العين الحمراء (0-100). القيم الأعلى تكشف احمرارًا أكثر دقة |
|
||||
| strength | number | لا | `70` | شدة التصحيح (0-100). مدى قوة تحييد الاحمرار |
|
||||
| format | string | لا | - | صيغة الإخراج (تجاوز اختياري) |
|
||||
| quality | number | لا | `90` | جودة الإخراج (1-100) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/red-eye-removal \
|
||||
-F "file=@flash-photo.jpg" \
|
||||
-F 'settings={"sensitivity":60,"strength":80}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Detecting red eyes...","percent":40}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/flash-photo_redeye_fixed.png",
|
||||
"originalSize": 280000,
|
||||
"processedSize": 290000,
|
||||
"facesDetected": 2,
|
||||
"eyesCorrected": 4
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `face-detection` (200-300 ميغابايت).
|
||||
- يكشف الوجوه أولًا، ثم يحدد مناطق العينين داخل كل وجه، وأخيرًا يحدد بكسلات العين الحمراء ويصححها.
|
||||
- يشير عدد `facesDetected` إلى عدد الوجوه التي عُثر عليها؛ و `eyesCorrected` هو إجمالي عدد العيون المفردة التي صُحِّح فيها الاحمرار.
|
||||
- الإخراج دائمًا PNG للحفاظ على أقصى جودة.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
description: "إزالة الخلفية المدعومة بالذكاء الاصطناعي مع تأثيرات اختيارية (تمويه، ظل، تدرّج، خلفية مخصصة)."
|
||||
i18n_source_hash: 326a91284529
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a3f56fd6f463
|
||||
---
|
||||
|
||||
# إزالة الخلفية {#remove-background}
|
||||
|
||||
إزالة الخلفية المدعومة بالذكاء الاصطناعي مع تأثيرات اختيارية (تمويه، ظل، تدرّج، خلفية مخصصة).
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/remove-background`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `background-removal` (4-5 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| model | string | لا | - | متغير نموذج الذكاء الاصطناعي المراد استخدامه |
|
||||
| backgroundType | string | لا | `"transparent"` | أحد الخيارات: `transparent`، `color`، `gradient`، `blur`، `image` |
|
||||
| backgroundColor | string | لا | - | لون hex للخلفية الصلبة |
|
||||
| gradientColor1 | string | لا | - | لون التدرّج الأول |
|
||||
| gradientColor2 | string | لا | - | لون التدرّج الثاني |
|
||||
| gradientAngle | number | لا | - | زاوية التدرّج بالدرجات |
|
||||
| blurEnabled | boolean | لا | - | تفعيل تأثير تمويه الخلفية |
|
||||
| blurIntensity | number | لا | - | شدة التمويه (0-100) |
|
||||
| shadowEnabled | boolean | لا | - | تفعيل الظل المُسقَط على الجسم |
|
||||
| shadowOpacity | number | لا | - | تعتيم الظل (0-100) |
|
||||
| outputFormat | string | لا | - | صيغة الإخراج: `png`، `webp`، أو `avif` |
|
||||
| edgeRefine | integer | لا | - | مستوى تنقيح الحواف (0-3) |
|
||||
| decontaminate | boolean | لا | - | إزالة تسرّب الألوان من الحواف |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/remove-background \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"backgroundType":"transparent","edgeRefine":2,"outputFormat":"png"}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Removing background...","percent":50}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_mask.png",
|
||||
"maskUrl": "/api/v1/download/{jobId}/photo_mask.png",
|
||||
"originalUrl": "/api/v1/download/{jobId}/photo_original.png",
|
||||
"originalSize": 245000,
|
||||
"processedSize": 180000,
|
||||
"filename": "photo.jpg",
|
||||
"model": "rembg"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## نقطة نهاية التأثيرات (المرحلة 2) {#effects-endpoint-phase-2}
|
||||
|
||||
`POST /api/v1/tools/image/remove-background/effects`
|
||||
|
||||
تُعيد تطبيق تأثيرات الخلفية دون إعادة تشغيل نموذج الذكاء الاصطناعي. تستخدم القناع والصورة الأصلية المخزّنين مؤقتًا من المرحلة 1.
|
||||
|
||||
### المعاملات {#parameters-1}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| settings | JSON | نعم | - | JSON مع إعدادات التأثيرات (انظر أدناه) |
|
||||
| backgroundImage | file | لا | - | صورة خلفية مخصصة (عندما يكون backgroundType هو `image`) |
|
||||
|
||||
#### حقول إعدادات JSON {#settings-json-fields}
|
||||
|
||||
| الحقل | النوع | مطلوب | الوصف |
|
||||
|-------|------|----------|-------------|
|
||||
| jobId | string | نعم | معرّف المهمة من المرحلة 1 |
|
||||
| filename | string | نعم | اسم الملف الأصلي من المرحلة 1 |
|
||||
| backgroundType | string | لا | `transparent`، `color`، `gradient`، `blur`، `image` |
|
||||
| backgroundColor | string | لا | لون hex للخلفية الصلبة |
|
||||
| gradientColor1 | string | لا | لون التدرّج الأول |
|
||||
| gradientColor2 | string | لا | لون التدرّج الثاني |
|
||||
| gradientAngle | number | لا | زاوية التدرّج بالدرجات |
|
||||
| blurEnabled | boolean | لا | تفعيل تمويه الخلفية |
|
||||
| blurIntensity | number | لا | شدة التمويه (0-100) |
|
||||
| shadowEnabled | boolean | لا | تفعيل الظل المُسقَط |
|
||||
| shadowOpacity | number | لا | تعتيم الظل (0-100) |
|
||||
| outputFormat | string | لا | `png`، `webp`، أو `avif` |
|
||||
|
||||
### مثال على الطلب {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/remove-background/effects \
|
||||
-F 'settings={"jobId":"a1b2c3d4-...","filename":"photo.jpg","backgroundType":"color","backgroundColor":"#FF5500","outputFormat":"png"}'
|
||||
```
|
||||
|
||||
### الاستجابة (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_nobg.png",
|
||||
"processedSize": 195000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `background-removal` (4-5 غيغابايت).
|
||||
- تخزّن المرحلة 1 القناع الشفاف والصورة الأصلية مؤقتًا بحيث يمكن للمرحلة 2 (التأثيرات) إعادة تطبيق خلفيات مختلفة فورًا دون إعادة تشغيل نموذج الذكاء الاصطناعي.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
- يُصحَّح دوران EXIF تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "استبدال لون معيّن في الصورة بلون آخر أو جعله شفافًا."
|
||||
i18n_source_hash: df55ac451ecb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f4ca5e9fef24
|
||||
---
|
||||
|
||||
# استبدال اللون وعكسه {#replace-invert-color}
|
||||
|
||||
استبدل البكسلات المطابقة للون مصدر بلون هدف، أو اجعلها شفافة. يستخدم المسافة الإقليدية في فضاء RGB مع تفاوت قابل للتهيئة لمزج سلس عند حدود الألوان.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/replace-color`
|
||||
|
||||
يقبل بيانات نموذج متعدد الأجزاء مع ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| sourceColor | string | لا | `"#FF0000"` | لون hex المراد العثور عليه (الصيغة: `#RRGGBB`) |
|
||||
| targetColor | string | لا | `"#00FF00"` | لون hex المراد الاستبدال به (الصيغة: `#RRGGBB`) |
|
||||
| makeTransparent | boolean | لا | `false` | جعل البكسلات المطابقة شفافة بدلًا من استبدالها بلون الهدف |
|
||||
| tolerance | number | لا | `30` | تفاوت مطابقة الألوان (0 إلى 255). القيم الأعلى تطابق نطاقًا أوسع من الألوان المتشابهة |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/replace-color \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"sourceColor": "#FF0000", "targetColor": "#0000FF", "tolerance": 40}'
|
||||
```
|
||||
|
||||
جعل خلفية خضراء شفافة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/replace-color \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@greenscreen.png" \
|
||||
-F 'settings={"sourceColor": "#00FF00", "makeTransparent": true, "tolerance": 50}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2100000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تستخدم مطابقة الألوان المسافة الإقليدية في فضاء RGB، مُقاسة بـ `tolerance * sqrt(3)`.
|
||||
- مزج الاستبدال يتناسب مع مسافة اللون: البكسلات الأقرب إلى لون المصدر تتلقى قدرًا أكبر من لون الهدف، مما يخلق انتقالات سلسة.
|
||||
- عندما يكون `makeTransparent` هو `true`، يُفرض الإخراج على PNG (أو WebP/AVIF) إذا كانت صيغة الإدخال لا تدعم قنوات ألفا (مثل JPEG).
|
||||
- التفاوت 0 يطابق لون المصدر بالضبط فقط. القيم الأعلى (50+) ستطابق نطاقًا أوسع من الدرجات المتشابهة.
|
||||
- تطابق صيغة الإخراج صيغة الإدخال ما لم تكن الشفافية مطلوبة وكانت صيغة الإدخال تفتقر إلى دعم ألفا.
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
description: "تغيير حجم الصور بالبكسل أو بالنسبة المئوية أو باستخدام أوضاع الملاءمة."
|
||||
i18n_source_hash: 00d1bffa4d38
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 303426ab1e7d
|
||||
---
|
||||
|
||||
# تغيير الحجم {#resize}
|
||||
|
||||
غيّر حجم الصور بتحديد أبعاد بكسل دقيقة، أو معامل قياس بالنسبة المئوية، أو وضع ملاءمة يتحكم في كيفية تكيّف الصورة مع الأبعاد المستهدفة.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/resize`
|
||||
|
||||
يقبل بيانات نموذج متعدد الأجزاء مع ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | لا | - | العرض المستهدف بالبكسل (أقصى 16383) |
|
||||
| height | integer | لا | - | الارتفاع المستهدف بالبكسل (أقصى 16383) |
|
||||
| fit | string | لا | `"contain"` | كيف تلائم الصورة الأبعاد: `contain`، `cover`، `fill`، `inside`، `outside` |
|
||||
| withoutEnlargement | boolean | لا | `false` | منع التكبير إذا كانت الصورة أصغر من الهدف |
|
||||
| percentage | number | لا | - | القياس بالنسبة المئوية (مثل 50 لنصف الحجم) |
|
||||
|
||||
يجب توفير واحد على الأقل من `width` أو `height` أو `percentage`.
|
||||
|
||||
### أوضاع الملاءمة {#fit-modes}
|
||||
|
||||
- **contain** - تغيير الحجم للملاءمة ضمن الأبعاد مع الحفاظ على نسبة العرض إلى الارتفاع (قد يترك مساحة فارغة)
|
||||
- **cover** - تغيير الحجم لتغطية الأبعاد مع الحفاظ على نسبة العرض إلى الارتفاع (قد يقص)
|
||||
- **fill** - التمدد لمطابقة الأبعاد بالضبط (يتجاهل نسبة العرض إلى الارتفاع)
|
||||
- **inside** - مثل `contain`، لكنه يُصغّر فقط ولا يُكبّر أبدًا
|
||||
- **outside** - مثل `cover`، لكنه يُصغّر فقط ولا يُكبّر أبدًا
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"width": 800, "height": 600, "fit": "contain"}'
|
||||
```
|
||||
|
||||
تغيير الحجم بالنسبة المئوية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"percentage": 50}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 980000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- أقصى بُعد هو 16383 بكسل على أي من المحورين (حد Sharp/libvips).
|
||||
- تطابق صيغة الإخراج صيغة الإدخال. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا قبل تغيير الحجم.
|
||||
- تُعد الراية `withoutEnlargement` مفيدة في المعالجة الدفعية حيث قد تكون بعض الصور أصغر بالفعل من الهدف.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "إصلاح الخدوش والتمزقات والتلف في الصور القديمة عبر خط ذكاء اصطناعي للترميم وتحسين الوجوه واللون."
|
||||
i18n_source_hash: 3de13284216c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e4d077a7a10e
|
||||
---
|
||||
|
||||
# ترميم الصور {#photo-restoration}
|
||||
|
||||
أصلح الخدوش والتمزقات والتلف في الصور القديمة باستخدام خط ذكاء اصطناعي متعدد الخطوات. يجمع بين إصلاح الخدوش وتحسين الوجوه وإزالة الضوضاء والتلوين الاختياري.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/restore-photo`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، استعلم عن `/api/v1/jobs/{jobId}/progress` لمعرفة الحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `photo-restoration` (4-5 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| scratchRemoval | boolean | لا | `true` | إزالة الخدوش وتلف السطح |
|
||||
| faceEnhancement | boolean | لا | `true` | تحسين الوجوه في الصورة المرمّمة |
|
||||
| fidelity | number | لا | `0.7` | دقة تحسين الوجه (0-1). القيم الأعلى تحافظ على الملامح الأصلية أكثر |
|
||||
| denoise | boolean | لا | `true` | تطبيق إزالة الضوضاء على النتيجة المرمّمة |
|
||||
| denoiseStrength | number | لا | `25` | شدة إزالة الضوضاء (0-100) |
|
||||
| colorize | boolean | لا | `false` | تلوين الصورة المرمّمة (للصور بتدرّج الرمادي) |
|
||||
| colorizeStrength | number | لا | `85` | شدة التلوين (0-100) |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/restore-photo \
|
||||
-F "file=@damaged-old-photo.jpg" \
|
||||
-F 'settings={"scratchRemoval":true,"faceEnhancement":true,"fidelity":0.6,"colorize":true}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Removing scratches...","percent":30}
|
||||
```
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/damaged-old-photo_restored.jpg",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 200000,
|
||||
"processedSize": 350000,
|
||||
"width": 1200,
|
||||
"height": 900,
|
||||
"steps": ["scratch_removal", "face_enhancement", "denoise", "colorize"],
|
||||
"scratchCoverage": 12.5,
|
||||
"facesEnhanced": 2,
|
||||
"isGrayscale": true,
|
||||
"colorized": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `photo-restoration` (4-5 غيغابايت).
|
||||
- يُشغّل الخط خطوات ذكاء اصطناعي متعددة بالتتابع: إصلاح الخدوش، وتحسين الوجوه (GFPGAN)، وإزالة الضوضاء، والتلوين اختياريًا.
|
||||
- تُظهر مصفوفة `steps` في النتيجة خطوات المعالجة التي نُفِّذت فعليًا.
|
||||
- `scratchCoverage` هو نسبة مئوية مقدَّرة من مساحة الصورة التي بها تلف بالخدوش.
|
||||
- يتحكم `fidelity` في مدى قوة تحسين الوجوه مقابل الحفاظ على المظهر الأصلي. القيم الأدنى تنتج تحسينًا أكثر قوة؛ والقيم الأعلى أكثر تحفظًا.
|
||||
- يكتشف خيار `colorize` تلقائيًا ما إذا كانت الصورة بتدرّج الرمادي. تؤكد الراية `isGrayscale` في النتيجة هذا الاكتشاف.
|
||||
- تطابق صيغة الإخراج صيغة الإدخال تلقائيًا.
|
||||
- يدعم صيغ الإدخال HEIC/HEIF وRAW وTGA وPSD وEXR وHDR وAVIF عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "تدوير الصور بأي زاوية وقلبها أفقيًا أو رأسيًا."
|
||||
i18n_source_hash: af2581d7cd8d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 76d43088396b
|
||||
---
|
||||
|
||||
# التدوير والقلب {#rotate-flip}
|
||||
|
||||
دوّر الصور بزاوية اختيارية و/أو اقلبها أفقيًا أو رأسيًا. يمكن دمج عمليات التدوير والقلب في طلب واحد.
|
||||
|
||||
## نقطة نهاية الـ API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/rotate`
|
||||
|
||||
يقبل بيانات نموذج متعدد الأجزاء مع ملف صورة وحقل JSON باسم `settings`.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| angle | number | لا | `0` | زاوية التدوير بالدرجات (باتجاه عقارب الساعة). تقبل أي قيمة عددية. |
|
||||
| horizontal | boolean | لا | `false` | قلب الصورة أفقيًا (مرآة) |
|
||||
| vertical | boolean | لا | `false` | قلب الصورة رأسيًا |
|
||||
|
||||
## مثال على الطلب {#example-request}
|
||||
|
||||
التدوير 90 درجة باتجاه عقارب الساعة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"angle": 90}'
|
||||
```
|
||||
|
||||
القلب أفقيًا:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"horizontal": true}'
|
||||
```
|
||||
|
||||
التدوير والقلب معًا:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"angle": 45, "vertical": true}'
|
||||
```
|
||||
|
||||
## مثال على الاستجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2480000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يُطبَّق التدوير أولًا، ثم عمليات القلب.
|
||||
- عمليات التدوير غير المضاعفة لـ 90 درجة (مثل 45 درجة) ستوسّع اللوحة لتناسب الصورة المدوّرة، مع تعبئة شفافة أو سوداء تبعًا لصيغة الإخراج.
|
||||
- القيم الشائعة: 90 و180 و270 للتدويرات بمقدار ربع دورة.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا قبل المعالجة، لذا يكون التدوير نسبةً إلى الاتجاه المرئي.
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "زيادة حدة الصور باستخدام طرق التكيف أو قناع إلغاء الحدة أو الترشيح عالي التمرير مع خفض اختياري للضوضاء."
|
||||
i18n_source_hash: ccb60af9faae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4545c1bf0c38
|
||||
---
|
||||
|
||||
# زيادة الحدة {#sharpening}
|
||||
|
||||
أداة متقدمة لزيادة الحدة بثلاث طرق: التكيف (إدراك ذكي للحواف)، وقناع إلغاء الحدة (نصف قطر/مقدار كلاسيكي)، والترشيح عالي التمرير (إبراز الملمس). تتضمن خفضًا مدمجًا للضوضاء لمنع نشوء تشوهات ناتجة عن زيادة الحدة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/sharpening`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| method | string | لا | `"adaptive"` | خوارزمية زيادة الحدة: `adaptive`، `unsharp-mask`، `high-pass` |
|
||||
| sigma | number | لا | `1.0` | التكيف: سيغما غاوس (0.5 إلى 10) |
|
||||
| m1 | number | لا | `1.0` | التكيف: زيادة حدة المناطق المسطحة (0 إلى 10) |
|
||||
| m2 | number | لا | `3.0` | التكيف: زيادة حدة المناطق المسننة (0 إلى 20) |
|
||||
| x1 | number | لا | `2.0` | التكيف: عتبة المسطح/المسنن (0 إلى 10) |
|
||||
| y2 | number | لا | `12` | التكيف: أقصى زيادة حدة للمسطح (0 إلى 50) |
|
||||
| y3 | number | لا | `20` | التكيف: أقصى زيادة حدة للمسنن (0 إلى 50) |
|
||||
| amount | number | لا | `100` | قناع إلغاء الحدة: مقدار زيادة الحدة (0 إلى 1000) |
|
||||
| radius | number | لا | `1.0` | قناع إلغاء الحدة: نصف قطر التمويه بالبكسل (0.1 إلى 5) |
|
||||
| threshold | number | لا | `0` | قناع إلغاء الحدة: أدنى فرق سطوع لتطبيق زيادة الحدة (0 إلى 255) |
|
||||
| strength | number | لا | `50` | عالي التمرير: قوة المرشح (0 إلى 100) |
|
||||
| kernelSize | number | لا | `3` | عالي التمرير: حجم نواة الالتفاف (3 أو 5) |
|
||||
| denoise | string | لا | `"off"` | خفض الضوضاء قبل زيادة الحدة: `off`، `light`، `medium`، `strong` |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sharpening \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"method": "adaptive", "sigma": 1.5}'
|
||||
```
|
||||
|
||||
قناع إلغاء الحدة مع عتبة لحماية المناطق الناعمة:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sharpening \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"method": "unsharp-mask", "amount": 150, "radius": 1.5, "threshold": 10}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2510000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- لا تُستخدم إلا المعاملات ذات الصلة بالطريقة المختارة. على سبيل المثال، يجري تجاهل `amount` و`radius` و`threshold` عندما تكون `method` هي `adaptive`.
|
||||
- تستخدم طريقة التكيف زيادة الحدة التكيفية المدمجة في Sharp مع سلوك قابل للتهيئة للمناطق المسطحة/المسننة.
|
||||
- يطبّق خيار `denoise` خفض الضوضاء قبل زيادة الحدة لمنع تضخيم الضوضاء/التحبب.
|
||||
- تستخرج زيادة الحدة عالية التمرير التفاصيل الدقيقة بطرح نسخة مموّهة من الأصل ثم دمجها مرة أخرى.
|
||||
- تطابق صيغة المخرجات صيغة المدخلات. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "اقتصاص مدرك للموضوع والوجوه والإنتروبيا يؤطّر الصور بذكاء باستخدام Sharp واكتشاف الوجوه بالذكاء الاصطناعي."
|
||||
i18n_source_hash: acbe1439c6d8
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 91a94bb5e580
|
||||
---
|
||||
|
||||
# الاقتصاص الذكي {#smart-crop}
|
||||
|
||||
اقتصاص ذكي مدرك للموضوع أو الوجوه أو قائم على القص. يستخدم استراتيجيات الانتباه/الإنتروبيا في Sharp واكتشاف الوجوه بالذكاء الاصطناعي للتأطير الذكي.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/smart-crop`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، مع استقصاء `/api/v1/jobs/{jobId}/progress` للحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `face-detection` (200-300 ميغابايت) - مطلوبة فقط لوضع `face`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| mode | string | لا | `"subject"` | وضع الاقتصاص: `subject`، `face`، `trim`. (تُربط القيمتان القديمتان `attention` و`content` بـ `subject` و`trim`) |
|
||||
| strategy | string | لا | `"attention"` | استراتيجية وضع الموضوع: `attention` أو `entropy` |
|
||||
| width | integer | لا | - | العرض المستهدف بالبكسل |
|
||||
| height | integer | لا | - | الارتفاع المستهدف بالبكسل |
|
||||
| padding | integer | لا | `0` | نسبة الحشو حول الموضوع (0-50) |
|
||||
| facePreset | string | لا | `"head-shoulders"` | إعداد تأطير الوجه المسبق: `closeup`، `head-shoulders`، `upper-body`، `half-body` |
|
||||
| sensitivity | number | لا | `0.5` | حساسية اكتشاف الوجوه (0-1) |
|
||||
| threshold | integer | لا | `30` | عتبة وضع القص لاكتشاف الخلفية (0-255) |
|
||||
| padToSquare | boolean | لا | `false` | حشو الناتج المقصوص ليصبح مربعًا |
|
||||
| padColor | string | لا | `"#ffffff"` | لون الخلفية للحشو |
|
||||
| targetSize | integer | لا | - | الحجم المستهدف للمخرجات المحشوة (بالبكسل) |
|
||||
| quality | integer | لا | - | جودة المخرجات (1-100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/smart-crop \
|
||||
-F "file=@portrait.jpg" \
|
||||
-F 'settings={"mode":"face","width":1080,"height":1080,"facePreset":"head-shoulders"}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","percent":50}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/portrait_smartcrop.jpg",
|
||||
"originalSize": 500000,
|
||||
"processedSize": 320000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## الأوضاع {#modes}
|
||||
|
||||
### وضع الموضوع {#subject-mode}
|
||||
يستخدم استراتيجية الانتباه أو الإنتروبيا في Sharp لإيجاد المنطقة الأكثر إثارة للاهتمام بصريًا ويقتص حولها.
|
||||
|
||||
### وضع الوجه {#face-mode}
|
||||
يكتشف الوجوه باستخدام الذكاء الاصطناعي، ثم يؤطّر الاقتصاص حول الوجوه المكتشفة باستخدام `facePreset` المحدد. يعود إلى وضع الموضوع (استراتيجية الانتباه) إذا لم يُكتشف أي وجه.
|
||||
|
||||
### وضع القص {#trim-mode}
|
||||
يزيل الحدود/الخلفية المنتظمة من الصورة. يحشو الناتج اختياريًا ليصبح مربعًا بلون خلفية وحجم مستهدف محددين.
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تستخدم هذه الأداة مصنع `createToolRoute` مع `executionHint: "long"`، لذا تُرجع 202 مع تقدّم SSE.
|
||||
- يتطلب وضع الوجه حزمة النموذج `face-detection` (200-300 ميغابايت).
|
||||
- يعمل وضعا الموضوع والقص دون أي حزمة نموذج للذكاء الاصطناعي.
|
||||
- يحدد `facePreset` مدى إحكام تأطير الاقتصاص للوجوه المكتشفة: `closeup` هو الأكثر إحكامًا، و`half-body` هو الأوسع.
|
||||
- إذا لم يُحدد عرض/ارتفاع، فسيكون الافتراضي 1080x1080.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "تقسيم صورة واحدة إلى بلاطات شبكية حسب عدد الصفوف والأعمدة أو حسب الحجم بالبكسل، وإرجاعها كأرشيف ZIP."
|
||||
i18n_source_hash: 57a2e11e7cce
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 75b8145cb271
|
||||
---
|
||||
|
||||
# تقسيم الصورة {#image-splitting}
|
||||
|
||||
قسّم صورة واحدة إلى بلاطات شبكية حسب عدد الأعمدة/الصفوف أو حسب أبعاد بكسل محددة. تُرجع أرشيف ZIP يحتوي على جميع البلاطات.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/split`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| columns | integer | لا | 3 | عدد الأعمدة المراد التقسيم إليها (1 إلى 100) |
|
||||
| rows | integer | لا | 3 | عدد الصفوف المراد التقسيم إليها (1 إلى 100) |
|
||||
| tileWidth | integer | لا | - | عرض البلاطة بالبكسل (10 كحد أدنى). يتجاوز `columns` عند ضبط كل من `tileWidth` و`tileHeight`. |
|
||||
| tileHeight | integer | لا | - | ارتفاع البلاطة بالبكسل (10 كحد أدنى). يتجاوز `rows` عند ضبط كل من `tileWidth` و`tileHeight`. |
|
||||
| outputFormat | string | لا | `"original"` | صيغة مخرجات البلاطات: `original`، `png`، `jpg`، `webp`، `avif`، `jxl` |
|
||||
| quality | number | لا | 90 | جودة المخرجات للصيغ ذات الفقد (1 إلى 100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/split \
|
||||
-F "file=@large-image.png" \
|
||||
-F 'settings={"columns":3,"rows":3,"outputFormat":"png"}' \
|
||||
--output split-tiles.zip
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
تُبثّ الاستجابة مباشرة كملف ZIP مع `Content-Type: application/zip`. يتبع اسم الملف النمط `split-<jobId>.zip`.
|
||||
|
||||
كل بلاطة داخل الـ ZIP تُسمى `<originalBaseName>_r<row>_c<col>.<ext>` (مثل `photo_r1_c1.png`، `photo_r2_c3.webp`).
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تقبل ملف صورة واحدًا.
|
||||
- تدعم صيغ المدخلات HEIC وRAW وPSD وSVG (تُفكّ ترميزاتها تلقائيًا).
|
||||
- عند توفير كل من `tileWidth` و`tileHeight`، فإنهما يأخذان الأولوية على `columns`/`rows`. تُحسب أبعاد الشبكة كـ `ceil(imageWidth / tileWidth)` و`ceil(imageHeight / tileHeight)`.
|
||||
- قد تكون بلاطات الحواف (العمود الأيمن، الصف السفلي) أصغر من حجم البلاطة المحدد إذا لم تكن أبعاد الصورة قابلة للقسمة بالتساوي.
|
||||
- الحد الأقصى لحجم الشبكة مقيّد بـ 100x100 (10,000 بلاطة).
|
||||
- تبثّ الاستجابة ملف الـ ZIP مباشرة، لذا لا يوجد جسم استجابة بصيغة JSON. استخدم `--output` مع curl لحفظ الملف.
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
description: "دمج عدة صور في شبكة ورقة تجميع واحدة مع بيانات وصفية للإطارات."
|
||||
i18n_source_hash: 1938d7fb100d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5d0715fabc41
|
||||
---
|
||||
|
||||
# ورقة التجميع {#sprite-sheet}
|
||||
|
||||
ادمج عدة صور في شبكة ورقة تجميع واحدة. يُعاد تحجيم كل صورة لتطابق أبعاد الصورة الأولى وتوضع في الشبكة. تُرجع صورة ورقة التجميع مع بيانات وصفية لإحداثيات كل إطار.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/sprite-sheet`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على صورتين أو أكثر وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| columns | integer | لا | `4` | عدد الأعمدة في الشبكة (1-16) |
|
||||
| padding | integer | لا | `0` | الحشو بين الخلايا بالبكسل (0-64) |
|
||||
| background | string | لا | `"#ffffff"` | لون الخلفية بصيغة hex |
|
||||
| format | string | لا | `"png"` | صيغة المخرجات: `png`، `webp`، أو `jpeg` |
|
||||
| quality | integer | لا | `90` | جودة المخرجات (1-100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sprite-sheet \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@frame1.png" \
|
||||
-F "file=@frame2.png" \
|
||||
-F "file=@frame3.png" \
|
||||
-F "file=@frame4.png" \
|
||||
-F 'settings={"columns": 2, "padding": 4, "format": "png"}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/sprite-sheet.png",
|
||||
"originalSize": 120000,
|
||||
"processedSize": 95000,
|
||||
"frames": [
|
||||
{ "index": 0, "left": 0, "top": 0, "width": 128, "height": 128 },
|
||||
{ "index": 1, "left": 132, "top": 0, "width": 128, "height": 128 },
|
||||
{ "index": 2, "left": 0, "top": 132, "width": 128, "height": 128 },
|
||||
{ "index": 3, "left": 132, "top": 132, "width": 128, "height": 128 }
|
||||
],
|
||||
"cols": 2,
|
||||
"rows": 2,
|
||||
"cellWidth": 128,
|
||||
"cellHeight": 128,
|
||||
"canvasWidth": 260,
|
||||
"canvasHeight": 260
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تقبل من 2 إلى 64 صورة. يُعاد تحجيم جميع الصور لتطابق أبعاد الصورة الأولى المرفوعة.
|
||||
- يوفّر مصفوف `frames` إحداثيات البكسل الدقيقة لكل إطار في المخرجات، وهي مناسبة لتعريفات sprite في CSS أو خرائط إطارات محركات الألعاب.
|
||||
- يُحسب عدد الصفوف تلقائيًا من عدد الصور وقيمة `columns`.
|
||||
- استخدم معامل `padding` لإضافة تباعد بين الخلايا. يظهر لون `background` في مناطق الحشو وأي خلايا لاحقة فارغة.
|
||||
- تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
description: "ضمّ الصور جنبًا إلى جنب أو متراكمة أو في شبكة مع التحكم في المحاذاة والفجوات والحدود ووضع إعادة التحجيم."
|
||||
i18n_source_hash: 39333210505a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c659ad48aa50
|
||||
---
|
||||
|
||||
# الخياطة / الدمج {#stitch-combine}
|
||||
|
||||
اضمم عدة صور جنبًا إلى جنب أو متراكمة عموديًا أو مرتّبة في شبكة. يدعم المحاذاة والفجوة والحدود ونصف قطر الزوايا وعدة أوضاع لإعادة التحجيم.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/stitch`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| direction | string | لا | `"horizontal"` | اتجاه التخطيط: `horizontal`، `vertical`، `grid` |
|
||||
| gridColumns | integer | لا | 2 | عدد الأعمدة عندما يكون الاتجاه `grid` (2 إلى 100) |
|
||||
| resizeMode | string | لا | `"fit"` | كيفية إعادة تحجيم الصور: `fit`، `original`، `stretch`، `crop` |
|
||||
| alignment | string | لا | `"center"` | المحاذاة عبر المحور المتقاطع: `start`، `center`، `end` |
|
||||
| gap | number | لا | 0 | الفجوة بين الصور بالبكسل (0 إلى 1000) |
|
||||
| border | number | لا | 0 | عرض الحد الخارجي بالبكسل (0 إلى 500) |
|
||||
| cornerRadius | number | لا | 0 | نصف قطر الزوايا المطبّق على المخرجات النهائية (0 إلى 500) |
|
||||
| backgroundColor | string | لا | `"#FFFFFF"` | لون الخلفية/الحد بصيغة hex (مثل `#FF0000`) |
|
||||
| format | string | لا | `"png"` | صيغة المخرجات: `png`، `jpeg`، `webp`، `avif`، `jxl` |
|
||||
| quality | number | لا | 90 | جودة المخرجات (1 إلى 100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/stitch \
|
||||
-F "file=@image1.png" \
|
||||
-F "file=@image2.png" \
|
||||
-F "file=@image3.png" \
|
||||
-F 'settings={"direction":"horizontal","resizeMode":"fit","gap":10,"backgroundColor":"#FFFFFF","format":"png"}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/stitch.png",
|
||||
"originalSize": 1234567,
|
||||
"processedSize": 987654
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب صورتين على الأقل. ارفع عدة ملفات صور في الطلب متعدد الأجزاء.
|
||||
- يدعم صيغ المدخلات HEIC وRAW وPSD وSVG (تُفكّ ترميزاتها تلقائيًا).
|
||||
- أوضاع إعادة التحجيم:
|
||||
- `fit` - تحجيم الصور لتطابق أصغر بُعد على طول محور الضم.
|
||||
- `original` - الإبقاء على الأحجام الأصلية (قد ينتج عنه حواف غير متساوية).
|
||||
- `stretch` - إجبار الصور على مطابقة أصغر بُعد دون الحفاظ على نسبة الأبعاد.
|
||||
- `crop` - اقتصاص تغطية للصور لتطابق أصغر بُعد.
|
||||
- في وضع `grid`، تُحدد أحجام الخلايا وفق الأبعاد الوسيطة لجميع الصور.
|
||||
- يُطبّق `cornerRadius` على كامل المخرجات النهائية، وليس على الصور الفردية.
|
||||
- حجم القماش محدود بتهيئة الخادم `MAX_CANVAS_PIXELS` لمنع استنفاد الذاكرة.
|
||||
@@ -0,0 +1,113 @@
|
||||
---
|
||||
description: "إزالة بيانات EXIF وGPS وICC وXMP الوصفية من الصور من أجل الخصوصية وتصغير أحجام الملفات."
|
||||
i18n_source_hash: e89147734fd0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0ae6fb6a5ae7
|
||||
---
|
||||
|
||||
# إزالة البيانات الوصفية {#remove-metadata}
|
||||
|
||||
أزل بيانات EXIF وGPS وملفات ألوان ICC وبيانات XMP الوصفية من الصور. مفيد للخصوصية (إزالة إحداثيات GPS ومعلومات الكاميرا) وتقليل حجم الملف.
|
||||
|
||||
## نقاط نهاية API {#api-endpoints}
|
||||
|
||||
### إزالة البيانات الوصفية {#strip-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/strip-metadata`
|
||||
|
||||
يعالج الصورة ويُرجع نسخة نظيفة مع إزالة البيانات الوصفية المحددة.
|
||||
|
||||
### فحص البيانات الوصفية {#inspect-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/strip-metadata/inspect`
|
||||
|
||||
يُرجع البيانات الوصفية المحللة بصيغة JSON دون تعديل الصورة. مفيد لمعاينة البيانات الوصفية الموجودة قبل إزالتها.
|
||||
|
||||
## المعاملات (الإزالة) {#parameters-strip}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| stripExif | boolean | لا | `false` | إزالة بيانات EXIF (إعدادات الكاميرا، التواريخ، إلخ) |
|
||||
| stripGps | boolean | لا | `false` | إزالة بيانات GPS/الموقع فقط |
|
||||
| stripIcc | boolean | لا | `false` | إزالة ملف ألوان ICC |
|
||||
| stripXmp | boolean | لا | `false` | إزالة بيانات XMP الوصفية (Adobe، IPTC) |
|
||||
| stripAll | boolean | لا | `true` | إزالة كل البيانات الوصفية دفعة واحدة |
|
||||
|
||||
عندما تكون `stripAll` هي `true`، فإنها تتجاوز الأعلام الفردية وتزيل كل شيء.
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
إزالة كل البيانات الوصفية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"stripAll": true}'
|
||||
```
|
||||
|
||||
إزالة بيانات GPS فقط (مع الاحتفاظ بمعلومات الكاميرا وملف الألوان):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"stripAll": false, "stripGps": true}'
|
||||
```
|
||||
|
||||
فحص البيانات الوصفية دون تعديل:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata/inspect \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## مثال استجابة (الإزالة) {#example-response-strip}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## مثال استجابة (الفحص) {#example-response-inspect}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"fileSize": 2450000,
|
||||
"exif": {
|
||||
"Make": "Canon",
|
||||
"Model": "EOS R5",
|
||||
"DateTimeOriginal": "2024:03:15 14:30:00",
|
||||
"ExposureTime": "1/250",
|
||||
"FNumber": 2.8,
|
||||
"ISO": 400
|
||||
},
|
||||
"gps": {
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLatitude": [37, 46, 30],
|
||||
"_latitude": 37.775,
|
||||
"_longitude": -122.4183
|
||||
},
|
||||
"icc": {
|
||||
"Profile Size": "3144 bytes",
|
||||
"Color Space": "RGB",
|
||||
"Description": "sRGB IEC61966-2.1"
|
||||
},
|
||||
"xmp": {
|
||||
"CreatorTool": "Adobe Photoshop 25.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تُعاد ترميز الصورة بصيغتها الأصلية بعد الإزالة. يستخدم JPEG محرك mozjpeg بجودة 90، وPNG يستخدم مستوى الضغط 9، وWebP يستخدم جودة 85.
|
||||
- قد تؤدي إزالة ملفات ICC إلى انزياحات لونية طفيفة إذا كانت الصورة موسومة بملف غير sRGB. استخدم `stripIcc: false` إذا كانت دقة الألوان مهمة.
|
||||
- تحلل نقطة نهاية الفحص إحداثيات GPS إلى قيم عشرية لخط العرض/الطول (مسبوقة بشرطة سفلية) للتيسير.
|
||||
- صيغ المدخلات المدعومة: JPEG، PNG، WebP، AVIF، TIFF، GIF.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "تحويل ملفات SVG إلى PNG أو JPEG أو WebP أو AVIF أو TIFF أو GIF أو HEIF أو JXL بدقة وكثافة DPI مخصصة، مع دعم الدفعات."
|
||||
i18n_source_hash: cf36830f8797
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3d64f5b26344
|
||||
---
|
||||
|
||||
# SVG إلى صورة نقطية {#svg-to-raster}
|
||||
|
||||
حوّل ملفات SVG إلى صيغ صور نقطية (PNG أو JPEG أو WebP أو AVIF أو TIFF أو GIF أو HEIF أو JXL) بدقة وكثافة DPI مخصصة. يدعم أيضًا التحويل الدفعي لعدة ملفات SVG.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/svg-to-raster`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | لا | - | العرض المستهدف بالبكسل (1 إلى 65536). يحافظ على نسبة الأبعاد إذا ضُبط بُعد واحد فقط. |
|
||||
| height | integer | لا | - | الارتفاع المستهدف بالبكسل (1 إلى 65536). يحافظ على نسبة الأبعاد إذا ضُبط بُعد واحد فقط. |
|
||||
| dpi | integer | لا | 300 | كثافة DPI للتصيير، تتحكم في كثافة التنقيط الأساسية (36 إلى 2400) |
|
||||
| quality | number | لا | 90 | جودة المخرجات للصيغ ذات الفقد (1 إلى 100) |
|
||||
| backgroundColor | string | لا | `"#00000000"` | لون الخلفية بصيغة hex (6 أو 8 أحرف، النسخة ذات 8 أحرف تتضمن الشفافية) |
|
||||
| outputFormat | string | لا | `"png"` | صيغة المخرجات: `png`، `jpg`، `webp`، `avif`، `tiff`، `gif`، `heif`، `jxl` |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/svg-to-raster \
|
||||
-F "file=@logo.svg" \
|
||||
-F 'settings={"width":1024,"dpi":300,"outputFormat":"png","backgroundColor":"#FFFFFF"}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.png",
|
||||
"previewUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/preview.webp",
|
||||
"originalSize": 12345,
|
||||
"processedSize": 67890
|
||||
}
|
||||
```
|
||||
|
||||
## نقطة نهاية الدفعات {#batch-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/svg-to-raster/batch`
|
||||
|
||||
حوّل عدة ملفات SVG في طلب واحد. تُرجع أرشيف ZIP.
|
||||
|
||||
### معاملات دفعات إضافية {#additional-batch-parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| clientJobId | string | لا | - | معرّف مهمة اختياري يوفّره العميل لتتبع التقدّم (128 حرفًا كحد أقصى) |
|
||||
|
||||
### مثال طلب دفعي {#batch-example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/svg-to-raster/batch \
|
||||
-F "file=@icon1.svg" \
|
||||
-F "file=@icon2.svg" \
|
||||
-F "file=@icon3.svg" \
|
||||
-F 'settings={"width":512,"outputFormat":"png","dpi":150}'
|
||||
```
|
||||
|
||||
### استجابة الدفعات {#batch-response}
|
||||
|
||||
تبثّ نقطة نهاية الدفعات ملف ZIP مباشرة مع الترويسات التالية:
|
||||
- `Content-Type: application/zip`
|
||||
- `X-Job-Id: <jobId>`
|
||||
- `X-File-Results: <url-encoded JSON mapping of index to filename>`
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تقبل ملفات SVG وSVGZ فقط (تتحقق من المحتوى، وليس من الامتداد فقط). تُفكّ ضغط SVGZ تلقائيًا.
|
||||
- يُطهّر محتوى SVG قبل التصيير لمنع XSS وتحميل الموارد الخارجية.
|
||||
- يتحكم إعداد `dpi` في الكثافة التي يُنقّط بها SVG. تنتج كثافة DPI الأعلى أبعاد بكسل أكبر من نفس منفذ عرض SVG.
|
||||
- عند توفير كل من `width` و`height`، يُعاد تحجيم الصورة باستخدام `fit: inside` (مع الحفاظ على نسبة الأبعاد ضمن الحدود).
|
||||
- تُضمَّن `previewUrl` في الاستجابة للصيغ التي لا تستطيع المتصفحات عرضها أصليًا (TIFF، HEIF). المعاينة هي صورة مصغّرة WebP بحجم 1200 بكسل.
|
||||
- الخلفية الافتراضية `#00000000` شفافة تمامًا. اضبطها إلى `#FFFFFF` للحصول على خلفية بيضاء (مفيد مع مخرجات JPEG التي لا تدعم الشفافية).
|
||||
- تحترم معالجة الدفعات تهيئة الخادم `MAX_BATCH_SIZE` وتستخدم عمّالًا متزامنين لتحسين الأداء.
|
||||
- يمكن تتبع تقدّم عمليات الدفعات عبر SSE على `/api/v1/jobs/:jobId/progress`.
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
description: "إضافة تراكبات نصية منسّقة مع ظلال ساقطة وصناديق خلفية."
|
||||
i18n_source_hash: 9f8e697188fc
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: dfff166544c2
|
||||
---
|
||||
|
||||
# تراكب النص {#text-overlay}
|
||||
|
||||
أضف نصًا منسّقًا إلى الصور مع ظل ساقط اختياري وصندوق خلفية شبه شفاف. مناسب للعناوين أو التعليقات أو الشروح على الصور.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/text-overlay`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | نعم | - | النص المراد تراكبه (1 إلى 500 حرف) |
|
||||
| fontSize | number | لا | `48` | حجم الخط بالبكسل (8 إلى 200) |
|
||||
| color | string | لا | `"#FFFFFF"` | لون النص بصيغة hex (`#RRGGBB`) |
|
||||
| position | string | لا | `"bottom"` | الموضع العمودي: `top`، `center`، `bottom` |
|
||||
| backgroundBox | boolean | لا | `false` | إظهار مستطيل خلفية شبه شفاف خلف النص |
|
||||
| backgroundColor | string | لا | `"#000000"` | لون صندوق الخلفية بصيغة hex (`#RRGGBB`) |
|
||||
| shadow | boolean | لا | `true` | تطبيق ظل ساقط خلف النص |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/text-overlay \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "Hello World", "fontSize": 64, "color": "#FFFFFF", "position": "bottom", "shadow": true}'
|
||||
```
|
||||
|
||||
مع صندوق خلفية:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/text-overlay \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "Caption", "fontSize": 36, "position": "bottom", "backgroundBox": true, "backgroundColor": "#000000"}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2470000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يُوسَّط النص دائمًا أفقيًا داخل الصورة.
|
||||
- يستخدم الظل الساقط إزاحة 2 بكسل مع تمويه 3 بكسل وعتامة سوداء بنسبة 70%.
|
||||
- يمتد صندوق الخلفية على كامل عرض الصورة بعتامة 70%، وبارتفاع متناسب مع حجم الخط (1.8 مرة).
|
||||
- يُصيَّر النص عبر تركيب SVG، لذا يُستخدم خط sans-serif الافتراضي للنظام.
|
||||
- تُهرَّب الأحرف الخاصة بـ XML في النص بأمان.
|
||||
- تطابق صيغة المخرجات صيغة المدخلات. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
description: "إصلاح ملفات PNG الشفافة الزائفة بالمطّ بالذكاء الاصطناعي (BiRefNet) لإنتاج شفافية حقيقية، مع تنظيف حواف بإزالة الأطراف."
|
||||
i18n_source_hash: 7eb748b80f93
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3956e0e60365
|
||||
---
|
||||
|
||||
# مصلح شفافية PNG {#png-transparency-fixer}
|
||||
|
||||
أصلح ملفات PNG الشفافة الزائفة بنقرة واحدة. يستخدم المطّ بالذكاء الاصطناعي (نموذج BiRefNet HR Matting) لإنتاج شفافية ألفا حقيقية، مع معالجة لاحقة لإزالة الأطراف لتنظيف الحواف.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/transparency-fixer`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، مع استقصاء `/api/v1/jobs/{jobId}/progress` للحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `background-removal` (4-5 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| defringe | number | لا | `30` | شدة إزالة الأطراف (0-100). يزيل بكسلات الأطراف شبه الشفافة حول الحواف |
|
||||
| outputFormat | string | لا | `"png"` | صيغة المخرجات: `png` أو `webp` |
|
||||
| removeWatermark | boolean | لا | `false` | تطبيق معالجة مسبقة لإزالة العلامة المائية (مرشح وسيط) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/transparency-fixer \
|
||||
-F "file=@fake-transparent.png" \
|
||||
-F 'settings={"defringe":40,"outputFormat":"png"}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Processing transparency...","percent":50}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/fake-transparent_fixed.png",
|
||||
"originalSize": 180000,
|
||||
"processedSize": 150000,
|
||||
"filename": "fake-transparent.png"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `background-removal` (4-5 غيغابايت).
|
||||
- يستخدم `birefnet-hr-matting` كنموذج أساسي لمطّ ألفا عالي الجودة. يعود إلى `birefnet-general` إذا نفدت ذاكرة نموذج HR.
|
||||
- يزيل خيار `defringe` بكسلات الأطراف شبه الشفافة التي يتركها أحيانًا المطّ بالذكاء الاصطناعي حول الشعر والفراء والحواف الدقيقة. يعمل بتمويه قناة ألفا وتصفير البكسلات منخفضة الثقة.
|
||||
- يطبّق خيار `removeWatermark` خطوة معالجة مسبقة بمرشح وسيط. إنه خفض أساسي للعلامة المائية، وليس أداة مخصصة لإزالة العلامات المائية.
|
||||
- يُخرج ملفات PNG أو WebP عديمة الفقد فقط (كلاهما يدعم شفافية ألفا).
|
||||
- يدعم صيغ المدخلات HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
description: "تكبير الصور من 2x إلى 4x بدقة فائقة من Real-ESRGAN بالذكاء الاصطناعي مع الحفاظ على التفاصيل الدقيقة."
|
||||
i18n_source_hash: 150032e99476
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f469cd14aa46
|
||||
---
|
||||
|
||||
# تكبير الصورة {#image-upscaling}
|
||||
|
||||
تحسين بدقة فائقة بالذكاء الاصطناعي باستخدام Real-ESRGAN. يكبّر الصور من 2x إلى 4x مع الحفاظ على التفاصيل.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/upscale`
|
||||
|
||||
**المعالجة:** غير متزامنة (تُرجع 202، مع استقصاء `/api/v1/jobs/{jobId}/progress` للحالة عبر SSE)
|
||||
|
||||
**حزمة النموذج:** `upscale-enhance` (5-6 غيغابايت)
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | نعم | - | ملف الصورة (متعدد الأجزاء) |
|
||||
| scale | number | لا | `2` | عامل التكبير (مثل 2، 3، 4) |
|
||||
| model | string | لا | `"auto"` | النموذج المراد استخدامه (مثل `auto`، أسماء نماذج محددة) |
|
||||
| faceEnhance | boolean | لا | `false` | تطبيق تحسين الوجه أثناء التكبير |
|
||||
| denoise | number | لا | `0` | قوة خفض الضوضاء (0 = معطّل) |
|
||||
| format | string | لا | `"auto"` | صيغة المخرجات: `auto`، `png`، `jpg`، `webp`، `tiff`، `gif`، `avif`، `heic`، `heif`، `jxl` |
|
||||
| quality | number | لا | `95` | جودة المخرجات (1-100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/upscale \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"scale":4,"model":"auto","faceEnhance":true,"format":"png"}'
|
||||
```
|
||||
|
||||
## الاستجابة {#response}
|
||||
|
||||
### الاستجابة الأولية (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### التقدّم (SSE على `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Upscaling...","percent":60}
|
||||
```
|
||||
|
||||
### النتيجة النهائية (عبر SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_4x.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 120000,
|
||||
"processedSize": 2400000,
|
||||
"width": 4096,
|
||||
"height": 4096,
|
||||
"method": "realesrgan-x4plus"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- يتطلب تثبيت حزمة النموذج `upscale-enhance` (5-6 غيغابايت).
|
||||
- يستخدم Real-ESRGAN عند توفره؛ ويعود إلى استيفاء Lanczos إذا لم يكن نموذج الذكاء الاصطناعي متاحًا.
|
||||
- يطبّق خيار `faceEnhance` استعادة الوجه بـ GFPGAN أثناء التكبير للحصول على جودة وجه أفضل.
|
||||
- بالنسبة لصيغ المخرجات التي يتعذّر معاينتها في المتصفح (HEIC، JXL، TIFF)، تُولَّد معاينة WebP إلى جانب المخرجات الرئيسية.
|
||||
- يدعم صيغ المدخلات HEIC/HEIF وRAW وTGA وPSD وEXR وHDR عبر فك الترميز التلقائي.
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
description: "تحويل الصور النقطية إلى SVG بتحويل متجهي بالأبيض والأسود (potrace) وتحويل متجهي ملون كامل متعدد الطبقات."
|
||||
i18n_source_hash: f3e4777188ad
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7dd931c76157
|
||||
---
|
||||
|
||||
# الصورة إلى SVG {#image-to-svg}
|
||||
|
||||
حوّل الصور النقطية إلى SVG باستخدام خوارزميات التتبع. يدعم التتبع بالأبيض والأسود (potrace) والتحويل المتجهي الملون الكامل متعدد الطبقات.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/vectorize`
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| colorMode | string | لا | `"bw"` | وضع التتبع: `bw` (أبيض وأسود) أو `color` (طبقات متعددة الألوان) |
|
||||
| threshold | number | لا | 128 | عتبة السطوع لوضع الأبيض والأسود (0 إلى 255). البكسلات دون هذه القيمة تصبح سوداء. |
|
||||
| colorPrecision | number | لا | 6 | دقة تكميم الألوان لوضع الألوان (1 إلى 16). القيم الأعلى تنتج طبقات ألوان أكثر تمايزًا. |
|
||||
| layerDifference | number | لا | 6 | أدنى فرق لوني بين الطبقات في وضع الألوان (1 إلى 128) |
|
||||
| filterSpeckle | number | لا | 4 | أدنى مساحة للأشكال المتتبَّعة بالبكسل (1 إلى 256). يزيل الضوضاء/البقع. |
|
||||
| pathMode | string | لا | `"spline"` | تنعيم المسار: `none` (مسنّن)، `polygon` (مقاطع مستقيمة)، `spline` (منحنيات ناعمة) |
|
||||
| cornerThreshold | number | لا | 60 | عتبة الزاوية لاكتشاف الزوايا في وضع الألوان (0 إلى 180 درجة) |
|
||||
| invert | boolean | لا | `false` | عكس الصورة قبل التتبع (تبديل الأسود/الأبيض) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vectorize \
|
||||
-F "file=@logo.png" \
|
||||
-F 'settings={"colorMode":"bw","threshold":128,"filterSpeckle":4,"pathMode":"spline"}'
|
||||
```
|
||||
|
||||
### التحويل المتجهي الملون {#color-vectorization}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vectorize \
|
||||
-F "file=@illustration.png" \
|
||||
-F 'settings={"colorMode":"color","colorPrecision":8,"layerDifference":6,"filterSpeckle":4}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.svg",
|
||||
"originalSize": 45678,
|
||||
"processedSize": 12345
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- المخرجات دائمًا ملف SVG بغض النظر عن صيغة المدخلات.
|
||||
- يدعم صيغ المدخلات HEIC وRAW وPSD وSVG (تُفكّ ترميزاتها تلقائيًا إلى صورة نقطية قبل التتبع).
|
||||
- يستخدم وضع الأبيض والأسود خوارزمية potrace. تُحوَّل الصورة أولًا إلى تدرّج رمادي، ثم تُعتَّب إلى أبيض/أسود صرف قبل التتبع.
|
||||
- يستخدم وضع الألوان نهجًا متعدد الطبقات: تُكمَّم الصورة إلى طبقات لونية، تُتتبَّع كل منها على حدة وتُكدَّس في مخرجات SVG.
|
||||
- القيم الأدنى لـ `filterSpeckle` تحفظ تفاصيل أكثر لكنها تنتج ملفات SVG أكبر بمسارات أكثر.
|
||||
- يؤثر إعداد `pathMode` بشكل ملحوظ في حجم الملف: `none` ينتج أكثر عدد من المسارات، و`spline` ينتج المخرجات الأنعم (والأصغر عادة).
|
||||
- للحصول على أفضل النتائج مع الشعارات والأيقونات، استخدم وضع الأبيض والأسود مع مدخل نظيف عالي التباين. للصور الفوتوغرافية أو الرسوم التوضيحية، استخدم وضع الألوان مع قيمة `colorPrecision` أعلى.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "إضافة تأثير تظليل حوافي بقوة ولون وموضع قابلة للتعديل."
|
||||
i18n_source_hash: 0b9795fea2eb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f1cc538bc427
|
||||
---
|
||||
|
||||
# التظليل الحوافي {#vignette}
|
||||
|
||||
أضف تأثير تظليل حوافي يعتّم حواف الصورة أو يلوّنها. يدعم قوة ولونًا ونصف قطر ونعومة واستدارة وموضع مركز قابلة للتعديل.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/vignette`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| strength | number | لا | `0.5` | عتامة التظليل الحوافي (0.1-1) |
|
||||
| color | string | لا | `"#000000"` | لون التظليل بصيغة hex |
|
||||
| radius | integer | لا | `70` | نصف القطر الخارجي كنسبة مئوية من نصف القطر القُطري (0-100) |
|
||||
| softness | integer | لا | `50` | نعومة التدرّج (0-100)؛ القيم الأعلى تنتج تلاشيًا أكثر تدرّجًا |
|
||||
| roundness | integer | لا | `100` | الشكل: 100 = دائرة، 0 = قطع ناقص يطابق نسبة أبعاد الصورة |
|
||||
| centerX | integer | لا | `50` | موضع المركز الأفقي كنسبة مئوية (0-100) |
|
||||
| centerY | integer | لا | `50` | موضع المركز العمودي كنسبة مئوية (0-100) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vignette \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"strength": 0.7, "radius": 60, "softness": 70}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2410000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- قيمة `radius` الأصغر تعتّم جزءًا أكبر من الصورة؛ والقيمة الأكبر تحصر التظليل في الحواف القصوى.
|
||||
- استخدم `color` غير أسود (مثل درجات البيضاء أو السيبيا) للحصول على تأثيرات تظليل إبداعية.
|
||||
- يتيح لك تعديل `centerX` و`centerY` وضع المنطقة الصافية خارج المركز، وهو مفيد لتوجيه التركيز نحو موضوع لا يقع في منتصف الإطار.
|
||||
- تطابق صيغة المخرجات صيغة المدخلات. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
description: "تراكب شعار أو صورة كعلامة مائية بموضع وعتامة ومقياس قابلة للتهيئة."
|
||||
i18n_source_hash: c73ab0ef8ab9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5c9036bab6b8
|
||||
---
|
||||
|
||||
# علامة مائية بالصورة {#image-watermark}
|
||||
|
||||
تراكب شعار أو صورة ثانوية كعلامة مائية على صورة أساسية. تُحجّم العلامة المائية نسبةً إلى عرض الصورة الأساسية وتوضع في زاوية أو في المنتصف.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/watermark-image`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على **صورتين** وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| position | string | لا | `"bottom-right"` | موضع العلامة المائية: `center`، `top-left`، `top-right`، `bottom-left`، `bottom-right` |
|
||||
| opacity | number | لا | `50` | نسبة عتامة العلامة المائية (0 إلى 100) |
|
||||
| scale | number | لا | `25` | عرض العلامة المائية كنسبة مئوية من عرض الصورة الرئيسية (1 إلى 100) |
|
||||
|
||||
### حقول الملفات {#file-fields}
|
||||
|
||||
| اسم الحقل | مطلوب | الوصف |
|
||||
|------------|----------|-------------|
|
||||
| file | نعم | الصورة الرئيسية/الأساسية |
|
||||
| watermark | نعم | صورة العلامة المائية/الشعار |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "watermark=@logo.png" \
|
||||
-F 'settings={"position": "bottom-right", "opacity": 60, "scale": 20}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2520000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تُتحقق كلتا الصورتين وتُفكّ ترميزاتهما (يُدعم HEIC وRAW وPSD وSVG).
|
||||
- يُعاد تحجيم العلامة المائية تناسبيًا بحيث يساوي عرضها `scale`% من عرض الصورة الرئيسية.
|
||||
- تُطبَّق العتامة عبر قناع ألفا مُركَّب بمزج `dest-in`.
|
||||
- تستخدم أوضاع الزوايا حشوًا بمقدار 20 بكسل من حافة الصورة.
|
||||
- إذا كانت صورة العلامة المائية تحتوي على شفافية (مثل شعار PNG)، فإنها تُحفَظ أثناء التركيب.
|
||||
- يُطبَّق اتجاه EXIF تلقائيًا على كلتا الصورتين قبل المعالجة.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "إضافة علامات مائية نصية بموضع وعتامة ودوران وتبليط قابلة للتهيئة."
|
||||
i18n_source_hash: b80f12f410e4
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 73811ce50f43
|
||||
---
|
||||
|
||||
# علامة مائية نصية {#text-watermark}
|
||||
|
||||
أضف تراكب علامة مائية نصية إلى الصور. يدعم وضعًا مفردًا في الزوايا/المنتصف أو تكرارًا مبلّطًا عبر الصورة بأكملها، مع حجم خط ولون وعتامة ودوران قابلة للتهيئة.
|
||||
|
||||
## نقطة نهاية API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/watermark-text`
|
||||
|
||||
تقبل بيانات نموذج متعدد الأجزاء تحتوي على ملف صورة وحقل `settings` بصيغة JSON.
|
||||
|
||||
## المعاملات {#parameters}
|
||||
|
||||
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | نعم | - | نص العلامة المائية (1 إلى 500 حرف) |
|
||||
| fontSize | number | لا | `48` | حجم الخط بالبكسل (8 إلى 1000) |
|
||||
| color | string | لا | `"#000000"` | لون النص بصيغة hex (`#RRGGBB`) |
|
||||
| opacity | number | لا | `50` | نسبة عتامة النص (0 إلى 100) |
|
||||
| position | string | لا | `"center"` | الموضع: `center`، `top-left`، `top-right`، `bottom-left`، `bottom-right`، `tiled` |
|
||||
| rotation | number | لا | `0` | زاوية دوران النص بالدرجات (-360 إلى 360) |
|
||||
|
||||
## مثال طلب {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-text \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "SAMPLE", "fontSize": 64, "opacity": 30, "position": "center", "rotation": -30}'
|
||||
```
|
||||
|
||||
علامة مائية مبلّطة عبر الصورة بأكملها:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-text \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "DRAFT", "fontSize": 36, "opacity": 20, "position": "tiled", "rotation": -45}'
|
||||
```
|
||||
|
||||
## مثال استجابة {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2480000
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظات {#notes}
|
||||
|
||||
- تُصيَّر العلامة المائية كنص SVG وتُركَّب على الصورة، مع الحفاظ على جودة المخرجات.
|
||||
- يباعد الوضع المبلّط عناصر النص وفق حجم الخط (6 أضعاف أفقيًا، 4 أضعاف عموديًا)، بحد أقصى 500 عنصر.
|
||||
- بالنسبة لأوضاع الزوايا، يساوي الحشو من الحافة حجم الخط.
|
||||
- الخط المستخدم هو خط sans-serif الافتراضي للنظام.
|
||||
- تُهرَّب الأحرف الخاصة بـ XML في النص (`&`، `<`، `>`، `"`، `'`) بأمان.
|
||||
- تطابق صيغة المخرجات صيغة المدخلات. تُفكّ ترميزات مدخلات HEIC وRAW وPSD وSVG تلقائيًا قبل المعالجة.
|
||||
Reference in New Issue
Block a user