فك الضرب المسبق لألفا RGBA واستعادة قنوات اللون
ألغِ الضرب المسبق لألفا في بكسل واحد: الأحمر 0.125 والأخضر 0.25 والأزرق 0.375 مع ألفا 0.5 تعود إلى 0.25 و0.5 و0.75، وتبقى ألفا كما هي. وتُرفض ألفا الصفرية والألوان الأكبر من ألفا. مجانية في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- Red
- 0.125
- الأخضر
- 0.25
- الأزرق
- 0.375
- ألفا
- 0.5
- Red
- 0.25
- الأخضر
- 0.5
- الأزرق
- 0.75
- قيمة RGBA
- 0.25, 0.5, 0.75, 0.5
تستعيد أداة فك الضرب المسبق لألفا RGBA قنوات الأحمر والأخضر والأزرق المباشرة من بكسل مطبّع ذي ألوان مضروبة مسبقًا. أدخلوا أربع قنوات رقمية بين 0 و1، فتقسم الحاسبة كل مكوّن لوني على ألفا مع إبقاء قيمة ألفا الأصلية. وتتحقق أيضًا من أن اللون المضروب مسبقًا لا يتجاوز ألفا، وترفض ألفا الصفرية لأن اللون الأصلي لا يمكن استعادته عندئذ. تعرض النتيجة الحتمية قنوات مسماة ومصفوفة RGBA مرتبة، لتناسب أدوات الرسوم والاختبارات والمحولات ومسارات معالجة الصور.
افهموا الفرق بين ألفا المباشرة والمضروبة مسبقًا
يمكن تمثيل الشفافية في بيانات RGBA بطريقتين شائعتين. في صيغة ألفا المباشرة تُخزّن قيم الأحمر والأخضر والأزرق الأصلية بصورة مستقلة عن العتامة. أما في الصيغة المضروبة مسبقًا فتُخزّن كل قيمة لونية بعد ضربها في ألفا.
فمثلًا تتحول قيمة حمراء مباشرة مقدارها 0.8 مع ألفا 0.5 إلى قيمة حمراء مضروبة مسبقًا مقدارها 0.4. يسهّل هذا التمثيل عدة عمليات تركيب ويحد من بعض العيوب اللونية عند الحواف الشفافة، لكن القنوات المخزنة لا تعود واصفة للون الأصلي مباشرة. تعكس هذه القدرة العملية لبكسل مطبّع واحد؛ فتقسم الأحمر والأخضر والأزرق على ألفا، ثم تعيد ألفا من دون تغيير.
تستخدم المدخلات المجال من 0 إلى 1 بدل قيم البايت من 0 إلى 255، لذلك تظل العلاقة الكسرية واضحة. وتقدم الاستجابة كل قناة مستعادة باسمها، إلى جانب مصفوفة RGBA بترتيب الأحمر والأخضر والأزرق وألفا للأنظمة التي تعتمد المواضع.
اعرفوا لماذا تُرفض ألفا الصفرية
لا يُعرّف فك الضرب المسبق إلا عندما تكون ألفا أكبر من الصفر. إذا كانت ألفا صفرًا، كانت جميع القنوات المضروبة مسبقًا على نحو صحيح صفرًا أيضًا، مهما كان لونها المباشر قبل الضرب. لذلك قد يكون البكسل الشفاف ذو الأحمر 0 والأخضر 0 والأزرق 0 وألفا 0 قد نشأ من أي لون RGB، ولا تستطيع القسمة على الصفر استعادة جواب وحيد.
إن إعادة الأسود أو إبقاء الأصفار أو اختراع قيمة بديلة سيضيف معلومات لا توجد في المدخل. كما ترفض الأعداد غير المنتهية، والقنوات الخارجة عن المجال المطبّع، وأي قناة لون مضروبة مسبقًا تتجاوز ألفا. يحافظ الفحص الأخير على الخاصية المتوقعة للبيانات المطبّعة ويمنع نتيجة مباشرة أكبر من 1.
وهكذا تظهر المشكلات قبل وصول بكسل غير صالح إلى عارض أو مظلل أو محول أصول أو مقارنة آلية.
حالات الاستخدام
تحويل مخرجات الواجهات الرسومية
استعيدوا الألوان المباشرة المطبّعة قبل تمرير البكسلات إلى واجهة تتوقع قيم RGB وألفا مستقلة.
التحقق من حسابات التركيب
اختبروا عينات معلومة مضروبة مسبقًا وقارنوا القنوات المستعادة بالقيم المباشرة المتوقعة.
توحيد سجلات الأصول
حوّلوا سجلات RGBA المنفردة إلى تمثيل ألفا مباشر ومتسق قبل التسلسل أو الفحص أو التحويل.
الأسئلة الشائعة
ما مجال القنوات المقبول؟
يجب أن تكون القنوات الأربع أعدادًا منتهية ومطبّعة بين 0 و1، وأن تكون ألفا أكبر من الصفر.
لماذا لا يجوز أن يتجاوز اللون المضروب مسبقًا ألفا؟
لأن ضرب لون مطبّع لا يتجاوز 1 في ألفا لا يمكن أن ينتج قيمة أكبر من ألفا.
هل تحوّل الأداة فضاءات اللون أو تصحح غاما؟
لا. إنها تفك الضرب المسبق حسابيًا للقنوات المقدمة فقط؛ حوّلوا فضاء اللون بصورة منفصلة.
هل تُقرّب النتيجة القنوات المستعادة أو تقصّها؟
لا. تضمن المدخلات الصالحة المجال المطبّع، وكل لون ناتج عن قسمة قيمته المضروبة مسبقًا مباشرة على ألفا.
ما الفرق بين ألفا المباشرة وألفا المضروبة مسبقاً؟
تحفظ ألفا المباشرة اللون الأصلي منفصلاً عن العتامة، بينما تحفظ ألفا المضروبة مسبقاً كل لون بعد ضربه في ألفا. فالأحمر المباشر 0.8 مع ألفا 0.5 يُحفظ مضروباً مسبقاً بقيمة 0.4.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/color/unpremultiply \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"red":0.125,"green":0.25,"blue":0.375,"alpha":0.5}'const res = await fetch("https://api.kit.forhosting.com/color/unpremultiply", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"red": 0.125,
"green": 0.25,
"blue": 0.375,
"alpha": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/unpremultiply",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"red": 0.125,
"green": 0.25,
"blue": 0.375,
"alpha": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/unpremultiply", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"red":0.125,"green":0.25,"blue":0.375,"alpha":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"red":0.125,"green":0.25,"blue":0.375,"alpha":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/unpremultiply", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"red": 0.125,
"green": 0.25,
"blue": 0.375,
"alpha": 0.5
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.unpremultiply",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
اعرفوا لماذا تُرفض ألفا الصفرية
ولهذا ترفض الحاسبة ألفا الصفرية بخطأ `invalid_input`.
استخدموا استعادة القنوات الحتمية ضمن سير العمل
أرسلوا بكسلًا واحدًا في حقول الأحمر والأخضر والأزرق وألفا. تعيد القيم 0.125 و0.25 و0.375 مع ألفا 0.5 ألوانًا مباشرة مقدارها 0.25 و0.5 و0.75، مع بقاء ألفا 0.5. لا تتضمن العملية تقريبًا أو تحويل فضاء لوني أو تصحيح غاما أو قصًا أو تكميم بايت أو عشوائية أو ساعة أو تنسيقًا محليًا. استخدموا هذه العملية عندما توفر مكتبة صور أو API رسومية أو عملية تصدير لوحة أو مسار مواد أو أصل متسلسل قنوات مطبّعة مضروبة مسبقًا، بينما يتوقع النظام التالي ألفا مباشرة. الحساب قسمة مباشرة وفق قواعد أرقام ECMAScript، ولذلك ينتج إدخال JSON صالح ومتطابق النتيجة نفسها في المتصفح وعبر API. يبلغ سعر API مقدار $0.002 لكل طلب. لمعالجة صورة كاملة، أدرجوا العملية ضمن مسار بكسلات محدود بدل اعتبار نقطة النهاية أحادية العنصر أداة لفك الصورة، وتحققوا دائمًا من أن المصدر مضروب مسبقًا فعلًا.
أسئلة تقنية
ماذا يحدث عندما تكون ألفا صفرًا؟
يفشل الطلب بخطأ `invalid_input` لأن البيانات المضروبة مسبقًا والشفافة كليًا لا تحتفظ بلون مباشر وحيد.