PNG to XBM Converter

Upload a PNG image to convert it into an XBM (X Window System Bitmap) format file. XBM is a monochrome (1-bit) text-based image format. Transparent pixels will be converted to white.

Image preview will appear here.

Success! Your PNG has been converted to "${outputFileName}".

Note: This is a monochrome XBM file. Transparency converted to white.

`; downloadPdfButton.style.display = 'block'; // Store data for PDF report resultArea.dataset.inputFileName = originalFileName; resultArea.dataset.outputFileName = outputFileName; resultArea.dataset.imageWidth = img.width; resultArea.dataset.imageHeight = img.height; resultArea.dataset.xbmContentPreview = xbmString.substring(0, 500) + (xbmString.length > 500 ? '...' : ''); }; img.onerror = function() { resultArea.style.display = 'block'; resultArea.innerHTML = '

Error processing image. Make sure it\'s a valid PNG.

'; downloadPdfButton.style.display = 'none'; }; img.src = e.target.result; }; reader.onerror = function() { resultArea.style.display = 'block'; resultArea.innerHTML = '

Error reading file data.

'; downloadPdfButton.style.display = 'none'; }; reader.readAsDataURL(file); } /** * Clears all inputs, previews, and results. */ function clearAll() { document.getElementById('pngFileInput').value = ''; // Clear selected file document.getElementById('imagePreview').innerHTML = '

Image preview will appear here.

'; originalFileName = ""; imageWidth = 0; imageHeight = 0; convertedXbmContent = ""; clearResultArea(); } /** * Helper function to clear and hide the result area and PDF button. */ function clearResultArea() { const resultArea = document.getElementById('resultArea'); const downloadPdfButton = document.getElementById('downloadPdfButton'); if (resultArea) { resultArea.style.display = 'none'; resultArea.innerHTML = ''; // Clear stored data for PDF delete resultArea.dataset.inputFileName; delete resultArea.dataset.outputFileName; delete resultArea.dataset.imageWidth; delete resultArea.dataset.imageHeight; delete resultArea.dataset.xbmContentPreview; } if (downloadPdfButton) { downloadPdfButton.style.display = 'none'; } } /** * Generates a PDF summary of the conversion. */ function generatePdf() { // Check if jsPDF library is loaded if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { console.error('jsPDF library not loaded. Cannot generate PDF.'); const resultArea = document.getElementById('resultArea'); if (resultArea) { resultArea.innerHTML = '

PDF generation failed. Library not loaded.

'; } return; } const { jsPDF } = window.jspdf; const doc = new jsPDF(); const resultArea = document.getElementById('resultArea'); // Retrieve stored data for PDF const inputFileName = resultArea.dataset.inputFileName || 'N/A'; const outputFileName = resultArea.dataset.outputFileName || 'N/A'; const width = resultArea.dataset.imageWidth || 'N/A'; const height = resultArea.dataset.imageHeight || 'N/A'; const xbmContentPreview = resultArea.dataset.xbmContentPreview || 'No XBM content generated.'; const generationDate = new Date().toLocaleString(); let yOffset = 20; // Title doc.setFontSize(24); doc.setTextColor(44, 62, 80); doc.text("PNG to XBM Conversion Summary", 105, yOffset, { align: 'center' }); yOffset += 20; // Summary details doc.setFontSize(14); doc.setTextColor(51, 51, 51); doc.text(`Conversion Date: ${generationDate}`, 20, yOffset); yOffset += 10; doc.text(`Input File: ${inputFileName}`, 20, yOffset); yOffset += 10; doc.text(`Output File: ${outputFileName}`, 20, yOffset); yOffset += 10; doc.text(`Image Dimensions: ${width} x ${height} pixels`, 20, yOffset); yOffset += 20; // Conversion Notes doc.setFontSize(12); doc.setTextColor(80, 80, 80); doc.text("Important Notes on XBM Conversion:", 20, yOffset); yOffset += 7; const notes = [ "• XBM is a monochrome (1-bit) format; all colors are converted to black or white.", "• Transparency from PNG is converted to white (background).", "• The conversion uses a grayscale threshold of 128 to determine black/white pixels.", "• XBM files are C-style source code files, ready to be included in C/C++ projects." ]; notes.forEach(note => { const splitNote = doc.splitTextToSize(note, 170); doc.text(splitNote, 25, yOffset); yOffset += (splitNote.length * 7) + 5; }); yOffset += 15; // XBM Content Preview if (yOffset > 250) { // Check for page break doc.addPage(); yOffset = 20; } doc.setFontSize(12); doc.setTextColor(51, 51, 51); doc.text("Generated XBM Content Preview (first 500 chars):", 20, yOffset); yOffset += 10; const xbmPreviewLines = doc.splitTextToSize(xbmContentPreview, 170); doc.setFont('courier'); // Monospace font for code preview doc.setFontSize(10); doc.text(xbmPreviewLines, 20, yOffset); doc.setFont('helvetica'); // Reset font doc.setFontSize(12); yOffset += (xbmPreviewLines.length * 6) + 15; // Adjusted line height for courier // Footer doc.setFontSize(9); doc.setTextColor(150, 150, 150); doc.text(`Report Generated by PNG to XBM Converter Tool`, 20, doc.internal.pageSize.height - 15); doc.save("PNG_to_XBM_Conversion_Summary.pdf"); }
Scroll to Top