إزالة خلفية صورة يدويًا تستغرق بضع دقائق لكل صورة. أما فعل ذلك لكل صورة منتج أو صورة ملف شخصي أو صورة مصغّرة تُرفع في تطبيقك فيحتاج إلى واجهة API لإزالة الخلفية: طلب HTTP واحد يدخل، وصورة مقصوصة جاهزة تخرج.
يشرح هذا الدليل كيفية دمج هذه الواجهة بالشكل الصحيح. ستحصل على أكواد cURL وPython وJavaScript جاهزة للتشغيل، وخيارات الإخراج التي تستحق المعرفة، وطريقة التعامل مع الصور البطيئة والمهام الجماعية، وكيفية إعادة المحاولة دون أن تدفع مرتين. تستخدم الأمثلة removebackground.dev، وهو منتج شقيق لنا، لكن الأنماط نفسها تنطبق على أي مزود.
كيف تعمل واجهة API لإزالة الخلفية
ترسل صورة، فيشغّل المزود نموذج تجزئة يفصل العنصر الرئيسي عن الخلفية، وتحصل على صورة جديدة. جوهر النتيجة هو قناة ألفا: قيمة لكل بكسل تحدد مقدار انتماء البكسل إلى العنصر الرئيسي. البكسلات المعتمة تمامًا هي العنصر، والبكسلات الشفافة تمامًا هي الخلفية، والقيم بينهما تتعامل مع الحواف الناعمة مثل الشعر والفرو والزجاج.
من هذا القناع يمكن للواجهة أن تعيد عدة أشياء:
- صورة مقصوصة شفافة، وعادةً PNG أو WebP بعد إزالة الخلفية
- العنصر على لون خالص، مدمجًا في JPG للمتاجر الإلكترونية التي تشترط خلفية بيضاء
- القناع نفسه، صورة بتدرج الرمادي يمكنك استخدامها في خط التركيب الخاص بك
- نسخة مقصوصة أو معاد تحجيمها، مقطوعة حول العنصر ومضبوطة على حجم محدد
الطلب هو الجزء السهل. التكامل في بيئة الإنتاج عليه أيضًا التعامل مع الصور التي تستغرق وقتًا أطول من المعتاد، والدفعات الكبيرة، وحدود المعدل، وإعادة المحاولة، وإبقاء مفتاح API بعيدًا عن المستخدمين.
ما الذي تبحث عنه في واجهة API لإزالة الخلفية
قبل أن تكتب الكود، تحقق من هذه النقاط مقابل صورك وحجم استخدامك.
| المعيار | ما الذي تتحقق منه | لماذا يهم |
|---|---|---|
| جودة الحواف | الشعر والفرو والأجسام الشفافة والخلفيات المزدحمة على 20 إلى 50 صورة من صورك | الفرق بين المزودين يظهر في الحالات الصعبة |
| طرق الإدخال | رفع ملف، رابط عام، base64، بايتات خام | يحدد إن كان بإمكانك استدعاؤها من عامل طابور دون تنزيل الصور أولًا |
| خيارات الإخراج | الصيغة، لون الخلفية، القص، الهامش، الحجم الدقيق، إخراج القناع | يوفر عليك خطوة معالجة صور ثانية |
| الصور البطيئة | ماذا يحدث عندما تستغرق صورة وقتًا أطول من مهلة HTTP لديك | دون معرّف مهمة قد تدفع مرتين عند إعادة المحاولة |
| المعالجة الجماعية | نقطة نهاية batch، حجم الدفعة، طريقة الإبلاغ عن الإخفاقات الجزئية | يحدد طريقة معالجتك لاستيراد الكتالوجات |
| الفوترة | الاحتساب لكل نجاح أم لكل طلب، اشتراك أم رصيد، هل تنتهي صلاحية الرصيد | الصور الفاشلة وإعادة المحاولة تتراكم مع الحجم الكبير |
| الحدود | حجم الملف، الدقة، حد المعدل، مدة تخزين النتائج | يحدد تصميم الطابور والتخزين لديك |
| الخصوصية | مدة الاحتفاظ بالملفات المرفوعة والنتائج، وهل تُستخدم الصور لتدريب النماذج | غالبًا ما يكون شرطًا إلزاميًا من العملاء |
الخطوة 1: أنشئ مفتاح API
سجّل في removebackground.dev وأنشئ مفتاحًا من صفحة حسابك. تحصل الحسابات الجديدة على 50 رصيدًا مجانيًا، وهذا يكفي لتشغيل الأمثلة أدناه والاختبار على صورك.
احفظ المفتاح في متغير بيئة على خادمك:
export REMOVEBG_API_KEY="your_api_key"
كل استدعاء يرسل المفتاح في الترويسة x-api-key، وكل استدعاء يستهلك رصيد ذلك الحساب. أنشئ مفتاحًا منفصلًا لكل تطبيق أو بيئة حتى تتمكن من إلغاء أحدها دون تعطيل البقية.
الخطوة 2: أزل الخلفية باستخدام cURL
نقطة النهاية الفورية هي POST https://removebackground.dev/v1/remove. أسرع اختبار هو رفع ملف:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.png
معظم الصور المفردة تعود جاهزة في الاستجابة نفسها، عادةً خلال ثوانٍ قليلة، كصورة PNG شفافة بالدقة الكاملة.
تقبل نقطة النهاية الصورة بأربع طرق. أرسل واحدة منها:
| الإدخال | طريقة الإرسال |
|---|---|
| image_file | بيانات نموذج multipart. JPG أو PNG أو WebP، حتى 25 MB |
| image_url | رابط http(s) عام. تنزّله الواجهة، وتتبع حتى 3 عمليات إعادة توجيه، بمهلة 15 ثانية |
| image_file_b64 | base64 داخل جسم JSON، مع البادئة data:image أو بدونها، حتى 25 MB بعد فك الترميز |
| جسم خام | بايتات الصورة مع Content-Type من نوع image/jpeg أو image/png أو image/webp أو application/octet-stream |
إذا حمل الطلب أكثر من طريقة، تكون الأولوية لـ image_file، ثم image_file_b64، ثم image_url، ثم الجسم الخام. يمكن إرسال الخيارات كحقول نموذج أو مفاتيح JSON أو قيم في سلسلة الاستعلام.
أمر واحد يجب الانتباه إليه: الخيار -o يحفظ جسم الاستجابة مهما كانت الحالة. إذا كان المفتاح خاطئًا أو الصورة غير صالحة، فإن ملف "PNG" لديك هو في الحقيقة خطأ بصيغة JSON. تحقق من رمز الحالة قبل أن تثق بالملف.
الخطوة 3: تعامل مع 200 و202 والأخطاء في Python
لا تستطيع واجهة إزالة الخلفية أن تضمن انتهاء كل صورة خلال طلب HTTP واحد. عندما يكون الطابور مزدحمًا على غير العادة وتستغرق صورة أكثر من نحو 55 ثانية، تجيب removebackground.dev بـ 202 Accepted مع معرّف مهمة بدلًا من الصورة. تستمر المهمة في العمل، وتجلب النتيجة باستخدام المعرّف.
| الحالة | الجسم | ماذا تفعل |
|---|---|---|
| 200 | الصورة (image/png أو image/jpeg أو image/webp) | احفظها. استخدم Content-Type لاختيار امتداد الملف |
| 202 | JSON يحتوي على id وstatus وstatus_url وresult_url | انتظر ثانيتين، ثم اطلب النتيجة بـ GET. لا ترسل الصورة مرة أخرى |
| 4xx أو 5xx | JSON: {"error": {"code", "message"}} | اقرأ الرمز. لا تحفظ الجسم كصورة |
القاعدة الأساسية: لا تُعد إرسال الصورة أبدًا بعد 202. فذلك يبدأ مهمة ثانية وقد يكلّف رصيدًا ثانيًا. إليك نسخة Python كاملة ترسل الصورة مرة واحدة ولا تعيد إلا الاستدعاءات الآمنة:
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
KEY = os.environ["REMOVEBG_API_KEY"] # keep the key on your server
EXT = {"image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp"}
def save(res, stem):
"""Save an image response with the right extension; raise on anything else."""
mime = res.headers.get("Content-Type", "").split(";")[0]
if res.status_code != 200 or mime not in EXT:
raise RuntimeError(f"HTTP {res.status_code}: {res.text[:500]}")
path = stem + EXT[mime]
with open(path, "wb") as f:
f.write(res.content)
return path
def remove_background(image_url, stem="result", max_wait=300):
s = requests.Session()
s.headers["x-api-key"] = KEY
# One key per image: a retry with the same key returns the same job, never a second charge.
idem = {"Idempotency-Key": str(uuid.uuid4())}
for attempt in range(3):
try:
res = s.post(f"{API}/v1/remove", data={"image_url": image_url},
headers=idem, timeout=(10, 120))
break
except requests.ConnectionError:
if attempt == 2:
raise
time.sleep(2)
if res.status_code != 202:
return save(res, stem) # 200 is the image; anything else raises
# 202: still processing. Wait for the same job.
job_id = res.json()["id"]
deadline = time.monotonic() + max_wait
while time.monotonic() < deadline:
time.sleep(2) # the API sends Retry-After: 2
res = s.get(f"{API}/v1/jobs/{job_id}/result", timeout=30)
if res.status_code == 409 and res.json()["error"]["code"] == "not_ready":
continue
return save(res, stem) # the image, or the job's own error
raise TimeoutError(f"Job {job_id} is still running. Check /v1/jobs/{job_id} later.")
print(remove_background("https://example.com/photo.jpg"))
يحتاج الكود إلى Python 3 ومكتبة requests (pip install requests). هناك تفصيلان يسهل إغفالهما. أولًا، إيقاف السكربت لا يوقف المهمة: قد تنتهي ويُحتسب رصيدها، وتظهر النتيجة في Studio الخاص بحسابك. ثانيًا، تجيب GET /v1/jobs/:id/result بـ 409 not_ready أثناء تشغيل المهمة، فتعامل معها على أنها "انتظر" وليست فشلًا.
الخطوات نفسها في JavaScript (Node.js)
الخطوات نفسها في Node.js 18 أو أحدث، باستخدام fetch وFormData وBlob المدمجة، مع رفع ملف محلي:
import { readFile, writeFile } from "node:fs/promises"
import { randomUUID } from "node:crypto"
const API = "https://removebackground.dev"
const KEY = process.env.REMOVEBG_API_KEY // server side only
const EXT = { "image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp" }
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
async function save(res, stem) {
const mime = (res.headers.get("content-type") || "").split(";")[0]
if (res.status !== 200 || !EXT[mime]) {
throw new Error("HTTP " + res.status + ": " + (await res.text()).slice(0, 500))
}
const path = stem + EXT[mime]
await writeFile(path, Buffer.from(await res.arrayBuffer()))
return path
}
export async function removeBackground(filePath, stem = "result", maxWaitMs = 300000) {
const form = new FormData()
form.append("image_file", new Blob([await readFile(filePath)]), "upload")
form.append("format", "png")
const res = await fetch(API + "/v1/remove", {
method: "POST",
// Reuse the same Idempotency-Key if you retry this POST.
headers: { "x-api-key": KEY, "Idempotency-Key": randomUUID() },
body: form,
})
if (res.status !== 202) return save(res, stem)
const { id } = await res.json()
const deadline = Date.now() + maxWaitMs
while (Date.now() < deadline) {
await sleep(2000)
const result = await fetch(API + "/v1/jobs/" + id + "/result", {
headers: { "x-api-key": KEY },
})
if (result.status === 409) {
const body = await result.json()
if (body.error && body.error.code === "not_ready") continue
throw new Error("Job " + id + ": " + body.error.code)
}
return save(result, stem)
}
throw new Error("Job " + id + " is still running. Check /v1/jobs/" + id + " later.")
}
console.log(await removeBackground("photo.jpg"))
تقبل الواجهة طلبات CORS، وهذا مفيد للأدوات والاختبار. لكن ذلك لا يجعل استدعاءها من صفحة ويب تحتوي على مفتاحك آمنًا. المزيد عن ذلك في قسم الأمان أدناه.
الخطوة 4: تحكّم في الإخراج
معظم التطبيقات لا تريد صورة مقصوصة خامًا بالدقة الكاملة. تريد صورة منتج مربعة على خلفية بيضاء، أو معاينة صغيرة، أو قناعًا. طلب الملف النهائي من الواجهة مباشرة يوفر عليك خطوة معالجة ثانية. هذه هي خيارات /v1/remove:
| المعامل | القيم | ماذا يفعل |
|---|---|---|
| format | png, jpg, webp | صيغة الإخراج. الافتراضي png. صيغة JPG بلا شفافية وتُدمج على bg_color أو الأبيض |
| bg_color | ست عشري (ffffff، #fff)، أو rgb(255, 255, 255) أو اسم لون | يملأ الخلفية. الافتراضي شفاف |
| size | preview, medium, hd, full | حد أقصى بالميغابكسل مع الحفاظ على نسبة الأبعاد ودون تكبير أبدًا: preview حتى 0.25 MP، وmedium حتى 1.5 MP، وhd حتى 4 MP، وfull هو الأصل (حتى 25 MP) |
| crop | true أو false أو نسبة مثل 1:1 أو 4:5 أو 16:9 | يقص حول العنصر. مع النسبة، يتسع الإطار إلى تلك النسبة حول العنصر |
| padding | بكسلات أو كسر أو نسبة مئوية | هامش يضاف حول العنصر عند القص، حتى 500 px |
| channels | rgba, rgb, alpha | صورة مقصوصة شفافة (الافتراضي)، أو صورة معتمة، أو قناع رمادي يكون فيه الأبيض هو العنصر |
| width, height | من 1 إلى 6000 | حجم الإخراج الدقيق بالبكسل، يُطبق بعد القص. لا تمديد أبدًا |
| fit | contain, cover, scale-down | طريقة ملاءمة الصورة عند تحديد العرض والارتفاع معًا |
| roi | x1 y1 x2 y2 بالبكسل أو % | يُحتفظ فقط بالعنصر داخل هذه المنطقة |
كل خيار يكلّف الرصيد الواحد نفسه، والمعاملات غير المعروفة تُتجاهل بصمت، لذلك لن يسبب خطأ إملائي أي رسالة خطأ. هكذا تبدو صورة مربعة لمتجر إلكتروني مع المنتج في المنتصف وهامش 10%:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@product.jpg' \
-F 'crop=1:1' -F 'padding=10%' \
-F 'width=1000' -F 'height=1000' \
-F 'format=jpg' -F 'bg_color=white' \
-o product-square.jpg
تحمل الاستجابة الناجحة أيضًا ترويسات مفيدة. تعرض X-Credits-Remaining رصيدك بعد معالجة الصورة. وتوضح X-Matte-Confidence (من 0 إلى 1) مدى حسم القناع، وتعطي X-Matte-Ambiguous-Ratio نسبة البكسلات الناعمة مثل الشعر أو الزجاج أو ضبابية الحركة. تسجيل هاتين القيمتين يتيح لك تمييز الصور المقصوصة منخفضة الثقة لمراجعتها بشريًا بدلًا من فحص كل صورة.
الخطوة 5: عالج الصور بالجملة
لاستيراد الكتالوجات ومعالجة البيانات القديمة، لا ترسل مئات الطلبات المفردة. تضع POST /v1/batch حتى 100 رابط صورة عام في الطابور كمهمة واحدة، بالخيارات نفسها الموجودة في /v1/remove، وتجيب بـ 202 فورًا:
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
s = requests.Session()
s.headers["x-api-key"] = os.environ["REMOVEBG_API_KEY"]
urls = ["https://example.com/front.jpg", "https://example.com/back.jpg"]
job = s.post(f"{API}/v1/batch",
json={"image_urls": urls, "format": "png", "size": "hd"},
headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30)
job.raise_for_status()
job_id = job.json()["id"] # save it: it's how you resume after a restart
while True:
time.sleep(3)
status = s.get(f"{API}/v1/jobs/{job_id}", timeout=30).json()
if status["done"]:
break
print(status["status"], "credits charged:", status["credits_charged"])
for item in status["items"]:
if item["status"] != "succeeded":
print("failed:", item["input"], item.get("error"))
continue
img = s.get(item["result_url"], timeout=60)
with open(f"out-{item['position']}.{item['format']}", "wb") as f:
f.write(img.content)
بعض القواعد من الوثائق التي يجب أن تبني حولها:
- تنتهي حالة المهمة بأحد الأوضاع succeeded أو partial (فشلت بعض الصور) أو failed. لكل عنصر في
itemsحالته الخاصة، ورمز خطأ عند الفشل. - الإدخالات التي ليست روابط http(s) والروابط المكررة تُحذف ولا تُحتسب أبدًا. إذا كان أي من العددين أكبر من 0، فطابق النتائج عبر
inputبدلًا من الموضع. - يمكن أن تكون لديك 3 مهام batch مفتوحة كحد أقصى لكل حساب. تتوقف الدفعة عن الاحتساب بمجرد أن تصبح
doneقيمتها true. - إذا نفد الرصيد في منتصف الدفعة، تبقى الصور المنتهية مدفوعة، ويُعلَّم الباقي بأنه skipped مع out_of_credits دون أي تكلفة.
- لا تحتوي الواجهة على نقطة نهاية للإلغاء أو webhooks أو تنزيل ZIP، لذا فالاستعلام الدوري هو النمط المعتمد. قراءة المهمة مجانية ولا تخضع لحد المعدل.
تفضّل سكربتًا جاهزًا للتشغيل كما هو؟ يشرح دليل المعالجة الجماعية بـ Python سير عمل كاملًا من مجلد إلى مجلد.
الخطوة 6: أعد المحاولة بأمان وحافظ على فوترة متوقعة
مهلات الشبكة هي مصدر الخصم المزدوج. يستسلم العميل، ثم يعيد المحاولة، فتوجد الآن مهمتان لصورة واحدة. الحل هو الترويسة Idempotency-Key: أي سلسلة فريدة حتى 255 حرفًا، مثل UUID، واحدة لكل صورة أو دفعة. إذا أرسلت الطلب نفسه مرة أخرى بالمفتاح نفسه، تحصل على المهمة التي أنشأها الطلب الأول، مع الترويسة Idempotent-Replayed: true، ودون خصم جديد. إعادة استخدام مفتاح لصورة مختلفة تعيد 409 idempotency_key_reused.
| الاستجابة | ماذا تفعل |
|---|---|
| خطأ شبكة أو انتهاء مهلة أو 500 عند POST | أعد إرسال الطلب نفسه بـ Idempotency-Key نفسه |
| 429 rate_limited | انتظر عدد الثواني في Retry-After، ثم أعد الإرسال بالمفتاح نفسه |
| 429 too_many_batches | انتظر حتى تنتهي إحدى دفعاتك الثلاث المفتوحة |
| 400 أو 413 أو 422 | أصلح الطلب أو الصورة. إعادة إرساله دون تغيير تعطي الجواب نفسه |
| 401 أو 402 | أصلح المفتاح أو اشحن الرصيد. لا تكرر الطلب |
| 409 not_ready عند طلب النتيجة | انتظر ثانيتين واسأل مرة أخرى. لا تُعد إرسال الصورة |
| 410 result_unavailable | حُذفت النتيجة المخزنة. المعالجة من جديد مهمة جديدة وتكلّف رصيدًا واحدًا |
| 502 عند POST | فشلت تلك المهمة ولم تُحتسب. إعادة المحاولة مرة واحدة تعني مهمة جديدة |
تتبع الفوترة قاعدة بسيطة: رصيد واحد عند نجاح الصورة، ولا شيء عند فشلها. الطلبات المرفوضة قبل المعالجة، والصور غير القابلة للقراءة، والإخفاقات بعد محاولات المزود نفسه مجانية، وتنزيل نتيجة جاهزة مرة أخرى مجاني ما دامت مخزنة.
الحدود التي يجب مراعاتها في التصميم
| الحد | القيمة |
|---|---|
| ملف الصورة | 25 MB، بصيغة JPG أو PNG أو WebP، تُكتشف من بايتات الملف |
| دقة الإدخال | الصور التي تتجاوز 25 MP تُصغَّر إلى 25 MP قبل المعالجة |
| حجم الإخراج | العرض والارتفاع كل منهما من 1 إلى 6000 px |
| تنزيل image_url | http(s) فقط، مهلة 15 ثانية، حتى 3 عمليات إعادة توجيه. تُرفض العناوين الخاصة وعناوين loopback |
| الانتظار في POST /v1/remove | نحو 55 ثانية، ثم 202 مع معرّف مهمة |
| حجم الدفعة | 100 رابط صورة لكل طلب |
| الدفعات المفتوحة | 3 لكل حساب |
| معدل الطلبات | 60 طلبًا في الدقيقة لكل حساب عبر نقاط نهاية POST. تُحتسب الدفعة مرة واحدة مهما كان حجمها |
| تخزين النتائج | 48 ساعة، ثم تُحذف |
إذا احتجت إلى أكثر من 60 صورة في الدقيقة، فنقطة النهاية batch هي الحل: طلب واحد يغطي حتى 100 صورة. خزّن النتائج في حاوية التخزين الخاصة بك فور تنزيلها، لأن روابط النتائج تجيب بـ 410 بعد 48 ساعة. ووفقًا لوثائق المزود، لا تُستخدم الصور المرفوعة لتدريب النماذج.
الانتقال من واجهة remove.bg
ينتهي موقع remove.bg المستقل وواجهة الخدمة الذاتية في 1 ديسمبر 2026 الساعة 09:00 بتوقيت CET. تنتقل واجهته إلى Leonardo.Ai، وهذا يتطلب تغيير التكامل لديك. إذا كنت تفضّل ألا تعيد كتابة أي شيء، فإن removebackground.dev توفر نقطة نهاية متوافقة مع remove.bg، والانتقال سطر واحد:
| قبل | بعد |
|---|---|
| https://api.remove.bg/v1.0/removebg | https://removebackground.dev/v1.0/removebg |
تحتفظ بالترويسة X-Api-Key نفسها (مع مفتاح removebackground.dev)، وأسماء المعاملات نفسها، وترويسات الاستجابة نفسها، وصيغة الأخطاء نفسها:
curl -H "X-Api-Key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' -F 'size=auto' \
-F 'crop=true' -F 'crop_margin=10%' -F 'bg_color=ffffff' \
-o no-bg.jpg https://removebackground.dev/v1.0/removebg
اعرف الفروق قبل أن تنتقل:
- لا يوجد 202. تنتظر نقطة النهاية المتوافقة حتى 110 ثوانٍ، ثم تعيد مهلة 503. تستمر المهمة وتُحتسب إذا نجحت، لذا فإن إعادة ذلك الطلب دون تفكير تبدأ مهمة ثانية.
- لا توجد مفاتيح idempotency في نقطة النهاية هذه. إذا احتجت إلى إعادة محاولة آمنة، فانتقل إلى
/v1/removeتدريجيًا. - بعض الخيارات مقبولة لكنها تُتجاهل: type وtype_level (يُكتشف العنصر تلقائيًا)، وsemitransparency، وخيارات الظل (لا تُضاف ظلال).
- الحجم دائمًا برصيد واحد، بما في ذلك الدقة الكاملة.
يتضمن دليل الانتقال كودًا قبل التغيير وبعده لـ cURL وPython وNode وPHP، إضافة إلى خطوات لـ Zapier وMake وn8n.
أبقِ مفتاح API بعيدًا عن جهة العميل
هذا هو الخطأ الذي يكلّف مالًا حقيقيًا. إذا كان مفتاحك في صفحة ويب أو تطبيق جوال أو مستودع عام أو رابط، فيمكن لأي شخص قراءته وإنفاق رصيدك.
- لتمكين مستخدميك من إزالة الخلفيات، أرسل صورهم عبر الخادم الخلفي واستدعِ الواجهة من هناك.
- أضف تسجيل دخول خاصًا بك وحدودًا للإنفاق لكل مستخدم في ذلك الخادم.
- استخدم مفتاحًا واحدًا لكل تطبيق أو بيئة.
- إذا تسرّب مفتاح، فألغه من صفحة الحساب. يتوقف عن العمل فورًا. يخزّن المزود تجزئة كل مفتاح فقط، لذا أنشئ مفتاحًا جديدًا بدلًا من محاولة استعادة القديم.
مثال: صور مقصوصة للصور المصغّرة في YouTube
إذا كنت تبني أدوات لصنّاع المحتوى، فالصور المصغّرة استخدام واضح. تُشاهَد الصورة المصغّرة غالبًا بحجم صغير، لذا يجب أن تحملها الصورة المقصوصة: وجه واحد أو منتج واحد، كبير، بحافة واضحة على خلفية بسيطة. يوصي YouTube بمقاس 3840 x 2160 px بنسبة 16:9 وعرض أدنى 640 px، ويقبل JPG أو PNG حتى 50 MB من الكمبيوتر، لكن 2 MB فقط من تطبيق الجوال.
من جهة الواجهة، يكفي استدعاء واحد يعيد PNG شفافة مقصوصة حول العنصر، جاهزة لوضعها على لوحة بنسبة 16:9:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@me.jpg' \
-F 'crop=true' -F 'padding=5%' \
-o me-cutout.png
التقط صورة ثابتة للقص بدلًا من أخذ لقطة من الفيديو، لأن اللقطات غالبًا ما تكون مشوشة بسبب الحركة، واترك الزاوية السفلية اليمنى فارغة لأن YouTube يعرض مدة الفيديو هناك. تغطي صفحة الصور المصغّرة في YouTube جانب التصميم، ويشرح دليلنا للحصول على أول 1,000 مشترك لماذا تهم الصور المصغّرة إلى هذا الحد.
إزالة الخلفيات من ChatGPT أو Claude أو Cursor
ليست كل مهمة بحاجة إلى كود. تشغّل removebackground.dev أيضًا خادم MCP على https://removebackground.dev/mcp، فيمكنك رفع صورة في ChatGPT أو Claude أو Cursor أو VS Code أو n8n وطلب إزالة خلفيتها. في Claude Code يكفي أمر واحد:
claude mcp add --transport http removebackground https://removebackground.dev/mcp
ثم اكتب /mcp في Claude Code لتسجيل الدخول. يوفر الخادم ثلاث أدوات: remove_background، وget_job لعمليات الإزالة التي تستغرق أكثر من بضع ثوانٍ، وcheck_credits. تكلّف كل صورة رصيدًا واحدًا، كما في الواجهة.
كم التكلفة
تعمل removebackground.dev بنظام الدفع حسب الاستخدام دون اشتراك. لا تنتهي صلاحية الرصيد، والصور الفاشلة مجانية، وتحصل الحسابات الجديدة على 50 رصيدًا مجانيًا. عبر الواجهة، يعادل الرصيد الواحد عملية إزالة خلفية ناجحة واحدة بالدقة الكاملة.
| الباقة | الرصيد | السعر | للصورة |
|---|---|---|---|
| Starter | 4,000 | $17 | $0.0043 |
| Pro | 15,000 | $49 | $0.0033 |
| Scale | 40,000 | $99 | $0.0025 |
الأسعار بالدولار الأمريكي، ويمكن استرداد الرصيد غير المستخدم خلال 30 يومًا. تتوفر أسعار للكميات الأكبر من Scale عند الطلب. راجع صفحة الأسعار للتفاصيل الحالية.
الخلاصة
يتلخص التكامل المتين لإزالة الخلفية في بضع عادات: أبقِ المفتاح على خادمك، وتحقق من الحالة قبل حفظ الجسم، وانتظر المهمة بدلًا من إعادة الإرسال بعد 202، وأرسل Idempotency-Key مع كل طلب POST، واستخدم نقطة النهاية batch للعمل الجماعي.
المرجع الكامل، بما في ذلك مواصفة OpenAPI 3.1، موجود في وثائق API. وإذا كنت تعمل مع الفيديو إلى جانب الصور، فإن مقارنتنا لواجهات API لنصوص YouTube ودليل دمج تحويل الكلام إلى نص يستخدمان أنماط الإنتاج نفسها مع النصوص.
الأسئلة الشائعة
ما هي واجهة API لإزالة الخلفية؟+
هي نقطة نهاية HTTP تستقبل صورة وتعيد الصورة نفسها بعد إزالة خلفيتها، وعادةً تكون PNG بخلفية شفافة. ترسل ملفًا أو رابطًا أو base64، ويشغّل المزود نموذج التجزئة نيابةً عنك.
كيف أزيل خلفية صورة باستخدام Python؟+
استخدم مكتبة requests لإرسال الصورة بطلب POST إلى الواجهة مع مفتاحك في ترويسة، ثم احفظ جسم الاستجابة في ملف عندما تكون الحالة 200. إذا كانت الواجهة قد تجيب بـ 202 للصور البطيئة، فاستعلم عن رابط نتيجة المهمة بدلًا من إعادة إرسال الصورة. مثال Python في هذا الدليل يتعامل مع الحالتين.
كم تكلفة واجهة API لإزالة الخلفية؟+
يعتمد ذلك على المزود. تحتسب removebackground.dev رصيدًا واحدًا لكل صورة ناجحة، مع باقات رصيد تبدأ من 17$ مقابل 4,000 رصيد (0.0043$ للصورة) وتصل إلى 99$ مقابل 40,000 رصيد (0.0025$ للصورة). لا يوجد اشتراك، ولا تنتهي صلاحية الرصيد، والصور الفاشلة مجانية، وتحصل الحسابات الجديدة على 50 رصيدًا مجانيًا.
هل يمكنني الاستمرار في استخدام كود remove.bg بعد إغلاق واجهة remove.bg؟+
تنتهي واجهة remove.bg للخدمة الذاتية في 1 ديسمبر 2026 الساعة 09:00 بتوقيت CET. توفر removebackground.dev نقطة نهاية متوافقة مع remove.bg، فتغيّر الرابط من https://api.remove.bg/v1.0/removebg إلى https://removebackground.dev/v1.0/removebg وتستخدم مفتاح removebackground.dev في الترويسة X-Api-Key نفسها.
هل يمكنني استدعاء واجهة إزالة الخلفية مباشرة من المتصفح؟+
لا ينبغي ذلك. أي شخص يستطيع قراءة مفتاح API المضمّن في صفحة ويب أو تطبيق. أرسل الصور عبر الخادم الخلفي الخاص بك، واحتفظ بالمفتاح هناك، وأضف تسجيل دخول خاصًا بك وحدودًا للإنفاق لمستخدميك.
كيف أحصل على PNG بخلفية شفافة بدلًا من خلفية بيضاء؟+
اطلب الإخراج بصيغة PNG أو WebP واترك لون الخلفية دون تحديد. صيغة JPG لا تحفظ الشفافية، لذا تُدمج نتيجة JPG دائمًا على لون خالص.