{{ 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.' }}
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.error }}
{{ 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' }}
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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); })();