حوّل سطوع الصورة إلى فن ASCII بتدرج أحرف مخصص
حوّل شبكة مستطيلة من عينات السطوع الرمادي إلى فن ASCII واضح وقابل لإعادة الإنتاج.
شغّل الأداة مجانًا
أدخل أعدادًا صحيحة تبدأ من 0 للأسود وتنتهي عند 255 للأبيض، ثم اختر تدرج أحرف مرتبًا من الأشد قتامة إلى الأشد سطوعًا. تربط الأداة كل عينة بأقرب موضع في التدرج وتحافظ على شكل الشبكة في صورة أسطر نصية. تفيد هذه العملية في معاينات الطرفية، وواجهات العرض النصية، والبرمجة الإبداعية، ودروس معالجة الصور، ومسارات العمل التي تحسب مسبقًا متوسطات البكسلات أو الخلايا.
جهّز شبكة سطوع مناسبة
ابدأ بمصفوفة مستطيلة تمثل فيها كل مصفوفة داخلية سطرًا واحدًا من الناتج، وتمثل كل قيمة خلية حرف واحدة. يجب أن تكون العينات أعدادًا صحيحة بين 0 و255؛ إذ يعني 0 الظلام الكامل، ويعني 255 السطوع الكامل، وتمثل القيم بينهما درجات الرمادي. إذا كان المصدر صورة عالية الدقة، فصغّرها قبل استدعاء الأداة. احسب متوسط كتلة من البكسلات أو لخّصها لكل موضع حرف مطلوب، لأن تحويل كل بكسل إلى حرف ينتج عادة نصًا هائلًا ويبرز اختلاف النسب بين البكسل وشكل الحرف. حافظ على طول متساوٍ لجميع الصفوف حتى تبقى العلاقات المكانية واضحة. تناسب معاينة الطرفية عادةً 40 إلى 120 عمودًا مع عدد أقل من الصفوف، لأن الحروف أطول من عرضها في الغالب. تستقبل الأداة بيانات السطوع بدل ملف صورة، ولذلك يمكنك التحكم مسبقًا في التحجيم والقص وتحويل اللون والشفافية والتباين. بعد تثبيت تلك الخيارات، تنتج الشبكة نفسها النص نفسه دائمًا.
اختر تدرج ASCII وافهم طريقة عمله
اكتب التدرج بدءًا بالحرف الذي يمثل العينة الأشد قتامة وانتهاءً بالحرف الذي يمثل العينة الأشد سطوعًا. ينتقل تدرج مثل <code>@%#*+=-:. </code> من علامات كثيفة بصريًا إلى مسافة أخيرة، فتظهر المناطق السوداء برموز قوية وتندمج المناطق البيضاء في الخلفية. يمكنك عكس الترتيب لعرض فاتح على خلفية داكنة، أو استعمال <code>#.</code> للحصول على نتيجتين لونيتين واضحتين. يُعامل كل حرف Unicode بوصفه موضعًا واحدًا، بما في ذلك المسافات والرموز التعبيرية، لكن الحروف المعتادة ثابتة العرض تمنح محاذاة أدق. توزع الأداة المجال 0–255 على جميع مواضع التدرج ثم تقرّب كل عينة إلى أقرب موضع. الطرفان دقيقان: تختار القيمة 0 الحرف الأول دائمًا، وتختار 255 الحرف الأخير. يمكن تكرار الحروف لتوسيع نطاق لوني عمدًا. يُرفض التدرج الفارغ لعدم وجود حرف صالح للاختيار. تذكّر أن المسافة الأخيرة لها معنى حتى إن صعب رؤيتها في نموذج أو عارض JSON.
استخدم النص والبيانات الوصفية الناتجة
يتضمن الناتج <code>art</code>، وهي سلسلة واحدة تفصل بين أسطرها محارف السطر الجديد، وتصلح مباشرة للطرفية أو ملف نصي أو سجل أو كتلة شيفرة. ويتضمن كذلك <code>lines</code> في صورة مصفوفة، وهو أنسب عندما يحتاج البرنامج إلى إضافة مسافات بادئة أو حدود أو ألوان ANSI أو أرقام أسطر من دون تقسيم النص مرة أخرى. تتيح أعداد الصفوف والأعمدة التحقق من الأبعاد قبل العرض أو الحفظ، بينما يسجل <code>ramp_length</code> عدد أحرف Unicode المشاركة في التحويل. لا تطبق الأداة تنقيطًا عشوائيًا؛ لذلك قد تستخدم قيم سطوع متقاربة الحرف نفسه عندما يكون التدرج قصيرًا. هذا سلوك مقصود وقابل لإعادة الإنتاج. إذا أردت التنقيط، فطبّق انتشار خطأ حتميًا أو تنقيطًا مرتبًا عند إعداد الشبكة، ثم أرسل القيم الناتجة. استخدم خطًا ثابت العرض وحافظ على المسافات لضمان المحاذاة. في HTML، اعرض الناتج كنص داخل عنصر منسق مسبقًا لا كترميز، ولا سيما إذا احتوى التدرج على أقواس زاوية أو علامة العطف.
حالات الاستخدام
أنشئ معاينات للصور في الطرفية
حوّل خلايا رمادية مصغرة إلى نص مدمج يمكن عرضه في الصدفة والسجلات وأدوات سطر الأوامر.
اشرح تكميم السطوع
بيّن كيف تتحول قيم الرمادي التي تبدو متصلة إلى نطاقات لونية منفصلة عند ربطها بتدرج رموز محدود.
أنشئ رسومات نصية حتمية
ولّد عناصر ASCII قابلة لإعادة الإنتاج للتوثيق والاختبارات والواجهات القديمة ومشروعات البرمجة الإبداعية.
الأسئلة الشائعة
ما الترتيب الصحيح لأحرف التدرج؟
رتّب الأحرف من الرمز الذي يمثل السطوع 0 إلى الرمز الذي يمثل السطوع 255. يعطي التدرج من الكثيف إلى الخفيف النمط المألوف بحبر داكن على خلفية فاتحة.
ماذا يحدث إذا كان التدرج فارغًا؟
يفشل الطلب بخطأ إدخال غير صالح، لأنه لا يوجد أي حرف متاح لتمثيل قيمة السطوع.
هل تُقبل قيم السطوع العشرية؟
لا. يجب أن تكون كل عينة عددًا صحيحًا من 0 إلى 255 شاملًا الطرفين، حتى يظل عقد الإدخال والتحويل قابلين لإعادة الإنتاج.
هل تغيّر الأداة حجم الصورة؟
لا. إنها تحوّل شبكة مستطيلة مجهزة مسبقًا. غيّر حجم المصدر واحسب قيم الرمادي للخلايا قبل إرسال الطلب.
كم تبلغ تكلفة طلب API؟
تبلغ تكلفة كل طلب API مقدار $0.002. ويمكن أيضًا تنفيذ التحويل الحتمي نفسه مجانًا في المتصفح.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/image/ascii-art-map \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"samples":[[0,64,128,192,255],[255,192,128,64,0]],"ramp":"@%#*+=-:. "}'const res = await fetch("https://api.kit.forhosting.com/image/ascii-art-map", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"samples": [
[
0,
64,
128,
192,
255
],
[
255,
192,
128,
64,
0
]
],
"ramp": "@%#*+=-:. "
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/ascii-art-map",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"samples": [
[
0,
64,
128,
192,
255
],
[
255,
192,
128,
64,
0
]
],
"ramp": "@%#*+=-:. "
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/ascii-art-map", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"samples":[[0,64,128,192,255],[255,192,128,64,0]],"ramp":"@%#*+=-:. "}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"samples":[[0,64,128,192,255],[255,192,128,64,0]],"ramp":"@%#*+=-:. "}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/ascii-art-map", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"samples": [
[
0,
64,
128,
192,
255
],
[
255,
192,
128,
64,
0
]
],
"ramp": "@%#*+=-:. "
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.ascii_art_map",
"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 | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |