استخرج لوحة الألوان السائدة من عينات الصورة
أربع درجات من الأحمر والأزرق في العينة، مع طلب لونين، تتحول إلى لونين هما #F24538 و#1E89E6، يغطي كل منهما 50 من أصل 100 بكسل. تندمج الدرجات المتقاربة، فتحصل على لوحة قصيرة بدل ألوان شبه مكررة. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- N
- 2
- المطلوب
- 2
- المُرجَع
- 2
- إجمالي البكسلات
- 100
حوّلوا قائمة ممثلة من بكسلات الصورة إلى لوحة ألوان موجزة وعملية. تجمع هذه الإمكانية قيم RGB المتقاربة، وترتب المجموعات بحسب حضورها الموزون، ثم تعرض كل لون سائد على هيئة عينة سداسية وقنوات RGB، إلى جانب عدد بكسلاته وحصته من العينة المقدمة. وهي مصممة لمسارات العمل التي سبق أن أخذت عينات البكسلات أو أحصتها وتحتاج إلى ملخص حتمي من دون رفع الصورة الأصلية أو فك ترميزها.
أعدّوا عينات بكسلات ممثلة للصورة
ابدؤوا ببكسلات مأخوذة من أنحاء الصورة كلها، لا من زاوية واحدة يسهل الوصول إليها. يحتوي كل سجل على قيم القنوات الحمراء والخضراء والزرقاء من 0 إلى 255. إذا كانت المعالجة المسبقة قد أحصت الألوان المتطابقة، فأضيفوا count إلى السجل؛ وإلا فاتركوه، وسيُمثل كل سجل بكسلاً واحداً.
تفيد السجلات الموزونة خصوصاً في الصور ذات المساحات الكبيرة المتجانسة، لأنها تحفظ التكرار الحقيقي من دون إلزامكم بتكرار كائن RGB نفسه آلاف المرات. ينبغي أن تكون العينات متوازنة مكانياً. عادة ما تعطي شبكة بسيطة أو خطوة منتظمة أو معاينة مصغرة تمثيلاً أفضل من أخذ أول البكسلات حسب ترتيب الملف.
استبعدوا البكسلات الشفافة ما لم تكن قد دُمجت مسبقاً مع الخلفية التي سيراها المشاهد، لأن قيمة RGB غير المرئية ينبغي ألا تؤثر في لوحة مرئية. تدمج الخوارزمية النسخ المتطابقة تماماً قبل التجميع؛ لذلك تعطي السجلات المتكررة وسجل مكافئ يحمل عدداً النتيجة نفسها. ويمكنكم اختيار صيغة الإدخال الأنسب لمسار معالجة صوركم.
افهموا آلية تجميع الألوان الحتمية
اختاروا n بوصفه الحد الأقصى لعدد الألوان السائدة المطلوبة. يجب أن يكون عدداً صحيحاً لا يقل عن 1، وتعيد الإمكانية ألواناً أقل عندما تحتوي العينة على عدد أقل من قيم RGB المختلفة. تُهيأ المراكز بصورة حتمية من عينات متكررة ومتباعدة جيداً، ثم تُنقح بواسطة تجميع موزون ومحدود داخل فضاء RGB.
لا تُستخدم بذرة عشوائية ولا ساعة ولا خدمة شبكة ولا نموذج، ولذلك ينتج الإدخال نفسه الإخراج نفسه. يمكن أن تنضم الدرجات المتقاربة إلى المجموعة ذاتها، فتسهم آثار الضغط وتنعيم الحواف والتدرجات والتغيرات الطفيفة في الإضاءة في عينة ممثلة بدلاً من تفتيت النتيجة إلى عناصر شبه متطابقة. قيمة RGB الممثلة هي المتوسط الموزون للمجموعة بعد تقريبه إلى قنوات صحيحة صالحة، وتُشتق القيمة السداسية من القنوات نفسها.
تُرتب المجموعات بحسب عدد البكسلات، مع حسم ثابت للتعادل بالقيمة السداسية. مسافة RGB بسيطة ومتوقعة عن قصد؛ فهي تقدم ملخصاً عملياً وليست نظاماً إدراكياً لإدارة الألوان في أعمال الطباعة الدقيقة.
استخدموا الأعداد والحصص في المعالجة اللاحقة
تحتوي الاستجابة على مصفوفة colors مرتبة من أكبر عدد ممثل من البكسلات إلى أصغره. يتضمن كل عنصر hex وكائن RGB وcount وshare. استخدموا العينة الأولى كتقدير تقريبي للون السائد، لكن افحصوا حصتها قبل افتراض أنها تمثل معظم الصورة.
فاللون الأول الذي تقترب حصته من النصف إشارة بصرية أقوى بكثير من اللون الأول في لوحة متوازنة من خمسة ألوان. وللأتمتة، احفظوا القائمة المرتبة كاملة حتى تتمكنوا من تغيير الحدود من دون إعادة معالجة العينات. تؤدي قيم القنوات غير الصالحة والسجلات المشوهة وn الأقل من 1 إلى أخطاء صريحة.
حالات الاستخدام
أنشئوا سمات واجهة متكيفة
اختاروا ألوان التمييز ومعالجة النصوص وخلفيات العناصر المؤقتة من لوحة مرتبة، واستعينوا بالحصة لتجنب المبالغة في إبراز لون ثانوي.
صنّفوا صور المنتجات حسب اللون
حوّلوا بكسلات الكتالوج المأخوذة كعينات إلى سمات لونية ثابتة تدعم المرشحات والبحث بالتشابه والمجموعات التجارية وفحوص الجودة.
لخّصوا المواد الإبداعية على نطاق واسع
احفظوا لوحات موجزة بدلاً من بيانات البكسلات الكاملة عند مقارنة الحملات أو اكتشاف الانحراف البصري أو تجميع مرشحات لوحات الإلهام.
الأسئلة الشائعة
لماذا قد تحتوي الاستجابة على ألوان أقل من n؟
القيمة المطلوبة حد أقصى. إذا احتوى الإدخال على قيم RGB مميزة أقل، فلن تُعاد إلا المجموعات المتاحة.
هل يلزم تكرار البكسلات المتطابقة؟
لا. قدموا سجل RGB واحداً واضبطوا count على تكراره، أو كرروا السجل؛ إذ تُدمج النسخ المتطابقة وتُوزن بالطريقة نفسها.
هل البكسلات الشفافة مدعومة؟
لا يحتوي الإدخال إلا على عينات RGB. استبعدوا البكسلات غير المرئية أو ادمجوا الشفافية مع الخلفية المقصودة قبل إنشاء القائمة.
كيف آخذ عينة البكسلات من صورتي؟
وزّع العينة على الصورة كلها: شبكة بسيطة أو خطوة منتظمة أو معاينة مصغرة تؤدي الغرض جيدًا. أما أخذ أول البكسلات في الملف أو زاوية واحدة فقد يعطي لوحة لا تمثل الصورة.
لماذا تتحول الدرجات المتشابهة إلى لون واحد؟
تُجمع الدرجات المتقاربة عمدًا، كي تضيف آثار الضغط والحواف الناعمة والتدرجات وتغيرات الإضاءة الصغيرة إلى لون واحد ممثل، بدل أن تتفرق إلى عناصر شبه متطابقة. وكل لون هو المتوسط الموزون لمجموعته.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/image/dominant-palette \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pixels":[{"r":244,"g":67,"b":54,"count":40},{"r":235,"g":76,"b":63,"count":10},{"r":33,"g":150,"b":243,"count":30},{"r":25,"g":118,"b":210,"count":20}]}'const res = await fetch("https://api.kit.forhosting.com/image/dominant-palette", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pixels": [
{
"r": 244,
"g": 67,
"b": 54,
"count": 40
},
{
"r": 235,
"g": 76,
"b": 63,
"count": 10
},
{
"r": 33,
"g": 150,
"b": 243,
"count": 30
},
{
"r": 25,
"g": 118,
"b": 210,
"count": 20
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/dominant-palette",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pixels": [
{
"r": 244,
"g": 67,
"b": 54,
"count": 40
},
{
"r": 235,
"g": 76,
"b": 63,
"count": 10
},
{
"r": 33,
"g": 150,
"b": 243,
"count": 30
},
{
"r": 25,
"g": 118,
"b": 210,
"count": 20
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/dominant-palette", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pixels":[{"r":244,"g":67,"b":54,"count":40},{"r":235,"g":76,"b":63,"count":10},{"r":33,"g":150,"b":243,"count":30},{"r":25,"g":118,"b":210,"count":20}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pixels":[{"r":244,"g":67,"b":54,"count":40},{"r":235,"g":76,"b":63,"count":10},{"r":33,"g":150,"b":243,"count":30},{"r":25,"g":118,"b":210,"count":20}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/dominant-palette", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"pixels": [
{
"r": 244,
"g": 67,
"b": 54,
"count": 40
},
{
"r": 235,
"g": 76,
"b": 63,
"count": 10
},
{
"r": 33,
"g": 150,
"b": 243,
"count": 30
},
{
"r": 25,
"g": 118,
"b": 210,
"count": 20
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.dominant_palette",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 15 |
max_megapixels | 12 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
استخدموا الأعداد والحصص في المعالجة اللاحقة
تمثل share عدد المجموعة مقسوماً على العدد الإجمالي الموزون للبكسلات، وتُقرب إلى ست منازل عشرية للحفاظ على JSON ثابت. تذكر الاستجابة أيضاً حجم اللوحة المطلوب والعدد المعاد فعلياً وtotal_pixels، مما يتيح للنظام المستهلك التحقق من التغطية والتمييز بين عينة صغيرة وصورة أُخذت منها عينات غنية. يستخدم المتصفح وAPI المحلل النقي نفسه، وتبلغ تكلفة كل استدعاء API مقدار $0.002.
أسئلة تقنية
ما تكلفة طلب API؟
تبلغ تكلفة كل طلب API مقدار $0.002. ويمكن تشغيل المحلل الحتمي نفسه في المتصفح أيضاً.
ماذا يحدث عندما تكون n أقل من 1؟
يفشل الطلب بخطأ invalid_input لأن لوحة الألوان لا يمكن أن تطلب أقل من مجموعة واحدة.