تحويل بكسلات RGB إلى رمادي بترجيح السطوع
حوّل قيم الأحمر والأخضر والأزرق إلى رمادي يطابق إحساس العين بالسطوع: يصبح الأحمر الصافي 76 والأخضر الصافي 150 والأزرق الصافي 29، بينما يبقى الرمادي المحايد 128 كما هو. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
حوّلوا عينات RGB في الصورة إلى تدرج رمادي من دون رفع ملف أو الاعتماد على مفكك ترميز للصور. أرسلوا مصفوفة مرتبة من البكسلات، لكل منها قنوات الأحمر والأخضر والأزرق، فتحصلون على العدد نفسه مع ضبط القنوات الثلاث على قيمة رمادية مرجّحة بالسطوع. يمنح الحساب الأخضر وزناً أكبر، ثم الأحمر فالأزرق، لتمثيل السطوع المدرك بصورة أدق من المتوسط البسيط. تُفحص كل قناة، لذلك ينتج عن البكسل الناقص أو القيمة غير الرقمية أو الخارجة عن النطاق من 0 إلى 255 خطأ واضح.
جهّزوا سجلات RGB كاملة
يجب أن يكون مصفوفة غير فارغة، وأن يكون كل عنصر كائناً يحمل الأسماء القياسية r وg وb. يجوز أن تكون قيم القنوات صحيحة أو كسرية، لكنها يجب أن تكون محدودة وبين 0 و255 ضمناً. يشترط المحول وجود كل قناة في كل سجل.
لا يفترض صفراً ولا ينسخ قناة أخرى ولا يتجاوز البكسل، لأن ذلك يغيّر السطوع والتطابق المكاني. حافظوا على ترتيب الإدخال؛ فالنتيجة تحفظه لإعادة بناء مخزن أو مصفوفة أو بيانات اختبار. تقبل الطلبية مئة ألف عينة كحد أقصى، لذا قسّموا الصور الأكبر إلى كتل حتمية.
تعالج هذه الواجهة عينات مفككة الترميز مسبقاً، لا بايتات PNG أو JPEG أو WebP.
افهموا حساب السطوع المرجّح
تساوي القيمة الرمادية لكل عينة أقرب عدد صحيح إلى 0.299 في الأحمر زائد 0.587 في الأخضر زائد 0.114 في الأزرق. مجموع المعاملات واحد، وهي تحافظ على حياد البكسل المحايد وتراعي حساسية البصر الأعلى للأخضر. قد يجعل المتوسط البسيط الأزرق أسطع والأخضر أغمق من إدراكهما الفعلي.
بعد التقريب مرة واحدة، تُكتب القيمة نفسها في r وg وb لتكوين رمادي RGB بلا صبغة لونية. تتضمن الاستجابة العدد والصيغة لتسهيل التدقيق. الدالة نقية؛ فلا تستخدم شبكة أو عشوائية أو ساعة أو نموذجاً خارجياً أو حالة قابلة للتغيير، ولذلك تعطي المدخلات المتطابقة نتائج متطابقة دائماً.
لا تنفذ العملية تصحيح غاما الخطي أو إدارة ملفات ICC أو HDR أو حفظ ألفا أو التنقيط، وينبغي تنفيذ هذه الخطوات في مسار متخصص عند الحاجة.
استخدموا النتيجة بأمان
اقرؤوا مصفوفة samples بديلاً موضعياً للمصفوفة المرسلة. يحتفظ كل سجل بثلاث قنوات، لذلك تستطيع أدوات RGB المعتادة استهلاكه بلا تنسيق خاص. قارنوا count بعدد العينات المرسلة قبل إعادة بناء الصفوف أو البلاطات أو الصورة النقطية.
يبقى العرض والارتفاع وخطوة الصف والاتجاه وألفا والبيانات الوصفية مسؤولية الجهة المستدعية. احتفظوا بألفا منفصلة ثم أعيدوا دمجها عند الترميز. تعاملوا مع أخطاء القناة الناقصة والعدد غير المحدود والنطاق والحجم بوصفها مشكلات بيانات، لا أعطال خدمة تستحق إعادة المحاولة.
اختبروا الأسود والأبيض والألوان الأساسية والرمادي المحايد والقيم الكسرية وعينة ناقصة.
حالات الاستخدام
إنشاء مخازن تدرج رمادي
حوّلوا عينات RGB المفككة ثم أعيدوها إلى مواقعها في الصورة النقطية قبل الترميز.
إعداد بيانات اختبار حتمية
أنشئوا قيماً متوقعة دقيقة لاختبار المرشحات وأدوات canvas ومسارات معالجة البكسلات.
الأسئلة الشائعة
ما صيغة التحويل إلى الرمادي؟
النتيجة هي round(0.299 × r + 0.587 × g + 0.114 × b)، ثم تُسند القيمة إلى القنوات الثلاث.
هل تقبل الخدمة ملف صورة؟
لا. تستقبل عينات RGB مفككة الترميز؛ نفّذوا فك الترميز وإعادته خارج الخدمة.
هل يُحفظ التشفيف؟
لا تدخل قناة ألفا في العقد. احتفظوا بها منفصلة ثم ادمجوها مع القنوات المحولة.
لماذا يصبح الأزرق الصافي أغمق بكثير من الأخضر الصافي؟
لأن العين ترى الأخضر أكثر سطوعًا من الأزرق بكثير، لذا تعطي الصيغة الأخضر وزن 0.587 والأزرق 0.114 فقط. فيصبح الأخضر الصافي 150 والأحمر الصافي 76 والأزرق الصافي 29.
ماذا يحدث إذا نقص أحد ألوان البكسل؟
يتوقف التحويل ويبيّن أي بكسل وأي قناة لونية ناقصة. ولا يفترض أبدًا أن القيمة الناقصة صفر ولا ينسخ قناة أخرى، لأن ذلك يغيّر السطوع ويخلّ بترتيب البكسلات.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/image/grayscale-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}'const res = await fetch("https://api.kit.forhosting.com/image/grayscale-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/grayscale-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/grayscale-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/grayscale-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.grayscale_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_samples | 100000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
جهّزوا سجلات RGB كاملة
أرسلوا البكسلات في حقل JSON المسمى samples. فإذا غابت القناة الخضراء مثلاً، يعرض invalid_input فهرس العينة والقناة الناقصة.
استخدموا النتيجة بأمان
يستخدم مشغل المتصفح الدالة الحتمية نفسها التي تستخدمها API. التشغيل في المتصفح مجاني، وتكلفة طلب API هي $0.002.
حالات التكامل
فحص دفعات صغيرة
الصقوا قيماً ممثلة لـRGB في المتصفح قبل أتمتة المسار عبر API.
أسئلة تقنية
ماذا يحدث إذا غابت قناة؟
يفشل الطلب برمز invalid_input ويحدد فهرس العينة المبتدئ من الصفر والقناة الناقصة r أو g أو b.
كم تبلغ تكلفة طلب API؟
تكلفة الطلب $0.002، ويمكنكم تشغيل التحويل نفسه مجاناً في المتصفح.