Prepare your photo for an application form

Choose your destination, add the required images, and get separate JPG downloads with size and pixel checks.

{{ preset.localLabel }}

{{ preset.summary }}

Official requirements · checked 5 September 2026. Follow the current portal if it differs.

Changing the destination clears the selected images. Images up to 20 MB and 16 million pixels are supported.

{{ slot.spec.label }}{{ slot.spec.localLabel }}

{{ slot.spec.requirementLabel }}

Or drop one JPG, PNG, WebP, AVIF, BMP, HEIC, or HEIF.

{{ slot.file.name }}

{{ slot.image.naturalWidth }} × {{ slot.image.naturalHeight }} px · {{ bytesLabel(slot.file.size) }} · HEIC decoded

{{ slot.id === 'signature' ? 'If your signature is on a full sheet, select just the strokes and a small white margin before resizing.' : 'Select the area to use. Keep your whole face visible before fitting the required frame.' }}

Selected area: {{ slot.crop.width }} × {{ slot.crop.height }} px from ({{ slot.crop.x }}, {{ slot.crop.y }}).

Drag a rectangle around the area to keep, or enter its pixel coordinates below.

{{ slot.spec.preserveDimensions ? 'Keep the framing. Reduce large dimensions if needed; small originals are not enlarged.' : 'Keep the whole card. Reduce quality first, then dimensions if needed to meet 200 KB.' }}

Reading the image… HEIC decoding can take a moment.

{{ slot.crop ? 'Full original shown here. Prepare the JPG to preview the selected area in the required frame.' : 'Original image. Prepare the JPG to see its measured result.' }}

{{ slot.result.checks.passed ? 'File checks passed' : 'Some file checks did not pass' }}

JPG · {{ slot.result.width }} × {{ slot.result.height }} px · {{ bytesLabel(slot.result.blob.size) }}

  • {{ slot.result.checks.size.passed ? '✓' : '✕' }} Size: {{ slot.result.checks.size.minBytes ? slot.result.checks.size.minBytes.toLocaleString() + '–' : 'at most ' }}{{ slot.result.checks.size.maxBytes.toLocaleString() }} bytes
  • {{ slot.result.checks.dimensions.passed ? '✓' : '✕' }} Pixels: {{ slot.spec.width ? slot.spec.width + ' × ' + slot.spec.height + ' required' : slot.spec.minDimension ? 'each side 480–6000 required' : 'measured; no fixed dimensions listed for this field' }}
  • {{ slot.result.checks.format.passed ? '✓' : '✕' }} Three-component JPEG color output

{{ issue }}

{{ slot.downloadMessage }}

{{ slot.spec.review }}

{{ preset.reviewNote }}

{{ preset.byteNote }}

JPEG encoding can change detail and color and removes embedded metadata. Transparent areas become white. Animated and multi-image files use one decoded image. Processing happens in your browser.

Prepare, then check the downloaded image

  1. Choose the named portal. Copy the requirements from your current application form if they differ from these presets. The custom KB and pixel tool supports other limits.
  2. Select each original image. For BREBR Teletalk, add a color photo and signature to their separate fields. For SSCASN, select a clear scan of your full KTP. For My Number, choose a suitable original photo, including HEIC.
  3. Select the signature area when needed. For a signature on a sheet of paper, drag around the strokes or enter crop coordinates. Keep a small white margin and choose “Keep the whole image” so every stroke fits.
  4. Prepare and inspect each JPG. The tool measures its bytes and pixels. Read small text, inspect every signature stroke, and check photo framing before downloading.
  5. Download each file and use the official form. Byte, pixel, and JPEG checks cannot guarantee acceptance or replace an official live-camera step.

Maximum limits here use 1 KB = 1,000 bytes. The Japanese minimum uses the conservative 20,480-byte boundary explained below. JPEG file size depends on the image, so some minimum–maximum ranges cannot be met without a different original.

The requirements behind each preset

Reviewed . These are requirements for the linked forms, not national standards or a promise that a recruitment period is open.

Bangladesh · BREBR Teletalkছবি ও স্বাক্ষর

This BREBR form asks for a 300 × 300 px color photo no larger than 100 KB and a 300 × 80 px signature no larger than 60 KB. BREBR Teletalk photo/signature validation.

Use a real, clear color photograph. This tool cannot check facial recognition, likeness, or whether a signature is acceptable. The linked BREBR page does not specify the image file format; this tool exports JPG.

Use this preset

Indonesia · SSCASN KTPKompres KTP untuk SSCASN

The KTP upload on the SSCASN account form specifies JPG/JPEG and a maximum of 200 KB. That field does not state fixed pixel dimensions. BKN SSCASN account registration.

Keep the complete card and make sure its writing stays legible. SSCASN’s separate camera-based face verification must be completed on its own site; a prepared image does not replace that step. Other application uploads can have different rules.

Use this preset

Japan · My Number cardマイナンバーカードの写真

J-LIS lists JPEG/JPG in RGB color, 20 KB–7 MB, and 480–6000 px for both width and height. HEIC is excluded. J-LIS My Number photo-data FAQ.

Use a recent photo that meets J-LIS’s pose, background, and clarity instructions. J-LIS warns that edited images may be rejected. This preset preserves framing without enlarging a small original; it does not alter faces or remove backgrounds.

J-LIS does not define KB/MB as byte counts on this page. We use 20,480–7,000,000 bytes, a conservative range for decimal and binary units. A result below the minimum remains a failed check; no filler bytes are added.

This tool exports JPEG through the browser’s RGB canvas and checks that the saved JPEG has three color components. It does not assess photographic suitability. J-LIS face-photo checklist.

Use this preset

Try the file checks with visible test images

These synthetic examples exercise file processing only. They are not identity documents, real signatures, or acceptable application portraits. Use the source files to compare the result’s actual bytes and dimensions.

Measured on in Chrome 152.0.7977.83. Each JPG below was downloaded from this workflow and decoded independently to verify its pixels. Byte counts can differ in another browser.

Four synthetic examples passed file checks. Image suitability and portal acceptance were not assessed.
Field and test inputPreset requirementsMeasured JPG
BREBR photo field · synthetic chart
Download source
300 × 300 px
At most 100,000 bytes
Official form requirements
300 × 300 px
94,197 bytes
Download checked JPG
BREBR signature field · synthetic strokes
Download source
300 × 80 px
At most 60,000 bytes
Official form requirements
300 × 80 px
13,223 bytes
Download checked JPG
SSCASN KTP field · synthetic chart
Download source
No fixed pixels listed
At most 200,000 bytes
Official form requirements
600 × 600 px
197,312 bytes
Download checked JPG
My Number photo field · synthetic HEIC chart
Download source
Each side 480–6000 px
20,480–7,000,000 bytes
Official form requirements
600 × 600 px
922,081 bytes
Download checked JPG

Full measurements, settings, and source/output hashes · Reproduce these examples.

HEIC fixture source and reproduction. The photo and signature upload guide explains conflicting pixel and KB requirements. For conversion without a portal preset, use HEIC to JPG.

Questions about application image files

For the named BREBR Teletalk form, choose the Bangladesh preset and select a photo and signature separately. It makes a 300 × 300 px photo under 100 KB and a 300 × 80 px signature under 60 KB when tested settings can meet those limits. Preview both JPGs and download them separately. Always check the current form; these settings do not apply to every Teletalk application.

Pilih preset Indonesia · SSCASN KTP, pilih hasil pindai KTP, lalu buat JPG dan periksa ukurannya. Pastikan seluruh kartu dan tulisan tetap terbaca. Verifikasi wajah melalui kamera tetap harus dilakukan di situs SSCASN.

J-LISの案内ではHEICは使えません。JPEG/JPG、RGBカラー、20KB~7MB、幅・高さ各480~6000ピクセルが必要です。このツールでJPEGに変換し、実際のファイル容量と画素数を確認できます。写真の内容や受付可否は確認できません。最新の公式案内を優先してください。

No. They check encoded JPEG properties only. The portal can also evaluate identity, face position, color, lighting, readability, recency, and other requirements. Complete live-camera steps on the official portal and follow its current instructions.

The result stays marked as a failed size check. No filler bytes are added and small originals are not enlarged. Try a larger, clearer original photo. The My Number preset uses 20,480–7,000,000 bytes to fit either common interpretation of the source’s KB and MB units.

JPG, PNG, WebP, AVIF, BMP, HEIC, and HEIF images up to 20 MB and 16 million decoded pixels. The result is a newly encoded JPG. Transparent areas become white, embedded metadata is removed, and animated or multi-image inputs use one decoded image. Photos are processed in your browser.
(function() { const title = document.querySelector('h1'); const actionRegion = document.querySelector('.action-container, .action-body'); if (!title || !actionRegion || title.querySelector('.tool-hero-mark')) return; const path = window.location.pathname.replace(/\/$/, ''); if (!path || path === '/' || path.startsWith('/converters') || path === '/about' || path === '/contact' || path === '/support' || path === '/privacy-policy') { return; } const lowerKey = path.replace(/^\/(video|audio)\//, '').replace(/^\//, '').toLowerCase(); if (!lowerKey) return; let category = 'image'; if (path.startsWith('/video/')) category = 'video'; if (path.startsWith('/audio/')) category = 'audio'; const isUtility = lowerKey.includes('ascii') || lowerKey === 'check-my-file' || lowerKey === 'prepare-for-ai' || lowerKey.includes('resizer') || lowerKey.includes('metadata') || lowerKey.includes('compress') || lowerKey.includes('base64') || lowerKey.includes('background') || lowerKey.includes('crop') || lowerKey.includes('watermark') || lowerKey.includes('remove-pages') || lowerKey.includes('unlock') || lowerKey.includes('protect') || lowerKey.includes('editor') || lowerKey.includes('excel') || lowerKey.includes('upscale') || lowerKey.includes('merge') || lowerKey.includes('split') || lowerKey.includes('ocr') || lowerKey.includes('sign') || lowerKey.includes('trim') || lowerKey.includes('favicon'); if (category === 'image' && isUtility) category = 'tool'; const labelMap = { jpg: 'JPG', jpeg: 'JPEG', png: 'PNG', gif: 'GIF', svg: 'SVG', pdf: 'PDF', heic: 'HEIC', jfif: 'JFIF', webp: 'WEBP', bmp: 'BMP', ico: 'ICO', word: 'DOCX', docx: 'DOCX', excel: 'Excel', xls: 'XLS', xlsx: 'Excel', mp4: 'MP4', mov: 'MOV', avi: 'AVI', mp3: 'MP3', aac: 'AAC', flac: 'FLAC', wav: 'WAV', webm: 'WEBM', cr2: 'CR2', arw: 'ARW', nef: 'NEF', raf: 'RAF' }; const formatLabel = (value) => labelMap[value] || value.toUpperCase(); function getFormatMeta(key) { if (key === 'check-my-file') { return {primary: 'Check', secondary: 'File', connector: 'dot'}; } if (key === 'prepare-for-ai') { return {primary: 'Prepare', secondary: 'AI', connector: 'dot'}; } const directMatch = key.match(/^([a-z0-9]+)-to-([a-z0-9]+)$/); const convertMatch = key.match(/^convert-([a-z0-9]+)-to-([a-z0-9]+)$/); const convertToMatch = key.match(/^convert-to-([a-z0-9]+)$/); if (directMatch) { return {primary: formatLabel(directMatch[1]), secondary: formatLabel(directMatch[2]), connector: 'arrow'}; } if (convertMatch) { return {primary: formatLabel(convertMatch[1]), secondary: formatLabel(convertMatch[2]), connector: 'arrow'}; } if (convertToMatch) { return {primary: 'Any', secondary: formatLabel(convertToMatch[1]), connector: 'arrow'}; } if (key.startsWith('compress-')) { return {primary: 'Compress', secondary: formatLabel(key.replace('compress-', '')), connector: 'dot'}; } if (key.includes('base64') && key.includes('decode')) { return {primary: 'Base64', secondary: 'Decode', connector: 'dot'}; } if (key.startsWith('base64-to-')) { return {primary: 'Base64', secondary: formatLabel(key.replace('base64-to-', '')), connector: 'arrow'}; } if (key.includes('-to-base64')) { const from = key.replace('convert-', '').replace('-to-base64', ''); return {primary: formatLabel(from), secondary: 'Base64', connector: 'arrow'}; } if (key.includes('base64')) { return {primary: 'Base64', secondary: 'Encode', connector: 'dot'}; } if (key.includes('ascii')) { return {primary: 'ASCII', secondary: 'Art', connector: 'dot'}; } if (key.includes('resizer')) { return {primary: 'Resize', secondary: 'Pixels', connector: 'dot'}; } if (key.includes('remove-pages')) { return {primary: 'Remove', secondary: 'Pages', connector: 'dot'}; } if (key.includes('crop') && key.includes('pdf')) { return {primary: 'Crop', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf-editor')) { return {primary: 'Edit', secondary: 'PDF', connector: 'dot'}; } if (key.includes('unlock')) { return {primary: 'Unlock', secondary: 'PDF', connector: 'dot'}; } if (key.includes('protect')) { return {primary: 'Protect', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf') && key.includes('metadata')) { return {primary: 'Clean', secondary: 'Metadata', connector: 'dot'}; } if (key.includes('metadata')) { return {primary: 'EXIF', secondary: 'Clean', connector: 'dot'}; } if (key.includes('background')) { return {primary: 'Remove', secondary: 'Background', connector: 'dot'}; } if (key.includes('crop')) { return {primary: 'Crop', secondary: 'Image', connector: 'dot'}; } if (key.includes('watermark')) { return {primary: 'Watermark', secondary: 'Image', connector: 'dot'}; } if (key.includes('upscale')) { return {primary: 'Upscale', secondary: 'Image', connector: 'dot'}; } if (key.includes('merge')) { return {primary: 'Merge', secondary: 'PDF', connector: 'dot'}; } if (key.includes('split')) { return {primary: 'Split', secondary: 'PDF', connector: 'dot'}; } if (key.includes('ocr')) { return {primary: 'OCR', secondary: 'PDF', connector: 'dot'}; } if (key.includes('sign')) { return {primary: 'Sign', secondary: 'PDF', connector: 'dot'}; } if (key.includes('trim')) { return {primary: 'Trim', secondary: 'Video', connector: 'dot'}; } return {primary: 'Tool', secondary: '', connector: 'dot'}; } function getIconClass(key, categoryName) { const toFormat = key.split('-to-')[1]; if (key === 'check-my-file') return 'bi-file-earmark-check'; if (key === 'prepare-for-ai') return 'bi-ui-checks-grid'; if (key.includes('ascii')) return 'bi-textarea-t'; if (key.includes('resizer')) return 'bi-aspect-ratio'; if (key.includes('metadata')) return 'bi-shield-slash'; if (key.includes('compress')) return 'bi-file-earmark-zip'; if (key.includes('base64')) return 'bi-journal-code'; if (key.includes('background')) return 'bi-scissors'; if (key.includes('crop')) return 'bi-crop'; if (key.includes('watermark')) return 'bi-type'; if (key.includes('remove-pages')) return 'bi-trash'; if (key.includes('unlock')) return 'bi-unlock'; if (key.includes('protect')) return 'bi-lock'; if (key.includes('editor')) return 'bi-pencil-square'; if (key.includes('excel')) return 'bi-file-earmark-spreadsheet'; if (key.includes('upscale')) return 'bi-arrows-angle-expand'; if (key.includes('merge')) return 'bi-files'; if (key.includes('split')) return 'bi-scissors'; if (key.includes('ocr')) return 'bi-file-earmark-text'; if (key.includes('sign')) return 'bi-pen'; if (key.includes('trim')) return 'bi-scissors'; if (toFormat) { switch (toFormat) { case 'jpg': case 'jpeg': return 'bi-filetype-jpg'; case 'png': return 'bi-filetype-png'; case 'gif': return 'bi-filetype-gif'; case 'svg': return 'bi-filetype-svg'; case 'pdf': return 'bi-filetype-pdf'; case 'word': case 'docx': return 'bi-file-earmark-word'; case 'xls': case 'xlsx': case 'excel': return 'bi-file-earmark-spreadsheet'; case 'heic': return 'bi-filetype-heic'; case 'webp': return 'bi-filetype-webp'; case 'bmp': return 'bi-filetype-bmp'; case 'ico': return 'bi-file-image'; case 'mp4': return 'bi-filetype-mp4'; case 'mov': return 'bi-filetype-mov'; case 'mp3': return 'bi-filetype-mp3'; case 'wav': return 'bi-filetype-wav'; case 'avi': return 'bi-filetype-avi'; default: return 'bi-file-earmark-image'; } } if (categoryName === 'video') return 'bi-film'; if (categoryName === 'audio') return 'bi-music-note-beamed'; if (categoryName === 'image') return 'bi-file-earmark-image'; return 'bi-gear'; } const formatMeta = getFormatMeta(lowerKey); const connectorIcon = formatMeta.connector === 'arrow' ? 'bi-arrow-right-short' : 'bi-dot'; const iconClass = getIconClass(lowerKey, category); const mark = document.createElement('span'); mark.className = `tool-hero-mark converter-mark converter-mark--${category}`; const iconWrap = document.createElement('span'); iconWrap.className = 'converter-mark__icon'; const icon = document.createElement('i'); icon.className = iconClass; iconWrap.appendChild(icon); mark.appendChild(iconWrap); const formatWrap = document.createElement('span'); formatWrap.className = 'converter-format'; const primary = document.createElement('span'); primary.className = 'format-pill'; primary.textContent = formatMeta.primary; formatWrap.appendChild(primary); if (formatMeta.secondary) { const connector = document.createElement('span'); connector.className = 'format-connector'; const connectorIconEl = document.createElement('i'); connectorIconEl.className = connectorIcon; connector.appendChild(connectorIconEl); formatWrap.appendChild(connector); const secondary = document.createElement('span'); secondary.className = 'format-pill format-pill--secondary'; secondary.textContent = formatMeta.secondary; formatWrap.appendChild(secondary); } mark.appendChild(formatWrap); title.classList.add('tool-hero-title'); title.prepend(mark); })();