{"id":3028,"date":"2025-09-25T12:04:27","date_gmt":"2025-09-25T12:04:27","guid":{"rendered":"https:\/\/yamuparkoti.com\/?page_id=3028"},"modified":"2025-09-25T16:35:26","modified_gmt":"2025-09-25T16:35:26","slug":"compress-jpg-file","status":"publish","type":"page","link":"https:\/\/yamuparkoti.com\/fr\/compress-jpg-file\/","title":{"rendered":"Compresser un fichier Jpg"},"content":{"rendered":"<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n    <div class=\"wp-block-bplugins-custom-html\" id='bPluginsCustomHtml-1'>\r\n    <!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Image Compressor Pro | WordPress Plugin<\/title>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/FileSaver.js\/2.0.5\/FileSaver.min.js\"><\/script>\n    <style>\n        :root {\n            --primary-color: #4a6cf7;\n            --primary-light: #e8edff;\n            --secondary-color: #10b981;\n            --dark-color: #1e293b;\n            --light-color: #f8fafc;\n            --gray-color: #64748b;\n            --border-radius: 8px;\n            --box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n            --transition: all 0.3s ease;\n        }\n\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: 'Inter', sans-serif;\n            line-height: 1.6;\n            color: var(--dark-color);\n            background-color: #f1f5f9;\n            padding: 20px;\n        }\n\n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            background: white;\n            border-radius: var(--border-radius);\n            box-shadow: var(--box-shadow);\n            overflow: hidden;\n        }\n\n        header {\n            background: var(--dark-color);\n            color: white;\n            padding: 20px 30px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n\n        .logo {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n\n        .logo-icon {\n            width: 32px;\n            height: 32px;\n            background: var(--primary-color);\n            border-radius: 6px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .logo-text {\n            font-size: 1.5rem;\n            font-weight: 700;\n        }\n\n        .tabs {\n            display: flex;\n            background: var(--light-color);\n            border-bottom: 1px solid #e2e8f0;\n        }\n\n        .tab {\n            padding: 15px 25px;\n            cursor: pointer;\n            font-weight: 500;\n            border-bottom: 3px solid transparent;\n            transition: var(--transition);\n        }\n\n        .tab.active {\n            color: var(--primary-color);\n            border-bottom-color: var(--primary-color);\n        }\n\n        .tab:hover:not(.active) {\n            background: #f1f5f9;\n        }\n\n        .tab-content {\n            display: none;\n            padding: 30px;\n        }\n\n        .tab-content.active {\n            display: block;\n        }\n\n        .upload-area {\n            border: 2px dashed #cbd5e1;\n            border-radius: var(--border-radius);\n            padding: 40px 20px;\n            text-align: center;\n            margin-bottom: 30px;\n            transition: var(--transition);\n            background: #f8fafc;\n        }\n\n        .upload-area.highlight {\n            border-color: var(--primary-color);\n            background: var(--primary-light);\n        }\n\n        .upload-icon {\n            font-size: 48px;\n            color: var(--gray-color);\n            margin-bottom: 15px;\n        }\n\n        .upload-text {\n            margin-bottom: 20px;\n            color: var(--gray-color);\n        }\n\n        .upload-btn {\n            background: var(--primary-color);\n            color: white;\n            border: none;\n            padding: 12px 24px;\n            border-radius: var(--border-radius);\n            font-weight: 500;\n            cursor: pointer;\n            transition: var(--transition);\n            display: inline-block;\n        }\n\n        .upload-btn:hover {\n            background: #3a5ce5;\n            transform: translateY(-2px);\n        }\n\n        .compression-controls {\n            background: var(--light-color);\n            padding: 20px;\n            border-radius: var(--border-radius);\n            margin-bottom: 30px;\n        }\n\n        .control-group {\n            margin-bottom: 15px;\n        }\n\n        .control-label {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 8px;\n        }\n\n        .quality-value {\n            font-weight: 600;\n            color: var(--primary-color);\n        }\n\n        .slider {\n            width: 100%;\n            height: 6px;\n            -webkit-appearance: none;\n            background: #e2e8f0;\n            border-radius: 3px;\n            outline: none;\n        }\n\n        .slider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            width: 18px;\n            height: 18px;\n            border-radius: 50%;\n            background: var(--primary-color);\n            cursor: pointer;\n        }\n\n        .queue-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 20px;\n        }\n\n        .queue-title {\n            font-size: 1.2rem;\n            font-weight: 600;\n        }\n\n        .queue-actions {\n            display: flex;\n            gap: 10px;\n        }\n\n        .action-btn {\n            padding: 8px 16px;\n            border-radius: var(--border-radius);\n            font-weight: 500;\n            cursor: pointer;\n            transition: var(--transition);\n            border: 1px solid #cbd5e1;\n            background: white;\n        }\n\n        .action-btn.primary {\n            background: var(--primary-color);\n            color: white;\n            border-color: var(--primary-color);\n        }\n\n        .action-btn.danger {\n            background: #ef4444;\n            color: white;\n            border-color: #ef4444;\n        }\n\n        .action-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n        }\n\n        .image-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n            gap: 20px;\n        }\n\n        .image-card {\n            border: 1px solid #e2e8f0;\n            border-radius: var(--border-radius);\n            overflow: hidden;\n            background: white;\n            transition: var(--transition);\n        }\n\n        .image-card:hover {\n            transform: translateY(-5px);\n            box-shadow: var(--box-shadow);\n        }\n\n        .image-preview {\n            height: 180px;\n            overflow: hidden;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background: #f8fafc;\n        }\n\n        .image-preview img {\n            max-width: 100%;\n            max-height: 100%;\n            object-fit: contain;\n        }\n\n        .image-info {\n            padding: 15px;\n        }\n\n        .image-name {\n            font-weight: 600;\n            margin-bottom: 10px;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        .image-stats {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 15px;\n            font-size: 0.9rem;\n        }\n\n        .original-size {\n            color: var(--gray-color);\n        }\n\n        .compressed-size {\n            color: var(--secondary-color);\n            font-weight: 600;\n        }\n\n        .compression-ratio {\n            color: var(--primary-color);\n            font-weight: 600;\n        }\n\n        .image-actions {\n            display: flex;\n            gap: 8px;\n        }\n\n        .image-btn {\n            flex: 1;\n            padding: 8px;\n            border-radius: var(--border-radius);\n            font-size: 0.85rem;\n            text-align: center;\n            cursor: pointer;\n            transition: var(--transition);\n            border: 1px solid #cbd5e1;\n            background: white;\n        }\n\n        .image-btn.primary {\n            background: var(--primary-color);\n            color: white;\n            border-color: var(--primary-color);\n        }\n\n        .image-btn:hover {\n            transform: translateY(-2px);\n        }\n\n        .exif-table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-top: 20px;\n        }\n\n        .exif-table th, .exif-table td {\n            padding: 12px 15px;\n            text-align: left;\n            border-bottom: 1px solid #e2e8f0;\n        }\n\n        .exif-table th {\n            background: #f8fafc;\n            font-weight: 600;\n        }\n\n        .progress-bar {\n            height: 6px;\n            background: #e2e8f0;\n            border-radius: 3px;\n            margin-top: 10px;\n            overflow: hidden;\n        }\n\n        .progress-fill {\n            height: 100%;\n            background: var(--secondary-color);\n            width: 0%;\n            transition: width 0.3s ease;\n        }\n\n        .empty-state {\n            text-align: center;\n            padding: 40px 20px;\n            color: var(--gray-color);\n        }\n\n        .empty-icon {\n            font-size: 48px;\n            margin-bottom: 15px;\n            opacity: 0.5;\n        }\n\n        .notification {\n            position: fixed;\n            top: 20px;\n            right: 20px;\n            padding: 15px 20px;\n            border-radius: var(--border-radius);\n            background: white;\n            box-shadow: var(--box-shadow);\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            transform: translateX(150%);\n            transition: transform 0.3s ease;\n            z-index: 1000;\n        }\n\n        .notification.show {\n            transform: translateX(0);\n        }\n\n        .notification.success {\n            border-left: 4px solid var(--secondary-color);\n        }\n\n        .notification.error {\n            border-left: 4px solid #ef4444;\n        }\n\n        .notification-icon {\n            font-size: 20px;\n        }\n\n        .notification.success .notification-icon {\n            color: var(--secondary-color);\n        }\n\n        .notification.error .notification-icon {\n            color: #ef4444;\n        }\n\n        @media (max-width: 768px) {\n            .tabs {\n                flex-wrap: wrap;\n            }\n            \n            .tab {\n                flex: 1;\n                min-width: 120px;\n                text-align: center;\n            }\n            \n            .image-grid {\n                grid-template-columns: 1fr;\n            }\n            \n            .queue-header {\n                flex-direction: column;\n                gap: 15px;\n                align-items: flex-start;\n            }\n            \n            .queue-actions {\n                width: 100%;\n                justify-content: space-between;\n            }\n            \n            .action-btn {\n                flex: 1;\n                text-align: center;\n            }\n        }\n\n        @media (max-width: 480px) {\n            body {\n                padding: 10px;\n            }\n            \n            header {\n                padding: 15px 20px;\n            }\n            \n            .tab-content {\n                padding: 20px 15px;\n            }\n            \n            .upload-area {\n                padding: 30px 15px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <header>\n            <div class=\"logo\">\n                <div class=\"logo-icon\">\ud83d\udcf7<\/div>\n                <div class=\"logo-text\">Image Compressor Pro<\/div>\n            <\/div>\n            <div class=\"version\">v2.1.0<\/div>\n        <\/header>\n        \n        <div class=\"tabs\">\n            <div class=\"tab active\" data-tab=\"compressor\">Compresseur d&#039;images<\/div>\n            <div class=\"tab\" data-tab=\"exif\">Visionneuse EXIF<\/div>\n        <\/div>\n        \n        <div class=\"tab-content active\" id=\"compressor\">\n            <div class=\"upload-area\" id=\"uploadArea\">\n                <div class=\"upload-icon\">\ud83d\udcc1<\/div>\n                <h2 class=\"upload-text\">Drag &#038; Drop your images here<\/h2>\n                <p class=\"upload-subtext\">Prend en charge les formats JPEG, PNG et WebP (20 fichiers maximum)<\/p>\n                <input type=\"file\" id=\"fileInput\" multiple accept=\".jpg,.jpeg,.png,.webp\" style=\"display: none;\">\n                <button class=\"upload-btn\" id=\"uploadBtn\">S\u00e9lectionner les fichiers<\/button>\n            <\/div>\n            \n            <div class=\"compression-controls\">\n                <div class=\"control-group\">\n                    <div class=\"control-label\">\n                        <span>Qualit\u00e9 de compression<\/span>\n                        <span class=\"quality-value\" id=\"qualityValue\">80%<\/span>\n                    <\/div>\n                    <input type=\"range\" min=\"0\" max=\"100\" value=\"80\" class=\"slider\" id=\"qualitySlider\">\n                <\/div>\n                \n                <div class=\"control-group\">\n                    <div class=\"control-label\">\n                        <span>Format de sortie<\/span>\n                    <\/div>\n                    <select id=\"formatSelect\" class=\"slider\" style=\"width: 100%; padding: 8px; border-radius: var(--border-radius); border: 1px solid #cbd5e1;\">\n                        <option value=\"original\">Conserver le format d&#039;origine<\/option>\n                        <option value=\"jpeg\">JPEG<\/option>\n                        <option value=\"png\">PNG<\/option>\n                        <option value=\"webp\">WebP<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n            \n            <div class=\"queue-section\">\n                <div class=\"queue-header\">\n                    <h3 class=\"queue-title\">File d&#039;attente de compression (<span id=\"fileCount\">0<\/span> fichiers)<\/h3>\n                    <div class=\"queue-actions\">\n                        <button class=\"action-btn primary\" id=\"downloadAllBtn\">T\u00e9l\u00e9charger tout au format ZIP<\/button>\n                        <button class=\"action-btn danger\" id=\"clearQueueBtn\">Effacer la file d&#039;attente<\/button>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"image-grid\" id=\"imageGrid\">\n                    <div class=\"empty-state\" id=\"emptyState\">\n                        <div class=\"empty-icon\">\ud83d\udcf7<\/div>\n                        <p>Aucune image n&#039;a encore \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9e. Glissez-d\u00e9posez ou cliquez sur le bouton ci-dessus pour commencer.<\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n        <div class=\"tab-content\" id=\"exif\">\n            <div class=\"upload-area\">\n                <div class=\"upload-icon\">\ud83d\udd0d<\/div>\n                <h2 class=\"upload-text\">S\u00e9lectionnez une image pour afficher les donn\u00e9es EXIF<\/h2>\n                <p class=\"upload-subtext\">Les donn\u00e9es EXIF \u200b\u200bseront affich\u00e9es pour les formats d&#039;image pris en charge<\/p>\n                <input type=\"file\" id=\"exifFileInput\" accept=\".jpg,.jpeg,.png,.tiff\" style=\"display: none;\">\n                <button class=\"upload-btn\" id=\"exifUploadBtn\">S\u00e9lectionner une image<\/button>\n            <\/div>\n            \n            <div id=\"exifData\" style=\"display: none;\">\n                <h3>M\u00e9tadonn\u00e9es EXIF<\/h3>\n                <table class=\"exif-table\">\n                    <thead>\n                        <tr>\n                            <th>Propri\u00e9t\u00e9<\/th>\n                            <th>Valeur<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody id=\"exifTableBody\">\n                        <!-- EXIF data will be populated here -->\n                    <\/tbody>\n                <\/table>\n            <\/div>\n        <\/div>\n    <\/div>\n    \n    <div class=\"notification\" id=\"notification\">\n        <div class=\"notification-icon\">\u2713<\/div>\n        <div class=\"notification-text\">Op\u00e9ration termin\u00e9e avec succ\u00e8s !<\/div>\n    <\/div>\n\n    <script>\n        \/\/ DOM Elements\n        const uploadArea = document.getElementById('uploadArea');\n        const fileInput = document.getElementById('fileInput');\n        const uploadBtn = document.getElementById('uploadBtn');\n        const qualitySlider = document.getElementById('qualitySlider');\n        const qualityValue = document.getElementById('qualityValue');\n        const formatSelect = document.getElementById('formatSelect');\n        const imageGrid = document.getElementById('imageGrid');\n        const emptyState = document.getElementById('emptyState');\n        const fileCount = document.getElementById('fileCount');\n        const downloadAllBtn = document.getElementById('downloadAllBtn');\n        const clearQueueBtn = document.getElementById('clearQueueBtn');\n        const tabs = document.querySelectorAll('.tab');\n        const tabContents = document.querySelectorAll('.tab-content');\n        const exifFileInput = document.getElementById('exifFileInput');\n        const exifUploadBtn = document.getElementById('exifUploadBtn');\n        const exifData = document.getElementById('exifData');\n        const exifTableBody = document.getElementById('exifTableBody');\n        const notification = document.getElementById('notification');\n\n        \/\/ State\n        let files = [];\n        let compressedFiles = [];\n        let compressionQuality = 80;\n\n        \/\/ Event Listeners\n        uploadBtn.addEventListener('click', () => fileInput.click());\n        fileInput.addEventListener('change', handleFileSelect);\n        qualitySlider.addEventListener('input', updateQuality);\n        downloadAllBtn.addEventListener('click', downloadAllAsZip);\n        clearQueueBtn.addEventListener('click', clearQueue);\n        exifUploadBtn.addEventListener('click', () => exifFileInput.click());\n        exifFileInput.addEventListener('change', handleExifFileSelect);\n        formatSelect.addEventListener('change', handleFormatChange);\n\n        \/\/ Drag and Drop\n        ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {\n            uploadArea.addEventListener(eventName, preventDefaults, false);\n        });\n\n        function preventDefaults(e) {\n            e.preventDefault();\n            e.stopPropagation();\n        }\n\n        ['dragenter', 'dragover'].forEach(eventName => {\n            uploadArea.addEventListener(eventName, highlight, false);\n        });\n\n        ['dragleave', 'drop'].forEach(eventName => {\n            uploadArea.addEventListener(eventName, unhighlight, false);\n        });\n\n        function highlight() {\n            uploadArea.classList.add('highlight');\n        }\n\n        function unhighlight() {\n            uploadArea.classList.remove('highlight');\n        }\n\n        uploadArea.addEventListener('drop', handleDrop, false);\n\n        function handleDrop(e) {\n            const dt = e.dataTransfer;\n            const droppedFiles = dt.files;\n            handleFiles(droppedFiles);\n        }\n\n        \/\/ Tab switching\n        tabs.forEach(tab => {\n            tab.addEventListener('click', () => {\n                const tabId = tab.getAttribute('data-tab');\n                \n                tabs.forEach(t => t.classList.remove('active'));\n                tabContents.forEach(tc => tc.classList.remove('active'));\n                \n                tab.classList.add('active');\n                document.getElementById(tabId).classList.add('active');\n            });\n        });\n\n        \/\/ Functions\n        function handleFileSelect(e) {\n            const selectedFiles = e.target.files;\n            handleFiles(selectedFiles);\n        }\n\n        function handleFiles(selectedFiles) {\n            if (files.length + selectedFiles.length > 20) {\n                showNotification('Maximum 20 files allowed. Please remove some files before adding more.', 'error');\n                return;\n            }\n\n            for (let i = 0; i < selectedFiles.length; i++) {\n                const file = selectedFiles[i];\n                if (isValidFileType(file)) {\n                    files.push(file);\n                    processFile(file);\n                } else {\n                    showNotification(`File \"${file.name}\" is not a supported format.`, 'error');\n                }\n            }\n\n            updateFileCount();\n            fileInput.value = ''; \/\/ Reset input to allow selecting same files again\n        }\n\n        function isValidFileType(file) {\n            const validTypes = ['image\/jpeg', 'image\/png', 'image\/webp'];\n            return validTypes.includes(file.type);\n        }\n\n        function processFile(file) {\n            \/\/ Hide empty state\n            emptyState.style.display = 'none';\n            \n            \/\/ Create image card\n            const card = document.createElement('div');\n            card.className = 'image-card';\n            card.id = `card-${file.name.replace(\/\\s\/g, '-')}`;\n            \n            \/\/ Create preview\n            const preview = document.createElement('div');\n            preview.className = 'image-preview';\n            \n            const img = document.createElement('img');\n            img.src = URL.createObjectURL(file);\n            preview.appendChild(img);\n            \n            \/\/ Create file info\n            const info = document.createElement('div');\n            info.className = 'image-info';\n            \n            const name = document.createElement('div');\n            name.className = 'image-name';\n            name.textContent = file.name;\n            \n            const stats = document.createElement('div');\n            stats.className = 'image-stats';\n            \n            const originalSize = document.createElement('div');\n            originalSize.className = 'original-size';\n            originalSize.textContent = `Original: ${formatFileSize(file.size)}`;\n            \n            const compressedSize = document.createElement('div');\n            compressedSize.className = 'compressed-size';\n            compressedSize.textContent = 'Compressed: --';\n            compressedSize.id = `compressed-${file.name.replace(\/\\s\/g, '-')}`;\n            \n            const ratio = document.createElement('div');\n            ratio.className = 'compression-ratio';\n            ratio.textContent = '--% smaller';\n            ratio.id = `ratio-${file.name.replace(\/\\s\/g, '-')}`;\n            \n            stats.appendChild(originalSize);\n            stats.appendChild(compressedSize);\n            stats.appendChild(ratio);\n            \n            \/\/ Create actions\n            const actions = document.createElement('div');\n            actions.className = 'image-actions';\n            \n            const downloadBtn = document.createElement('button');\n            downloadBtn.className = 'image-btn primary';\n            downloadBtn.textContent = 'Download';\n            downloadBtn.addEventListener('click', () => downloadFile(file));\n            \n            const removeBtn = document.createElement('button');\n            removeBtn.className = 'image-btn';\n            removeBtn.textContent = 'Remove';\n            removeBtn.addEventListener('click', () => removeFile(file, card));\n            \n            actions.appendChild(downloadBtn);\n            actions.appendChild(removeBtn);\n            \n            \/\/ Add progress bar\n            const progressBar = document.createElement('div');\n            progressBar.className = 'progress-bar';\n            const progressFill = document.createElement('div');\n            progressFill.className = 'progress-fill';\n            progressFill.id = `progress-${file.name.replace(\/\\s\/g, '-')}`;\n            progressBar.appendChild(progressFill);\n            \n            \/\/ Assemble card\n            info.appendChild(name);\n            info.appendChild(stats);\n            info.appendChild(progressBar);\n            info.appendChild(actions);\n            \n            card.appendChild(preview);\n            card.appendChild(info);\n            \n            imageGrid.appendChild(card);\n            \n            \/\/ Compress the file\n            compressFile(file, compressionQuality);\n        }\n\n        function compressFile(file, quality) {\n            const progressFill = document.getElementById(`progress-${file.name.replace(\/\\s\/g, '-')}`);\n            \n            \/\/ For images, use Canvas API for compression\n            const reader = new FileReader();\n            \n            reader.onload = function(e) {\n                const img = new Image();\n                img.src = e.target.result;\n                \n                img.onload = function() {\n                    const canvas = document.createElement('canvas');\n                    const ctx = canvas.getContext('2d');\n                    \n                    \/\/ Calculate new dimensions if needed (maintain aspect ratio)\n                    let width = img.width;\n                    let height = img.height;\n                    const maxDimension = 2000; \/\/ Max width\/height\n                    \n                    if (width > maxDimension || height > maxDimension) {\n                        if (width > height) {\n                            height = Math.round((height * maxDimension) \/ width);\n                            width = maxDimension;\n                        } else {\n                            width = Math.round((width * maxDimension) \/ height);\n                            height = maxDimension;\n                        }\n                    }\n                    \n                    canvas.width = width;\n                    canvas.height = height;\n                    \n                    \/\/ Draw image on canvas\n                    ctx.drawImage(img, 0, 0, width, height);\n                    \n                    \/\/ Get the output format\n                    let outputFormat = 'image\/jpeg';\n                    if (formatSelect.value === 'png') {\n                        outputFormat = 'image\/png';\n                    } else if (formatSelect.value === 'webp') {\n                        outputFormat = 'image\/webp';\n                    } else if (formatSelect.value === 'original') {\n                        \/\/ Keep the original format\n                        outputFormat = file.type;\n                    }\n                    \n                    \/\/ Convert to blob with quality setting\n                    canvas.toBlob((blob) => {\n                        progressFill.style.width = '100%';\n                        updateFileStats(file, blob.size);\n                        \n                        \/\/ Determine file extension based on output format\n                        let fileExtension = '.jpg';\n                        if (outputFormat === 'image\/png') fileExtension = '.png';\n                        if (outputFormat === 'image\/webp') fileExtension = '.webp';\n                        \n                        \/\/ Get original filename without extension\n                        const originalName = file.name.substring(0, file.name.lastIndexOf('.'));\n                        \n                        compressedFiles.push({\n                            original: file,\n                            compressed: blob,\n                            name: originalName + fileExtension\n                        });\n                    }, outputFormat, quality \/ 100);\n                };\n            };\n            \n            reader.readAsDataURL(file);\n            \n            \/\/ Simulate progress (in a real implementation, this would be based on actual compression progress)\n            let progress = 0;\n            const progressInterval = setInterval(() => {\n                progress += 5;\n                progressFill.style.width = `${progress}%`;\n                \n                if (progress >= 90) {\n                    clearInterval(progressInterval);\n                }\n            }, 100);\n        }\n\n        function updateFileStats(file, compressedSize) {\n            const compressedElement = document.getElementById(`compressed-${file.name.replace(\/\\s\/g, '-')}`);\n            const ratioElement = document.getElementById(`ratio-${file.name.replace(\/\\s\/g, '-')}`);\n            \n            compressedElement.textContent = `Compressed: ${formatFileSize(compressedSize)}`;\n            \n            const ratio = ((file.size - compressedSize) \/ file.size * 100).toFixed(1);\n            ratioElement.textContent = `${ratio}% smaller`;\n            \n            if (parseFloat(ratio) > 0) {\n                ratioElement.style.color = 'var(--secondary-color)';\n            } else {\n                ratioElement.style.color = '#ef4444';\n            }\n        }\n\n        function updateQuality() {\n            compressionQuality = qualitySlider.value;\n            qualityValue.textContent = `${compressionQuality}%`;\n            \n            \/\/ Recompress all files with new quality setting\n            if (files.length > 0) {\n                compressedFiles = [];\n                files.forEach(file => {\n                    const progressFill = document.getElementById(`progress-${file.name.replace(\/\\s\/g, '-')}`);\n                    progressFill.style.width = '0%';\n                    compressFile(file, compressionQuality);\n                });\n            }\n        }\n\n        function handleFormatChange() {\n            \/\/ Recompress all files with new format setting\n            if (files.length > 0) {\n                compressedFiles = [];\n                files.forEach(file => {\n                    const progressFill = document.getElementById(`progress-${file.name.replace(\/\\s\/g, '-')}`);\n                    progressFill.style.width = '0%';\n                    compressFile(file, compressionQuality);\n                });\n            }\n        }\n\n        function downloadFile(file) {\n            const compressedFile = compressedFiles.find(f => f.original === file);\n            \n            if (compressedFile) {\n                const url = URL.createObjectURL(compressedFile.compressed);\n                const a = document.createElement('a');\n                a.href = url;\n                a.download = compressedFile.name;\n                document.body.appendChild(a);\n                a.click();\n                document.body.removeChild(a);\n                URL.revokeObjectURL(url);\n                \n                showNotification(`Downloaded ${compressedFile.name} successfully!`);\n            } else {\n                showNotification(`File ${file.name} is not ready yet. Please wait.`, 'error');\n            }\n        }\n\n        function downloadAllAsZip() {\n            if (compressedFiles.length === 0) {\n                showNotification('No files to download.', 'error');\n                return;\n            }\n            \n            const zip = new JSZip();\n            let addedFiles = 0;\n            \n            compressedFiles.forEach(fileObj => {\n                zip.file(fileObj.name, fileObj.compressed);\n                addedFiles++;\n            });\n            \n            zip.generateAsync({ type: 'blob' })\n                .then(blob => {\n                    saveAs(blob, 'compressed_images.zip');\n                    showNotification(`Downloaded ${addedFiles} files as ZIP successfully!`);\n                })\n                .catch(err => {\n                    console.error('Error creating ZIP:', err);\n                    showNotification('Error creating ZIP file.', 'error');\n                });\n        }\n\n        function removeFile(file, card) {\n            files = files.filter(f => f !== file);\n            compressedFiles = compressedFiles.filter(f => f.original !== file);\n            card.remove();\n            \n            if (files.length === 0) {\n                emptyState.style.display = 'block';\n            }\n            \n            updateFileCount();\n        }\n\n        function clearQueue() {\n            if (files.length === 0) {\n                showNotification('Queue is already empty.', 'error');\n                return;\n            }\n            \n            files = [];\n            compressedFiles = [];\n            imageGrid.innerHTML = '';\n            emptyState.style.display = 'block';\n            updateFileCount();\n            \n            showNotification('Queue cleared successfully.');\n        }\n\n        function updateFileCount() {\n            fileCount.textContent = files.length;\n        }\n\n        function formatFileSize(bytes) {\n            if (bytes === 0) return '0 Bytes';\n            \n            const k = 1024;\n            const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n            const i = Math.floor(Math.log(bytes) \/ Math.log(k));\n            \n            return parseFloat((bytes \/ Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n        }\n\n        function showNotification(message, type = 'success') {\n            const notificationText = notification.querySelector('.notification-text');\n            notificationText.textContent = message;\n            \n            notification.className = 'notification';\n            notification.classList.add(type);\n            \n            notification.classList.add('show');\n            \n            setTimeout(() => {\n                notification.classList.remove('show');\n            }, 3000);\n        }\n\n        \/\/ EXIF Viewer functionality\n        function handleExifFileSelect(e) {\n            const file = e.target.files[0];\n            \n            if (!file) return;\n            \n            if (!file.type.match(\/image\\\/(jpeg|png|tiff)\/)) {\n                showNotification('Please select a JPEG, PNG, or TIFF image for EXIF data.', 'error');\n                return;\n            }\n            \n            \/\/ In a real implementation, you would use a library like exif-js to read EXIF data\n            \/\/ For this demo, we'll simulate EXIF data\n            \n            const simulatedExifData = {\n                'Make': 'Canon',\n                'Model': 'EOS 5D Mark IV',\n                'Software': 'Adobe Photoshop CC 2021',\n                'DateTime': '2023:05:15 14:30:22',\n                'ExposureTime': '1\/250',\n                'FNumber': 'f\/5.6',\n                'ISOSpeedRatings': '200',\n                'FocalLength': '50 mm',\n                'LensModel': 'EF50mm f\/1.8 STM',\n                'ImageWidth': '6720',\n                'ImageHeight': '4480',\n                'GPSLatitude': '40.7128\u00b0 N',\n                'GPSLongitude': '74.0060\u00b0 W'\n            };\n            \n            displayExifData(simulatedExifData);\n            exifFileInput.value = ''; \/\/ Reset input\n        }\n\n        function displayExifData(data) {\n            exifTableBody.innerHTML = '';\n            \n            for (const [key, value] of Object.entries(data)) {\n                const row = document.createElement('tr');\n                \n                const keyCell = document.createElement('td');\n                keyCell.textContent = key;\n                \n                const valueCell = document.createElement('td');\n                valueCell.textContent = value;\n                \n                row.appendChild(keyCell);\n                row.appendChild(valueCell);\n                exifTableBody.appendChild(row);\n            }\n            \n            exifData.style.display = 'block';\n        }\n    <\/script>\n<\/body>\n<\/html>    <\/div>\r\n    \n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n\n<div class=\"wp-block-kadence-column kadence-column3028_bdd3d6-08\"><div class=\"kt-inside-inner-col\">\n\n<div class=\"wp-block-kadence-column kadence-column3028_fa1306-c8\"><div class=\"kt-inside-inner-col\"><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-column kadence-column3028_9922a7-9a\"><div class=\"kt-inside-inner-col\">\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udcc9 Compresser un fichier JPG en ligne \u2013 Gratuit, rapide et fiable<\/strong><\/h2>\n\n\n\n<p>Bon, soyons honn\u00eates\u00a0: les images font tourner Internet. <\/p>\n\n\n\n<p>Pour <a href=\"https:\/\/shopify.pxf.io\/AWzz5D\" data-type=\"link\" data-id=\"https:\/\/shopify.pxf.io\/AWzz5D\" target=\"_blank\" rel=\"noopener\">Shopify<\/a>, vous devez compresser un fichier jpg \u00e0 tout moment.<\/p>\n\n\n\n<p>It doesn&#8217;t matter if you&#8217;re working with a small business, writing a blog, or just sharing your pet&#8217;s picture with family\u2013 everything boils down to photos. And compress JPEG file? Well, they&#8217;re absolutely ubiquitous.<\/p>\n\n\n\n<p>But here&#8217;s the thing: those files can be absurdly massive. I recall trying to upload a vacation snap that was 12 MB. Twelve! It felt like my Wi-Fi aged ten years just watching it load.<\/p>\n\n\n\n<p>Large images slow websites down, eat up your phone storage, and sharing them makes you feel like you&#8217;re back in the dial-up days. So yes, making them smaller is definitely the way to go.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udd0e Que signifie \u00ab\u00a0Compresser un fichier JPG\u00a0\u00bb\u00a0?<\/strong><\/h2>\n\n\n\n<p>Imaginez avoir besoin de plus de place dans votre valise pour un voyage, alors que vous avez tout emport\u00e9\u00a0! C\u2019est comme si la technologie de compression des fichiers JPG \u00e9tait similaire\u00a0: elle permet de r\u00e9duire la taille du fichier sans impact n\u00e9gatif sur la qualit\u00e9 de l\u2019image.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-1024x576.png\" alt=\"compress jpg file\" class=\"wp-image-3078\" style=\"border-width:1px;border-radius:10px\" srcset=\"https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-1024x576.png 1024w, https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-300x169.png 300w, https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-768x432.png 768w, https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-1536x864.png 1536w, https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-2048x1152.png 2048w, https:\/\/yamuparkoti.com\/wp-content\/uploads\/2025\/09\/compress-jpg-file-2-18x10.png 18w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In fact sometimes photos that must be 5 MB can be shrunk down to just 500 KB\u2013 a big difference! Uploading is faster; pages load more quickly. It eliminates that feeling of waiting for the internet \u201cto crawl out of bed.&#8221;<\/p>\n\n\n\n<p>Nous pouvons diviser les m\u00e9thodes en deux grands types :<\/p>\n\n\n\n<p>1. Avec perte : cette technologie prend en charge les plus petits d\u00e9tails. Serait-il exact de dire que la plupart des yeux humains ne les voient pas ?<\/p>\n\n\n\n<p>2. Sans perte : conserve d\u00e9finitivement chaque d\u00e9tail intact tout en permettant \u00e9galement de gagner de l&#039;espace !<\/p>\n\n\n\n<p>Which one is the best? That changes for each case, you know! For me personally with images going online, I almost always go with lossy compression jpg file\u2013 because honestly, I can&#8217;t spot any difference.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\ude80 Pourquoi s&#039;emb\u00eater \u00e0 compresser les fichiers JPG\u00a0?<\/strong><\/h2>\n\n\n\n<p>Toujours pas convaincu\u00a0? Voici pourquoi c&#039;est important\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a1 Votre site se charge plus vite. Google appr\u00e9cie \u00e7a, tout comme vos visiteurs.<\/li>\n\n\n\n<li>\ud83d\udcbe Vous gagnez de la place. (Mon ordinateur portable me remercie \u00e0 chaque fois.)<\/li>\n\n\n\n<li>\ud83d\udce4 Le partage est plus rapide. Les e-mails ne reviennent pas avec le message \u00ab\u00a0Fichier trop volumineux\u00a0\u00bb.<\/li>\n\n\n\n<li>\ud83d\ude00 Les gens ne cliquent pas pendant qu&#039;ils attendent.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udee0 Comment le faites-vous r\u00e9ellement ?<\/strong><\/h2>\n\n\n\n<p>Ce n&#039;est pas sorcier. Trois \u00e9tapes et le tour est jou\u00e9\u00a0:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>T\u00e9l\u00e9chargez votre fichier JPG. Glissez, d\u00e9posez ou cliquez.<\/li>\n\n\n\n<li>\ud83c\udf9a Choisissez dans quelle mesure vous souhaitez le r\u00e9duire.<\/li>\n\n\n\n<li>\u2b07 Cliquez sur \u00ab\u00a0T\u00e9l\u00e9charger\u00a0\u00bb. Boum. Termin\u00e9.<\/li>\n<\/ol>\n\n\n\n<p>Aucune inscription. Aucun filigrane intrusif. Aucune fen\u00eatre contextuelle vous invitant \u00e0 mettre \u00e0 jour votre abonnement.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udf1f Pourquoi cet outil n&#039;est pas comme les autres<\/strong><\/h2>\n\n\n\n<p>J&#039;ai essay\u00e9 quelques-uns de ces compresseurs en ligne douteux. Des pubs partout. Les fichiers sont envoy\u00e9s on ne sait o\u00f9. Impossible.<\/p>\n\n\n\n<p>Celui-ci?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Gratuit. Pas de frais \u00ab\u00a0surprise\u00a0\u00bb. Compressez simplement le fichier JPG.<\/li>\n\n\n\n<li>\ud83d\udd12 Priv\u00e9. Vos fichiers ne quittent jamais votre navigateur.<\/li>\n\n\n\n<li>\u26a1 Rapide. T\u00e9l\u00e9chargez un lot entier (oui, jusqu&#039;\u00e0 20).<\/li>\n\n\n\n<li>\ud83c\udfa8 Flexible. Enregistrez vos fichiers au format JPG, PNG ou m\u00eame WebP si vous le souhaitez.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udcf8 Quand la compression sauve la situation<\/strong><\/h2>\n\n\n\n<p>Vous comprendrez son importance car :<\/p>\n\n\n\n<p>Je t\u00e9l\u00e9charge occasionnellement des photos de produits pour un magasin, comme lorsque Shopify m&#039;a rejet\u00e9 pour un fichier volumineux\u00a0!<\/p>\n\n\n\n<p>Partage de photographies d\u00e9taill\u00e9es sur Instagram.<\/p>\n\n\n\n<p>Y a-t-il vraiment des gens au travail qui disent : \u00ab C\u2019est beaucoup trop gros pour \u00eatre envoy\u00e9 par e-mail \u00bb ?<\/p>\n\n\n\n<p>J&#039;esp\u00e8re augmenter le temps de chargement de mon site Web, encourageant ainsi Google \u00e0 me placer sur la page 1 plut\u00f4t que sur la page 7\u00a0!<\/p>\n\n\n\n<p>J&#039;essaie de lib\u00e9rer de l&#039;espace sur mon iPhone vintage qui n&#039;arr\u00eate pas de crier \u00ab Stockage plein ! \u00bb<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udcc8 L&#039;avantage SEO dont personne ne parle<\/strong><\/h2>\n\n\n\n<p>Le probl\u00e8me, c&#039;est que les sites lents d\u00e9gradent votre classement Google. Personne n&#039;attend le chargement d&#039;une page. En compressant les fichiers JPG, vous\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Am\u00e9liorez les Core Web Vitals (ne vous inqui\u00e9tez pas, juste \u00ab\u00a0la vitesse du site\u00a0\u00bb).<\/li>\n\n\n\n<li>\ud83d\udcca Obtenez de meilleurs classements.<\/li>\n\n\n\n<li>\u23f3 Gardez les gens sur votre site plus longtemps.<\/li>\n\n\n\n<li>\ud83d\udcb0 Peut-\u00eatre m\u00eame faire plus de ventes parce que les gens n&#039;abandonnent pas.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udd12 Mais est-ce s\u00fbr ?<\/strong><\/h2>\n\n\n\n<p>Et c\u2019\u00e9tait aussi une de mes pr\u00e9occupations.<\/p>\n\n\n\n<p>Plusieurs outils transf\u00e8rent automatiquement vos images vers leurs serveurs, ce qui est g\u00eanant si vous souhaitez r\u00e9duire la taille des fichiers de vos images personnelles.<\/p>\n\n\n\n<p>Cet outil est diff\u00e9rent\u00a0: rien n&#039;est envoy\u00e9. Tout se passe dans votre navigateur web.<\/p>\n\n\n\n<p>Aucun compte n&#039;est n\u00e9cessaire, il n&#039;y a pas de collecte de donn\u00e9es et pas de stockage \u00ab cloud \u00bb de vos fichiers ; juste un traitement rapide et efficace.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udca1 Conseils de pro que j&#039;ai retenus<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83c\udf9a Une qualit\u00e9 \u00e0 80 % me semble g\u00e9n\u00e9ralement parfaite.<\/li>\n\n\n\n<li>\ud83c\udf0d Si c&#039;est pour le Web, les fichiers WebP sont encore plus petits.<\/li>\n\n\n\n<li>\ud83d\uddc2 Gardez toujours l&#039;original en lieu s\u00fbr. Croyez-moi, je l&#039;ai appris \u00e0 mes d\u00e9pens.<\/li>\n\n\n\n<li>\ud83d\udda5 R\u00e9duisez avant de t\u00e9l\u00e9charger sur WordPress ou <a href=\"https:\/\/yamuparkoti.com\/fr\/\" data-type=\"link\" data-id=\"https:\/\/yamuparkoti.com\/\">Shopify<\/a>\u2014\u00e9vite des maux de t\u00eate plus tard.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udc49 Pr\u00eat \u00e0 essayer ?<\/strong><\/h2>\n\n\n\n<p>Really, don&#8217;t analyze it too much. Just upload an image there automatically compress jpg file to see what occurs!<\/p>\n\n\n\n<p>Au pire, vous lib\u00e9rez de l\u2019espace ; au mieux, les visiteurs de votre site Web voient son chargement se faire \u00e0 une vitesse fulgurante.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2753 FAQ rapides<\/strong><\/h2>\n\n\n\n<p><strong>La compression nuit-elle \u00e0 la qualit\u00e9 ?<\/strong><br>Un peu, mais g\u00e9n\u00e9ralement vous ne le remarquerez pas.<\/p>\n\n\n\n<p><strong>Puis-je compresser plusieurs fichiers \u00e0 la fois\u00a0?<\/strong><br>Oui, jusqu\u2019\u00e0 20 en une seule fois.<\/p>\n\n\n\n<p><strong>Est-ce s\u00e9curitaire ?<\/strong><br>S\u00e9curit\u00e9 maximale. Vos fichiers restent dans votre navigateur.<\/p>\n\n\n\n<p><strong>JPG ou WebP ?<\/strong><br>Le format JPG fonctionne partout. Le format WebP est plus petit, mais il ne pla\u00eet pas \u00e0 tous les sites.<\/p>\n\n\n\n<p><strong>Cela aidera-t-il le r\u00e9f\u00e9rencement ?<\/strong><br>Oui. Des pages plus rapides = un Google plus heureux.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udfc1 R\u00e9flexions finales<\/strong><\/h2>\n\n\n\n<p>And giant images are a problem\u2013 they don&#8217;t just slow your site down but take up loads of space. We have all been caught out by them; it&#8217;s just one too many times.<\/p>\n\n\n\n<p>Avec la compression, vous :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a1 Rendez votre site Web plus rapide<\/li>\n\n\n\n<li>\ud83d\udcbe Gagnez de la place<\/li>\n\n\n\n<li>\ud83d\udcf2 Partagez des photos sans jurer dans votre bo\u00eete de r\u00e9ception<\/li>\n<\/ul>\n\n\n\n<p>Alors oui, essayez. R\u00e9duisez la taille de vos fichiers JPG et remerciez-vous plus tard.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-column kadence-column3028_97f692-5a\"><div class=\"kt-inside-inner-col\"><\/div><\/div>\n\n<\/div><\/div>\n\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":3084,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"class_list":["post-3028","page","type-page","status-publish","has-post-thumbnail","hentry"],"rankMath":{"parentDomain":"yamuparkoti.com","noFollowDomains":[],"noFollowExcludeDomains":[],"noFollowExternalLinks":false,"featuredImageNotice":"L\u2019image en vedette devrait \u00eatre au moins 200 par 200 pixels pour \u00eatre utilis\u00e9 par Facebook et d\u2019autres sites de m\u00e9dias sociaux.","pluginReviewed":false,"postSettings":{"linkSuggestions":true,"useFocusKeyword":false},"frontEndScore":false,"postName":"compress-jpg-file","permalinkFormat":"https:\/\/yamuparkoti.com\/fr\/%pagename%\/","showLockModifiedDate":true,"assessor":{"focusKeywordLink":"https:\/\/yamuparkoti.com\/wp-admin\/edit.php?focus_keyword=%focus_keyword%&post_type=%post_type%","hasTOCPlugin":false,"primaryTaxonomy":false,"serpData":{"title":"Compress JPG File Online [Sep 2025] \u2013 Free Image Optimizer","description":"Easily compress JPG files online without losing quality. Reduce image size, speed up your website with our free JPG compressor tool.","focusKeywords":"compress jpg file,compress jpg,image size reducer,picture compressor,compress jpeg","pillarContent":false,"canonicalUrl":"","breadcrumbTitle":"","advancedRobots":{"max-snippet":"-1","max-video-preview":"-1","max-image-preview":"large"},"facebookTitle":"","facebookDescription":"","facebookImage":"","facebookImageID":"","facebookHasOverlay":false,"facebookImageOverlay":"","facebookAuthor":"","twitterCardType":"","twitterUseFacebook":true,"twitterTitle":"","twitterDescription":"","twitterImage":"","twitterImageID":"","twitterHasOverlay":false,"twitterImageOverlay":"","twitterPlayerUrl":"","twitterPlayerSize":"","twitterPlayerStream":"","twitterPlayerStreamCtype":"","twitterAppDescription":"","twitterAppIphoneName":"","twitterAppIphoneID":"","twitterAppIphoneUrl":"","twitterAppIpadName":"","twitterAppIpadID":"","twitterAppIpadUrl":"","twitterAppGoogleplayName":"","twitterAppGoogleplayID":"","twitterAppGoogleplayUrl":"","twitterAppCountry":"","robots":{"index":true},"twitterAuthor":"identifiant","primaryTerm":0,"authorName":"Yam Bahadur Uparkoti","titleTemplate":"%title% %sep% %sitename%","descriptionTemplate":"%excerpt%","showScoreFrontend":true,"lockModifiedDate":false},"powerWords":["absolument","amazement","astonishing","authentique","beau","bien-\u00eatre","brillant","captivant","charismatique","choc","clair","compl\u00e8tement","confidentiel","confiance","cons\u00e9quent","cr\u00e9atif","d\u00e9finitivement","d\u00e9licieux","d\u00e9montrer","d\u00e9p\u00eachez-vous","d\u00e9termin\u00e9","digne","dynamique","\u00e9blouissant","\u00e9clatant","\u00e9conomique","\u00e9fficace","\u00e9l\u00e9gant","\u00e9motionnel","\u00e9nergique","\u00e9norme","\u00e9poustouflant","essentiel","\u00e9tonnant","exclusif","exp\u00e9rience","fabuleux","fantastique","formidable","fort","garanti","g\u00e9ant","g\u00e9n\u00e9reux","grandiose","gratuit","habile","harmonieux","historique","hors pair","important","incroyable","indispensable","inoubliable","inspirant","innovant","intense","invention","irr\u00e9sistible","l\u00e9gendaire","lumineux","luxe","magique","magnifique","majestueux","marquant","merveilleux","miraculeux","motivant","n\u00e9cessaire","nouvelle","officiel","parfait","passionn\u00e9","persuasif","ph\u00e9nom\u00e9nal","plaisir","populaire","pouvoir","prestigieux","prodigieux","profond","prosp\u00e8re","puissant","qualit\u00e9","radieux","rapide","r\u00e9ussi","r\u00e9volutionnaire","satisfait","s\u00e9curit\u00e9","sensationnel","serein","somptueux","splendide","sublime","surprenant","talentueux","terrifiant","unique","valeur","vibrant","victorieux","vif","vraiment","z\u00e9l\u00e9"],"diacritics":{"A":"[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]","AA":"[\\uA732]","AE":"[\\u00C6\\u01FC\\u01E2]","AO":"[\\uA734]","AU":"[\\uA736]","AV":"[\\uA738\\uA73A]","AY":"[\\uA73C]","B":"[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]","C":"[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]","D":"[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]","DZ":"[\\u01F1\\u01C4]","Dz":"[\\u01F2\\u01C5]","E":"[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]","F":"[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]","G":"[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]","H":"[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]","I":"[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]","J":"[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]","K":"[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]","L":"[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]","LJ":"[\\u01C7]","Lj":"[\\u01C8]","M":"[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]","N":"[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]","NJ":"[\\u01CA]","Nj":"[\\u01CB]","O":"[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]","OI":"[\\u01A2]","OO":"[\\uA74E]","OU":"[\\u0222]","P":"[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]","Q":"[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]","R":"[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]","S":"[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]","T":"[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]","TZ":"[\\uA728]","U":"[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]","V":"[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]","VY":"[\\uA760]","W":"[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]","X":"[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]","Y":"[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]","Z":"[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]","a":"[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]","aa":"[\\uA733]","ae":"[\\u00E6\\u01FD\\u01E3]","ao":"[\\uA735]","au":"[\\uA737]","av":"[\\uA739\\uA73B]","ay":"[\\uA73D]","b":"[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]","c":"[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]","d":"[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]","dz":"[\\u01F3\\u01C6]","e":"[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]","f":"[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]","g":"[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]","h":"[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]","hv":"[\\u0195]","i":"[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]","j":"[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]","k":"[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]","l":"[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]","lj":"[\\u01C9]","m":"[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]","n":"[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]","nj":"[\\u01CC]","o":"[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]","oi":"[\\u01A3]","ou":"[\\u0223]","oo":"[\\uA74F]","p":"[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]","q":"[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]","r":"[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]","s":"[\\u0073\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]","ss":"[\\u00DF]","t":"[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]","tz":"[\\uA729]","u":"[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]","v":"[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]","vy":"[\\uA761]","w":"[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]","x":"[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]","y":"[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]","z":"[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]"},"researchesTests":["contentHasTOC","contentHasShortParagraphs","contentHasAssets","keywordInTitle","keywordInMetaDescription","keywordInPermalink","keywordIn10Percent","keywordInContent","keywordInSubheadings","keywordInImageAlt","keywordDensity","keywordNotUsed","lengthContent","lengthPermalink","linksHasInternal","linksHasExternals","linksNotAllExternals","titleStartWithKeyword","titleSentiment","titleHasPowerWords","titleHasNumber","hasContentAI"],"hasRedirection":true,"hasBreadcrumb":false},"homeUrl":"https:\/\/yamuparkoti.com\/fr","objectID":3028,"objectType":"post","locale":"fr","localeFull":"fr_FR","overlayImages":{"play":{"name":"Ic\u00f4ne de lecture","url":"https:\/\/yamuparkoti.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-play.png","path":"\/home\/u575838537\/domains\/yamuparkoti.com\/public_html\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-play.png","position":"middle_center"},"gif":{"name":"Ic\u00f4ne GIF","url":"https:\/\/yamuparkoti.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-gif.png","path":"\/home\/u575838537\/domains\/yamuparkoti.com\/public_html\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/icon-gif.png","position":"middle_center"}},"defautOgImage":"https:\/\/yamuparkoti.com\/wp-content\/uploads\/2024\/08\/Untitled_design1.png","customPermalinks":true,"isUserRegistered":true,"autoSuggestKeywords":true,"connectSiteUrl":"https:\/\/rankmath.com\/auth?site=https%3A%2F%2Fyamuparkoti.com%2Ffr&r=https%3A%2F%2Fyamuparkoti.com%2Ffr%2Fwp-json%2Fwp%2Fv2%2Fpages%2F3028%3Fnonce%3D1d600699eb&pro=1","maxTags":100,"trendsIcon":"<svg viewBox=\"0 0 610 610\"><path d=\"M18.85,446,174.32,290.48l58.08,58.08L76.93,504a14.54,14.54,0,0,1-20.55,0L18.83,466.48a14.54,14.54,0,0,1,0-20.55Z\" style=\"fill:#4285f4\"\/><path d=\"M242.65,242.66,377.59,377.6l-47.75,47.75a14.54,14.54,0,0,1-20.55,0L174.37,290.43l47.75-47.75A14.52,14.52,0,0,1,242.65,242.66Z\" style=\"fill:#ea4335\"\/><polygon points=\"319.53 319.53 479.26 159.8 537.34 217.88 377.61 377.62 319.53 319.53\" style=\"fill:#fabb05\"\/><path d=\"M594.26,262.73V118.61h0a16.94,16.94,0,0,0-16.94-16.94H433.2a16.94,16.94,0,0,0-12,28.92L565.34,274.71h0a16.94,16.94,0,0,0,28.92-12Z\" style=\"fill:#34a853\"\/><rect width=\"610\" height=\"610\" style=\"fill:none\"\/><\/svg>","showScore":true,"siteFavIcon":"https:\/\/yamuparkoti.com\/wp-content\/uploads\/2024\/08\/cropped-Untitled_design1-32x32.png","canUser":{"general":false,"advanced":false,"snippet":false,"social":false,"analysis":false,"analytics":false,"content_ai":false},"showKeywordIntent":true,"isPro":true,"is_front_page":false,"trendsUpgradeLink":"https:\/\/rankmath.com\/pricing\/?utm_source=Plugin&utm_medium=CE%20General%20Tab%20Trends&utm_campaign=WP","trendsUpgradeLabel":"Mettre \u00e0 niveau","trendsPreviewImage":"https:\/\/yamuparkoti.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/trends-preview.jpg","currentEditor":false,"homepageData":{"assessor":{"powerWords":["absolument","amazement","astonishing","authentique","beau","bien-\u00eatre","brillant","captivant","charismatique","choc","clair","compl\u00e8tement","confidentiel","confiance","cons\u00e9quent","cr\u00e9atif","d\u00e9finitivement","d\u00e9licieux","d\u00e9montrer","d\u00e9p\u00eachez-vous","d\u00e9termin\u00e9","digne","dynamique","\u00e9blouissant","\u00e9clatant","\u00e9conomique","\u00e9fficace","\u00e9l\u00e9gant","\u00e9motionnel","\u00e9nergique","\u00e9norme","\u00e9poustouflant","essentiel","\u00e9tonnant","exclusif","exp\u00e9rience","fabuleux","fantastique","formidable","fort","garanti","g\u00e9ant","g\u00e9n\u00e9reux","grandiose","gratuit","habile","harmonieux","historique","hors pair","important","incroyable","indispensable","inoubliable","inspirant","innovant","intense","invention","irr\u00e9sistible","l\u00e9gendaire","lumineux","luxe","magique","magnifique","majestueux","marquant","merveilleux","miraculeux","motivant","n\u00e9cessaire","nouvelle","officiel","parfait","passionn\u00e9","persuasif","ph\u00e9nom\u00e9nal","plaisir","populaire","pouvoir","prestigieux","prodigieux","profond","prosp\u00e8re","puissant","qualit\u00e9","radieux","rapide","r\u00e9ussi","r\u00e9volutionnaire","satisfait","s\u00e9curit\u00e9","sensationnel","serein","somptueux","splendide","sublime","surprenant","talentueux","terrifiant","unique","valeur","vibrant","victorieux","vif","vraiment","z\u00e9l\u00e9"],"diacritics":true,"researchesTests":["contentHasTOC","contentHasShortParagraphs","contentHasAssets","keywordInTitle","keywordInMetaDescription","keywordInPermalink","keywordIn10Percent","keywordInContent","keywordInSubheadings","keywordInImageAlt","keywordDensity","keywordNotUsed","lengthContent","lengthPermalink","linksHasInternal","linksHasExternals","linksNotAllExternals","titleStartWithKeyword","titleSentiment","titleHasPowerWords","titleHasNumber","hasContentAI"],"hasBreadcrumb":false,"serpData":{"title":"%sitename% %page% %sep% %sitedesc%","description":"","titleTemplate":"%sitename% %page% %sep% %sitedesc%","descriptionTemplate":"","focusKeywords":"","breadcrumbTitle":"Home","robots":{"index":true},"advancedRobots":{"max-snippet":"-1","max-video-preview":"-1","max-image-preview":"large"},"facebookTitle":"","facebookDescription":"","facebookImage":"","facebookImageID":""}}},"searchIntents":[],"isAnalyticsConnected":false,"tocTitle":"Table of Contents","tocExcludeHeadings":[],"listStyle":"ul"},"_links":{"self":[{"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/pages\/3028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/comments?post=3028"}],"version-history":[{"count":28,"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/pages\/3028\/revisions"}],"predecessor-version":[{"id":3082,"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/pages\/3028\/revisions\/3082"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/media\/3084"}],"wp:attachment":[{"href":"https:\/\/yamuparkoti.com\/fr\/wp-json\/wp\/v2\/media?parent=3028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}