De code van deze pagina is niet gestart.

Open je index.html rechtstreeks uit een map, dan worden JavaScript-modules geblokkeerd en gebeurt er niets zodra je een foto kiest. Serveer de map in plaats daarvan over http:

powershell -ExecutionPolicy Bypass -File serve.ps1

Open daarna http://localhost:8080/.

Pasfoto maken — paspoort- en visumfoto's op maat

Kies het land. Hij past die regel toe, precies.

Taal: Nederlands
Broncode bekijken
Je foto's worden nooit geüpload. Er is geen server.

Het uitsnijden, het meten, het uitlezen van de achtergrond en het printen gebeuren allemaal in je eigen browser, op je eigen hardware, met de JPEG-encoder die er al in zit. Deze tool heeft geen enkele netwerkfunctie, niets op te halen en niets te versturen, en al was die er wel, dan zit er aan de andere kant van deze pagina nog steeds geen server waar een foto van je gezicht naartoe kan.

Live controle: bezig met controleren…

Offline: bezig met controleren…

Geloof ons vooral niet op ons woord. Open DevTools, hou het tabblad “Netwerk” in de gaten en maak een pasfoto. Geen enkel verzoek draagt een afbeelding, een miniatuur, een bestandsnaam of ook maar één byte van wat je koos. Of trek de stekker uit je internet en maak er alsnog een.

1 Kies de foto

Elk plaatje dat je browser kan openen. Een telefoonfoto tegen een effen muur, bij daglicht, van zo'n anderhalve meter afstand is waar de meeste van deze regels omheen geschreven zijn — en hij wordt rechtstreeks van je schijf gelezen, niet ergens heen gestuurd.

2 Kies het land en het document

Elk cijfer hieronder is de gepubliceerde eis, overgenomen van de instantie die eronder genoemd wordt. Niets aan deze lijst is gegokt, en niets ervan wordt opgehaald: het is een tabel in src/specs.js, meegeleverd met de pagina.

3 Markeer het gezicht en controleer de kadrering

De kruin, de kin en elke pupil. Die vier punten zijn het hele verhaal van wat een regel meet, en de uitsnede wordt genomen waar ze uiteindelijk staan — sleep het punt dat verkeerd is geland, en druk dan op Pas het kader aan. Ze vinden is de foto zelf opmeten: de rand van je hoofd tegen de muur erachter, en de donkerdere plekken waar ogen zitten. Er zit geen model in en er wordt niets opgehaald, en het is een startpositie en geen oordeel — daarom is het aan jou om het te verbeteren, en daarom zegt de regel hieronder welke van de vier niet gemeten kon worden.

Kies een foto, dan verschijnt hier het uitsnedekader.

4 De achtergrond

Gelezen uit een strook over de bovenkant van de uitsnede en langs beide zijkanten, boven de schouders — de delen van het beeld die niets anders dan achtergrond horen te zijn. Gemeten in CIE Lab in plaats van in RGB, want twee grijzen die veertig RGB-eenheden uit elkaar liggen zijn niet te onderscheiden en veertig eenheden blauw is een andere kleur.

5 Sla het op

Als Markdown bekijken

Zo maak je een pasfoto die niet teruggestuurd wordt

  1. Kies de foto. Een telefoonfoto tegen een effen muur, bij daglicht, van zo'n anderhalve meter afstand. De browser leest hem rechtstreeks van je schijf, en er gaat ondertussen niets ergens heen.
  2. Kies het land en het document. Het paneel laat dan het printformaat, de hoofdhoogteband, de ooglijn, de achtergrondkleur en de uploadgrenzen van die regel zien, samen met de instantie waar elk cijfer vandaan komt en de datum waarop het gelezen is. Niets op die lijst is gegokt, en alles wat je toegestuurd hebt gekregen en er niet op staat vul je in onder “Ergens anders”.
  3. Controleer de vier stippen op je gezicht. Kruin, kin en elke pupil — die vier punten zijn het hele verhaal van wat de regel meet. Ze worden gezet door de foto zelf op te meten, en de regel eronder zegt welke dat lukte en welke afgeleid moesten worden. Sleep wat verkeerd is geland, of zet hem op Ik zet ze zelf en doe alle vier met de hand. Druk dan op Pas het kader aan en de uitsnede landt waar dat land hem hebben wil.
  4. Lees de vier controles, en de achtergrond. Hoofdhoogte, ooglijn, centrering en scheefstand, elk gemeten aan het kader zoals het nu staat en elk met erbij welke kant je op moet slepen als het buiten de norm valt. De achtergrond wordt uit de bovenkant en de zijkanten van de uitsnede gelezen en vergeleken met de kleur die de regel vraagt; de ongelijkmatigheid, waar foto's werkelijk op worden afgekeurd, wordt los van de kleur gemeten.
  5. Neem de drie bestanden mee. De print, op de exacte millimeter, met de resolutie in het bestand geschreven zodat een winkel hem op het juiste formaat afdrukt. Het vel, met zo veel kopieën als er op een ⁦10 × 15⁩ passen en snijtekens in de tussenruimtes. En de upload, op het pixelformaat dat het portaal eist en binnen de KB-band die het aan beide kanten afdwingt.

De uitgebreide versie

Een pasfoto maken die niet teruggestuurd wordt Waar een pasfoto werkelijk op gemeten wordt — hoofdhoogte, ooglijn, achtergrond —, welk land welke getallen wil, en hoe je de pixel- en KB-grenzen van een online formulier haalt.

Vragen

Wordt mijn foto ergens naartoe geüpload?

Nee. Het beeld wordt gedecodeerd, uitgesneden, gemeten en weggeschreven door je eigen browser op je eigen hardware, met de JPEG-encoder die de browser al meelevert. Deze tool heeft geen enkele netwerkfunctie: hij haalt nooit iets op en verstuurt nooit iets, en de Content-Security-Policy van de pagina noemt elk adres dat ze mag benaderen, waarvan er geen enkele van ons is. Dat is hier meer waard dan bij de meeste tools: het bestand is een foto van je gezicht.

Welke landen zitten erin?

De tot nu toe overgenomen specificaties zijn de ICAO-norm zelf, de Verenigde Staten (paspoort en de inschrijving voor de visumloterij, die verschillende uploadregels hebben), het Verenigd Koninkrijk, het Schengenvisum, Duitsland, Canada, Australië, India (paspoort, de afdruk van ⁦35 × 45⁩ mm en de formulierfoto en handtekening voor SSC en UPSC), China en Japan. Elke ingang noemt de instantie waar hij vandaan komt en de datum waarop hij gelezen is. Al het andere vul je in onder “Ergens anders”, waar elk cijfer van jou is; en omdat het grootste deel van de wereld op de ICAO-geometrie uitgeeft, begint die ingang daar ook mee.

Hoe vindt het de kruin, de kin en de ogen zonder gezichtsmodel?

Door iets aan te nemen wat een algemene gezichtsdetector niet mag aannemen en deze tool wel: al deze regels eisen hetzelfde tafereel — één persoon, recht in de camera, tegen een egale, gelijkmatig verlichte muur. De kleur van de muur wordt dus van de rand van de foto gelezen, alles wat die kleur niet is, is de persoon, en het hoogste daarvan is de kruin, haar inbegrepen. De pupillen worden gezocht als het beste paar plekken dat donkerder is dan zijn eigen omgeving, op gelijke hoogte en aan weerszijden van het midden van het hoofd — een vergelijking die plaatselijk is, dus niets erin hangt af van welke kleur een gezicht heeft. De kin is de enige die zo niet te vinden is, want een kaak tegen een hals is een zachte rand zonder kleurverschil; die wordt afgeleid uit de pupillen, die net onder het midden van een hoofd zitten zodra het haar erboven wordt meegeteld, en daarna tegen de omtrek gehouden. Het is allemaal rekenwerk, in src/detect.js: geen gewichten, geen inferentie-omgeving, niets opgehaald, en hetzelfde rekenwerk voor elk gezicht. Dat laatste is wat telt, want een meegeleverde detector heeft het ongelijk mis — slechter bij sommige gezichten dan bij andere — en de mensen van wie de foto’s toch al het vaakst worden afgekeurd zijn juist degenen die hij zou laten vallen.

Hoeveel moet ik vertrouwen op de stippen die het zet?

Genoeg om ervan uit te gaan, niet genoeg om er niet naar te kijken. Bij elk van de vier hoort een foto waarop het misgaat: een muur met een motief of een boekenkast laat geen omtrek over om een hoofd tegen af te steken, een hoofd dat bovenaan is afgesneden heeft helemaal geen kruin in de foto, en een bril, een dikke pony of dichte ogen kunnen de pupillen op het verkeerde kenmerk zetten. Daarom zegt de tool hardop welke van de vier het gemeten heeft en welke het moest afleiden, weigert het botweg bij een foto zonder egale achtergrond in plaats van een antwoord te verzinnen, en laat het elke stip versleepbaar. De uitsnede wordt genomen waar de stippen uiteindelijk staan, nooit waar ze begonnen. Wil je alle vier liever zelf zetten, dan zegt de schakelaar boven de foto Ik zet ze zelf, en een stip met de hand verplaatsen zet hem daar vanzelf op: vanaf dat moment zijn ze van jou en beweegt er niets meer aan.

Wat is die hoofdhoogteregel, en waarom haalt de mijne die nooit?

Al deze specificaties zeggen hoeveel van het beeld het hoofd moet vullen, gemeten van de onderkant van de kin tot de bovenkant van het hoofd, haar inbegrepen; meestal 70 tot 80 procent, wat bij een foto van 45 mm neerkomt op 31,5 tot 36 mm. De gebruikelijke reden dat het misgaat is een selfie: een armlengte is ongeveer 60 cm, wat het gezicht vervormt en het hoofd te groot in beeld zet. De tweede gebruikelijke reden is de kruin: dat is de bovenkant van het haar, niet de haargrens, en wie de haargrens markeert krijgt elk hoofd te klein.

Waarom moet het bestand minstens 20 KB zijn, en hoe kan het opgevuld worden?

Indiase examenportalen, het Chinese visumformulier en de upload voor het Britse paspoort noemen naast een maximum ook een minimum bestandsgrootte, omdat een bestand daaronder meestal een miniatuur is die iemand per ongeluk uploadde. Een foto van ⁦200 × 230⁩ is 46.000 pixels, en op de beste kwaliteit die een browser wegschrijft kan hij nog steeds op 15 KB uitkomen, zonder mogelijkheid om hem groter te maken door minder te comprimeren. Dus voegt de tool een JPEG-commentaarsegment vol spaties toe. Dat hoort bij de JPEG-standaard, elke decoder slaat het over, en het beeld is bit voor bit hetzelfde beeld: alleen het bestand is langer. De opvulling zegt precies dat, in het Engels, binnenin het bestand.

Controleert hij de achtergrond, en kan hij er een vervangen?

Hij controleert en vervangt niet. De kleur wordt gelezen uit een strook over de bovenkant van de uitsnede en langs beide zijkanten, boven de schouders, en vergeleken met de kleur van de regel in CIE Lab in plaats van in RGB: twee grijzen die veertig RGB-eenheden uit elkaar liggen zijn niet te onderscheiden, terwijl veertig eenheden blauw een andere kleur is. Ongelijkmatigheid wordt apart gemeten, want een schaduw op een witte muur is waar foto's werkelijk op worden afgekeurd, en dat is geen kleurprobleem. Een achtergrond vervangen betekent iemand uit een plaatje knippen, en dat is een segmentatiemodel; een slecht model eet haar op. Een halve meter verder van de muur gaan staan lost hier meer van op dan welk filter ook.

Waar is dat vel van ⁦10 x 15⁩ voor?

Een fotohokje rekent een paar euro voor zes foto's. Een fotobalie print een ⁦10 × 15⁩ voor centen, en dat kan er eentje. Dus legt de tool zo veel kopieën van je foto op het papier als erop passen — acht, voor een ⁦35 × 45⁩ op een ⁦10 × 15⁩ — met snijtekens in de tussenruimtes en niets over een plaatje heen gedrukt. Er wordt niets geschaald: elke kopie heeft precies het formaat dat de regel vraagt, want een vel dat ze twee procent kleiner maakte om er nog eentje bij te proppen zou acht foto's van het verkeerde formaat opleveren. Print hem op 100 procent; “passend maken op pagina” is wat een vel verkeerd laat uitkomen.

Waarom maakt de dpi uit als de pixels hetzelfde zijn?

Omdat een JPEG kan zeggen welk formaat hij is, en zegt hij het niet, dan gokt wat hem afdrukt. De resolutie staat in de JFIF-kop, en een browsercanvas schrijft die kop met het eenhedenveld op “dit is een beeldverhouding, geen resolutie”. Deze tool herschrijft die paar bytes zodat het bestand 300 dpi meldt, en dat is wat ⁦413 × 531⁩ pixels tot een foto van ⁦35 × 45⁩ mm maakt in plaats van een plaatje van geen bepaald formaat. Er wordt daarvoor niets gedecodeerd en er gaat geen kwaliteit verloren.

Kan hij ook het handtekeningbestand doen?

Ja — de SSC- en UPSC-formulieren willen er een van ⁦140 × 60⁩ pixels tussen 10 en 20 KB, en die staat als eigen specificatie op de lijst. De gezichtshulplijnen gaan daarvoor uit, want een handtekening heeft geen ooglijn; wat er in plaats daarvan gecontroleerd wordt is dat het papier licht is, dat er inkt op staat, en dat de uitsnede geen liniaal of paginarand heeft meegepakt. De 10 KB halen is het lastige deel van die regel, niet onder de 20 blijven.

Garandeert dit dat mijn aanvraag geaccepteerd wordt?

Nee, en geen enkele tool kan dat eerlijk beloven. Wat hij doet, is de gepubliceerde cijfers precies toepassen en je elke meting laten zien die hij gedaan heeft, zodat de dingen die een formulier automatisch meet — pixelformaat, bestandsgrootte, formaat — kloppen, en de dingen die een mens beoordeelt — hoofdhoogte, ooglijn, de achtergrond — met getallen erbij voor je neus staan. De regels veranderen bovendien: elke specificatie hier zegt van welke instantie hij komt en wanneer hij gelezen is, zodat je hem kunt toetsen aan het formulier dat je voor je hebt in plaats van op een tabel te vertrouwen.

Is het gratis, en heb ik een account nodig?

Het is gratis, en er komt geen account, geen inlog, geen proefperiode en geen watermerk over je gezicht aan te pas. Er zit ook geen limiet op hoeveel foto's je maakt, omdat er geen server is die daarvoor betaalt. De site draait op advertenties, en die betalen hem; die advertenties krijgen niets over je foto mee.

Werkt het offline?

Ja. Laad de pagina één keer, verbreek daarna je internetverbinding en hij werkt gewoon door — het regelboek is een bestand dat met de pagina meekomt, geen opzoeking. Dat is meteen de eenvoudigste manier om te bewijzen dat er niets geüpload wordt: een tool die je foto wegstuurde om hem te laten uitsnijden zou stoppen op het moment dat je de stekker eruit trok.