شيفرة هذه الصفحة لم تبدأ العمل.

فتح index.html مباشرة من مجلد يمنع المتصفح من تحميل وحدات JavaScript، فلا يحدث شيء عند اختيار صورة. قدّم المجلد عبر HTTP بدلا من ذلك:

powershell -ExecutionPolicy Bypass -File serve.ps1

ثم افتح http://localhost:8080/.

صانع الصور الشخصية — صور جواز السفر والتأشيرة بالمواصفة

اختر البلد. فيطبّق قاعدة ذلك البلد، بالضبط.

اللغة: العربية
عرض الشيفرة المصدرية
صورك لا تُرفع أبدا. لا يوجد خادم.

القصُّ والقياسُ وقراءةُ الخلفية والطباعةُ، كلها تجري داخل متصفحك أنت، على جهازك أنت، بمرمِّز JPEG الذي يأتي به أصلاً. لا تملك هذه الأداة أي وظيفة شبكية على الإطلاق — لا شيء تجلبه ولا شيء ترسله — ولا يقف خلف هذه الصفحة خادم تُرسَل إليه صورةٌ لوجهك، حتى لو كان فيها ما يرسلها.

فحص حي: جارٍ الفحص…

دون اتصال: جارٍ الفحص…

لا داعي لأن تصدّقنا: افتح أدوات المطوّر، وراقب تبويب «الشبكة»، ثم اصنع صورة جواز سفر. لن يحمل أي طلب صورةً ولا مصغَّرة ولا اسم ملف ولا بايتاً واحداً مما اخترته. أو اقطع الاتصال بالإنترنت واصنع واحدة رغم ذلك.

1 اختر الصورة

أي صورة يستطيع متصفحك فتحها. وصورةٌ بهاتف ملتقَطة أمام جدار سادة، في ضوء النهار، من نحو متر ونصف، هي ما كُتِبت حولها معظم هذه القواعد — وتُقرأ من قرصك مباشرة، ولا تُرسَل إلى أي مكان.

2 اختر البلد والمستند

كل رقم أدناه هو المطلب المنشور، منقولاً عن الجهة المسمّاة تحته. ولا شيء في هذه القائمة مخمَّن، ولا شيء فيها يُجلَب — فهي جدول في src/specs.js، يُخدَم مع الصفحة.

3 علّم على الوجه، وتحقّق من التأطير

التاج، والذقن، وكل بؤبؤ. تلك النقاط الأربع هي كل ما تقيسه القاعدة، فيُؤخَذ القصّ من حيث تنتهي — فاسحب ما حطّ منها في غير موضعه، ثم اضغط اضبط الإطار. وإيجادُها يقرأ الصورة نفسها: حافّة رأسك في مقابل الجدار الذي خلفه، والرقع الأدكن حيث تكون العيون. وليس فيه نموذج ولا شيء يُجلَب، وهو موضع بداية لا حُكم، ولذلك كان لك أن تصحّحه ولذلك تقول اللوحة أدناه أياً من الأربع عجزت عن قياسه.

اختر صورة فيظهر إطار القص هنا.

4 الخلفية

تُقرأ من شريط عبر أعلى القصّ ونزولاً على كل جانب، فوق الكتفين — أجزاءِ الإطار التي ينبغي ألا يكون فيها إلا الخلفية. وتُقاس في فضاء CIE Lab لا في RGB، لأن رماديَّين يفصل بينهما أربعون وحدة RGB لا يُفرَّق بينهما، وأربعين وحدة من الأزرق لون آخر.

5 احفظها

عرض بصيغة Markdown

كيف تصنع صورة جواز سفر لا تُردّ

  1. اختر الصورة. صورة بهاتف أمام جدار سادة، في ضوء النهار، ملتقَطة من نحو متر ونصف. يقرؤها المتصفح من قرصك مباشرة؛ ولا يُرسَل شيء إلى أي مكان أثناء ذلك.
  2. اختر البلد والمستند. عندها تعرض اللوحة مقاس الطباعة لتلك القاعدة، ونطاق ارتفاع الرأس، وخطّ العينين، ولون الخلفية، وحدود الرفع — ومعها الجهة التي صدر عنها كل رقم وتاريخ قراءته. ولا شيء في تلك القائمة مخمَّن، وما أُرسِل إليك وليس فيها يدخل تحت «أي مكان آخر».
  3. تحقّق من النقاط الأربع على وجهك. التاج، والذقن، وكل بؤبؤ — فتلك النقاط الأربع هي كل ما تقيسه القاعدة. وهي موضوعة بقياس الصورة نفسها، والسطر الذي تحتها يقول أياً منها نجح وأياً منها اضطرّ إلى استنتاجه؛ فاسحب ما حطّ منها في غير موضعه، أو حوِّل إلى سأضعها بنفسي وضَع الأربع كلها بنفسك. ثم اضغط اضبط الإطار فيحطّ القصّ حيث يريده ذلك البلد.
  4. اقرأ الفحوص الأربعة، والخلفية. ارتفاع الرأس، وخطّ العينين، والتوسيط، والميل، كلٌّ مقيسٌ من الإطار كما هو وكلٌّ يقول إلى أي جهة تسحب إن كان خارجاً. وتُقرأ الخلفية من أعلى القصّ ومن جانبيه وتُقارَن باللون الذي تطلبه القاعدة — أما التفاوت، وهو ما يردّ الصور فعلاً، فيُقاس على حدة عن اللون.
  5. خذ الملفات الثلاثة. ملف الطباعة، بالمليمترات بالضبط والدقة مكتوبة في الملف كي يطبعه المحلّ بالمقاس الصحيح. وملف الورقة، بأكبر عدد من النُّسَخ تحمله ورقة ⁦4 × 6⁩ وعلامات قصّ في الفجوات. وملف الرفع، بمقاس البكسل الذي تفرضه البوابة وداخل نطاق الـ KB الذي تفرضه من الطرفين.

النسخة الأطول

كيف تلتقط صورة جواز سفر لا تُرَدّ عليك على ماذا تُقاس صورةُ جواز السفر فعلاً - ارتفاعُ الرأس وخطُّ العينين والخلفية - وأيُّ بلد يريد أيَّ أرقام، وكيف تصيب حدود البكسلات والكيلوبايتات التي تفرضها استمارةٌ على الإنترنت.

أسئلة

هل تُرفع صورتي إلى أي مكان؟

لا. يفكّ متصفحك أنت ترميز الصورة ويقصّها ويقيسها ويكتبها على جهازك أنت، بمرمِّز JPEG الذي يأتي به المتصفح أصلاً. لا تملك هذه الأداة أي وظيفة شبكية على الإطلاق — فهي لا تجلب شيئاً ولا ترسل شيئاً — وContent-Security-Policy الخاصة بالصفحة تُسمّي كل عنوان يجوز لها الاتصال به، وليس واحد منها لنا. وذلك هنا أثمن منه في معظم الأدوات: فالملف صورةٌ لوجهك.

ما البلدان المشمولة؟

المواصفات المنقولة حتى الآن هي معيار ICAO نفسه، والولايات المتحدة (جواز السفر وطلب تأشيرة التنوّع، ولهما قواعد رفع مختلفة)، والمملكة المتحدة، وتأشيرة شنغن، وألمانيا، وكندا، وأستراليا، والهند (جواز السفر، ومقاس الطباعة ⁦35 × 45⁩ مم، وصورة استمارة SSC/UPSC والتوقيع)، والصين، واليابان. ويُسمّي كل مدخل الجهة التي جاء منها وتاريخ قراءته. وما عدا ذلك يدخل تحت «أي مكان آخر»، حيث كل رقم لك تكتبه — ولأن معظم العالم يُصدر على هندسة ICAO، فذلك المدخل يبدأ عليها.

كيف يجد التاج والذقن والعينين دون نموذج وجوه؟

باستعمال شيء لا يُسمح لكاشف وجوه عام أن يفترضه وتُسمح به هذه الأداة: فكل واحدة من هذه المواصفات تفرض المشهد نفسه — شخص واحد، مواجهٌ للكاميرا، أمام جدار سادة متساوي الإضاءة. فيُقرأ لون الجدار من حافّة الصورة، وكل ما ليس ذلك اللون هو الشخص، وأعلاه هو التاج بالشعر. ويُوجَد البؤبؤان بوصفهما أفضل زوج من الرقع الأدكن مما حولها، متساويَي المستوى، على جانبَي وسط الرأس — وهي مقارنة موضعية، فليس فيها ما يتوقّف على لون الوجه. أما الذقن فهو الذي لا يمكن إيجاده هكذا، لأن الفكّ في مقابل العنق حافّة لينة لا تغيّر لون عبرها؛ فيُستنتَج من البؤبؤين، وهما يقعان أسفل منتصف الرأس قليلاً بعد حساب الشعر الذي فوقه، ثم يُتحقَّق منه في مقابل الخطّ الخارجي. وكل ذلك حسابٌ في src/detect.js: لا أوزان، ولا زمن تشغيل استدلال، ولا شيء يُجلَب، والحساب نفسه لكل وجه يمرّ به. وذلك الأخير هو المهمّ، لأن الكاشف المشحون يخطئ على نحو غير متساوٍ — أسوأ في وجوه منه في أخرى — والذين تُردّ صورهم أكثر من غيرهم أصلاً هم الذين كان سيخذلهم.

كم ينبغي أن أثق بالنقاط التي يضعها؟

ثقةَ من يبدأ منها، لا ثقةَ من يترك النظر إليها. فلكل واحدة من الأربع صورةٌ تخطئ فيها: الجدار المزخرف أو رفّ الكتب لا يترك خطاً خارجياً يُوجَد الرأس في مقابله، والرأس المقصوص من أعلاه لا تاج له في الصورة أصلاً، والنظارة أو الغرّة الكثيفة أو العينان المغمضتان قد تضع البؤبؤين على معلم آخر. فتقول الأداة جهراً أياً من الأربع قاست وأياً منها اضطرّت إلى استنتاجه، وترفض صراحةً صورةً لا خلفية سادة فيها بدل أن تخترع جواباً، وتترك كل نقطة قابلة للسحب. ويُؤخَذ القصّ من حيث تنتهي النقاط، لا من حيث بدأت. وإن كنت تفضّل وضع الأربع بنفسك، فالمفتاح فوق الصورة يقول سأضعها بنفسي، وتحريكُ أي نقطة بيدك يقلب إليه من تلقائه — ومن تلك اللحظة صارت لك ولن يحرّكها شيء بعد.

ما قاعدة ارتفاع الرأس، ولماذا تفشل صورتي فيها دائماً؟

كل واحدة من هذه المواصفات تنصّ على كم يملأ الرأس من الإطار، مقيساً من أسفل الذقن إلى أعلى الرأس بالشعر — وهو عادةً 70 إلى 80 في المئة، أي 31.5 إلى 36 مم لصورة بارتفاع 45 مم. والسبب المعتاد للفشل صورةٌ ذاتية: فطول الذراع نحو 60 سم، وذلك يشوّه الوجه ويجعل الرأس أكبر مما ينبغي في الإطار. والسبب الثاني المعتاد هو التاج — فهو أعلى الشعر لا منبته، ووضعُ العلامة عند منبت الشعر يُخرِج كل رأس أصغر مما ينبغي.

لماذا يجب ألا يقلّ الملف عن 20 KB، وكيف يمكن حشوه؟

بوابات الامتحانات الهندية واستمارة التأشيرة الصينية ورفع جواز السفر البريطاني، كلها تنصّ على حدّ أدنى لحجم الملف كما تنصّ على حدّ أقصى، لأن الملف الأصغر منه يكون عادةً مصغَّرة رفعها أحدهم سهواً. وصورةٌ بمقاس ⁦200 × 230⁩ هي 46,000 بكسل، وبأعلى جودة يكتبها متصفح قد تحطّ عند 15 KB، ولا سبيل إلى تكبيرها بضغط أقل. فتضيف الأداة مقطع تعليق JPEG مملوءاً بالمسافات. وذلك جزء من معيار JPEG، وكل فاكِّ ترميز يتخطّاه، والصورة هي الصورة نفسها بتّاً ببتّ — وإنما طال الملف. ويقول الحشو ذلك بالضبط، بالإنجليزية، داخل الملف.

هل يفحص الخلفية، وهل يستطيع استبدالها؟

يفحص ولن يستبدل. يُقرأ اللون من شريط عبر أعلى القصّ ونزولاً على كل جانب، فوق الكتفين، ويُقارَن بلون القاعدة في فضاء CIE Lab لا في RGB — فرماديّان يفصل بينهما أربعون وحدة RGB لا يُفرَّق بينهما، وأربعون وحدة من الأزرق لون آخر. ويُقاس التفاوت على حدة، لأن الظلّ على جدار أبيض هو ما يردّ الصور فعلاً، وليس مشكلة لون. أما استبدال الخلفية فيعني اقتطاع شخص من صورة، وذلك نموذج تجزئة، ورديئه يأكل الشعر. والوقوف على بُعد قدم أخرى من الجدار يصلح من هذه أكثر مما يصلح أي مرشِّح.

ما فائدة ورقة ⁦4 × 6⁩؟

الكشك يتقاضى عدة جنيهات مقابل ست صور. ومحلّ الطباعة يطبع ورقة ⁦6 × 4⁩ بفلوس قليلة وكلهم يفعلها. فتضع الأداة من نُسَخ صورتك ما تحمله الورقة — ثماني نسخ، لصورة ⁦35 × 45⁩ على ورقة ⁦6 × 4⁩ — مع علامات قصّ في الفجوات ولا شيء مطبوع فوق صورة. ولا شيء يُقاس ليتّسع: فكل نسخة بالمقاس الذي تطلبه القاعدة بالضبط، لأن ورقةً صغّرتها اثنين في المئة كي تُدخل واحدة أخرى تكون ثماني صور كلها بالمقاس الخطأ. اطبعها عند 100 في المئة؛ فـ «ملاءمة الصفحة» هو ما يُخرِج الورقة خطأً.

لماذا يهمّ الـ dpi إن كانت البكسلات هي هي؟

لأن ملف JPEG يستطيع أن يقول ما مقاسه، وإن لم يقل خمّن ما يطبعه. والدقة تقبع في ترويسة JFIF، ولوحةُ المتصفح تكتب تلك الترويسة وحقل الوحدات فيها مضبوط على «هذه نسبة أبعاد لا دقة». فتعيد هذه الأداة كتابة تلك البايتات القليلة كي يقول الملف 300 dpi، وهو ما يحوّل ⁦413 × 531⁩ بكسلاً إلى صورة ⁦35 × 45⁩ مم بدل صورة بلا مقاس بعينه. ولا شيء يُفكّ ترميزه لفعل ذلك ولا جودة تُنفَق.

هل يستطيع صنع ملف التوقيع كذلك؟

نعم — فاستمارتا SSC وUPSC تريدان واحداً بمقاس ⁦140 × 60⁩ بكسلاً وبين 10 و20 KB، وهو في القائمة بوصفه مواصفة قائمة بذاتها. وتُطفأ طبقةُ الوجه له، إذ لا خطّ عينين لتوقيع، والذي يُفحَص بدلاً منها أن الورق فاتح، وأن عليه حبراً، وأن القصّ لم يلتقط سطراً مسطَّراً ولا حافّة الصفحة. وبلوغُ 10 KB هو الجزء الصعب من تلك القاعدة، لا البقاء تحت 20.

هل يضمن هذا قبول طلبي؟

لا، ولا يستطيع ذلك بصدق أي أداة. وإنما يطبّق الأرقام المنشورة بالضبط ويعرض عليك كل قياس قاسه، كي تكون الأشياء التي تقيسها الاستمارة آلياً — مقاس البكسل، وحجم الملف، والصيغة — صحيحةً، وتكون الأشياء التي يقيسها فاحص بشري — ارتفاع الرأس، وخطّ العينين، والخلفية — أمامك وعليها أرقام. والقواعد تتغيّر كذلك: فكل مواصفة هنا تقول من أي جهة جاءت ومتى قُرِئت، كي تستطيع مقابلتها بالاستمارة التي أمامك بدل أن تثق بجدول.

هل هو مجاني، وهل أحتاج إلى حساب؟

هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية ولا علامة مائية مطبوعة عبر وجهك. ولا حدّ لعدد الصور التي تصنعها كذلك، إذ لا خادم يدفع ثمنها. ويحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا يُعطى المعلنون شيئاً عن صورتك.

هل يعمل دون اتصال؟

نعم. حمِّل الصفحة مرة، ثم اقطع اتصالك بالإنترنت وستظل تعمل — فكتاب القواعد ملفٌّ يُخدَم مع الصفحة لا استعلام. وهذه أيضاً أبسط طريقة لإثبات أنه لا يُرفع شيء: فأداةٌ ترسل صورتك بعيداً لتُقَصّ كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.