{"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\/it\/compress-jpg-file\/","title":{"rendered":"Comprimi file 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\">Compressore di immagini Pro<\/div>\n            <\/div>\n            <div class=\"version\">versione 2.1.0<\/div>\n        <\/header>\n        \n        <div class=\"tabs\">\n            <div class=\"tab active\" data-tab=\"compressor\">Compressore di immagini<\/div>\n            <div class=\"tab\" data-tab=\"exif\">Visualizzatore 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\">Supporta JPEG, PNG e WebP (max 20 file)<\/p>\n                <input type=\"file\" id=\"fileInput\" multiple accept=\".jpg,.jpeg,.png,.webp\" style=\"display: none;\">\n                <button class=\"upload-btn\" id=\"uploadBtn\">Seleziona file<\/button>\n            <\/div>\n            \n            <div class=\"compression-controls\">\n                <div class=\"control-group\">\n                    <div class=\"control-label\">\n                        <span>Qualit\u00e0 della compressione<\/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>Formato di output<\/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\">Mantieni il formato originale<\/option>\n                        <option value=\"jpeg\">Formato 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\">Coda di compressione (<span id=\"fileCount\">0<\/span> file)<\/h3>\n                    <div class=\"queue-actions\">\n                        <button class=\"action-btn primary\" id=\"downloadAllBtn\">Scarica tutto come ZIP<\/button>\n                        <button class=\"action-btn danger\" id=\"clearQueueBtn\">Cancella coda<\/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>Nessuna immagine caricata ancora. Trascina e rilascia oppure clicca sul pulsante qui sopra per iniziare.<\/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\">Seleziona un&#039;immagine per visualizzare i dati EXIF<\/h2>\n                <p class=\"upload-subtext\">I dati EXIF \u200b\u200bverranno visualizzati per i formati immagine supportati<\/p>\n                <input type=\"file\" id=\"exifFileInput\" accept=\".jpg,.jpeg,.png,.tiff\" style=\"display: none;\">\n                <button class=\"upload-btn\" id=\"exifUploadBtn\">Seleziona immagine<\/button>\n            <\/div>\n            \n            <div id=\"exifData\" style=\"display: none;\">\n                <h3>Metadati EXIF<\/h3>\n                <table class=\"exif-table\">\n                    <thead>\n                        <tr>\n                            <th>Propriet\u00e0<\/th>\n                            <th>Valore<\/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\">Operazione completata con successo!<\/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 Comprimi file JPG online: gratuito, veloce e affidabile<\/strong><\/h2>\n\n\n\n<p>Bene, diciamo la verit\u00e0. Sono le immagini a far funzionare Internet. <\/p>\n\n\n\n<p>Per <a href=\"https:\/\/shopify.pxf.io\/AWzz5D\" data-type=\"link\" data-id=\"https:\/\/shopify.pxf.io\/AWzz5D\" target=\"_blank\" rel=\"noopener\">Negozio<\/a>, hai bisogno di comprimere un file jpg in qualsiasi momento.<\/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 Cosa significa esattamente &#034;Comprimi file JPG&#034;?<\/strong><\/h2>\n\n\n\n<p>Immagina di aver bisogno di pi\u00f9 spazio in valigia per un viaggio, pur avendo gi\u00e0 preparato tutto! Ti sembrer\u00e0 di scoprire all&#039;improvviso che la tecnologia di compressione per i file JPG \u00e8 simile: riduce le dimensioni del file senza compromettere la qualit\u00e0 dell&#039;immagine.<\/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>Possiamo dividere i metodi in due grandi tipologie:<\/p>\n\n\n\n<p>1. Con perdita di dati: questa tecnica si occupa dei dettagli pi\u00f9 minuti. Sarebbe corretto dire che la maggior parte degli occhi umani non li vede?<\/p>\n\n\n\n<p>2. Senza perdita di dati: mantiene sicuramente intatto ogni singolo dettaglio, ma consente anche di risparmiare un po&#039; di spazio!<\/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 Perch\u00e9 preoccuparsi di comprimere i file JPG?<\/strong><\/h2>\n\n\n\n<p>Non sei ancora convinto? Ecco perch\u00e9 \u00e8 importante:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a1 Il tuo sito si carica pi\u00f9 velocemente. A Google piace. E anche ai visitatori.<\/li>\n\n\n\n<li>\ud83d\udcbe Risparmi spazio. (Il mio portatile mi ringrazia ogni volta.)<\/li>\n\n\n\n<li>\ud83d\udce4 La condivisione \u00e8 pi\u00f9 rapida. Le email non vengono respinte con il messaggio &#034;file troppo grande&#034;.<\/li>\n\n\n\n<li>\ud83d\ude00 La gente non clicca via mentre aspetta.<\/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 Come si fa esattamente?<\/strong><\/h2>\n\n\n\n<p>Non \u00e8 una scienza missilistica. Tre passaggi e il gioco \u00e8 fatto:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>\ud83d\udcc2 Carica il tuo JPG. Trascina, rilascia o clicca.<\/li>\n\n\n\n<li>\ud83c\udf9a Scegli quanto vuoi rimpicciolirlo.<\/li>\n\n\n\n<li>\u2b07 Clicca su download. Boom. Fatto.<\/li>\n<\/ol>\n\n\n\n<p>Nessuna registrazione. Nessuna filigrana nascosta. Nessun pop-up &#034;aggiorna&#034;.<\/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 Perch\u00e9 questo strumento non \u00e8 come gli altri<\/strong><\/h2>\n\n\n\n<p>Ho provato alcuni di quei loschi compressori online. Pubblicit\u00e0 ovunque. I file vengono inviati chiss\u00e0 dove. Bocciato.<\/p>\n\n\n\n<p>Questo?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Gratuito. Nessun paywall &#034;a sorpresa&#034;. Basta comprimere il file jpg.<\/li>\n\n\n\n<li>\ud83d\udd12 Privato. I file non escono mai dal tuo browser.<\/li>\n\n\n\n<li>\u26a1 Veloce. Carica un intero batch (s\u00ec, fino a 20).<\/li>\n\n\n\n<li>\ud83c\udfa8 Flessibile. Salva come JPG, PNG o anche WebP se preferisci.<\/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 Quando la compressione salva la giornata<\/strong><\/h2>\n\n\n\n<p>Ne capiresti l&#039;importanza perch\u00e9:<\/p>\n\n\n\n<p>Ogni tanto carico le foto dei prodotti per un negozio, come quando Shopify mi ha rifiutato per un file di grandi dimensioni!<\/p>\n\n\n\n<p>Condivisione di fotografie dettagliate su Instagram.<\/p>\n\n\n\n<p>C&#039;\u00e8 davvero gente al lavoro che dice: &#034;\u00c8 troppo grande per essere inviato via email&#034;?<\/p>\n\n\n\n<p>Spero di aumentare il tempo di caricamento del mio sito web, incoraggiando cos\u00ec Google a posizionarmi nella pagina 1 anzich\u00e9 nella pagina 7!<\/p>\n\n\n\n<p>Sto cercando di liberare spazio sul mio vecchio iPhone che continua a gridare &#034;Memoria piena!&#034;<\/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 Il vantaggio SEO di cui nessuno parla<\/strong><\/h2>\n\n\n\n<p>Il punto \u00e8 questo: i siti lenti rovinano il tuo posizionamento su Google. Nessuno aspetta che una pagina si carichi. Comprimendo i file JPG:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Migliora i Core Web Vitals (non preoccuparti, solo &#034;cose \u200b\u200brelative alla velocit\u00e0 del sito&#034;).<\/li>\n\n\n\n<li>\ud83d\udcca Ottieni classifiche migliori.<\/li>\n\n\n\n<li>\u23f3 Fai s\u00ec che le persone restino sul tuo sito pi\u00f9 a lungo.<\/li>\n\n\n\n<li>\ud83d\udcb0 Magari potresti anche fare pi\u00f9 vendite perch\u00e9 la gente non si arrende.<\/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 Ma \u00e8 sicuro?<\/strong><\/h2>\n\n\n\n<p>E questa era una preoccupazione anche per me.<\/p>\n\n\n\n<p>Diversi strumenti trasferiscono automaticamente le tue immagini sui loro server, il che pu\u00f2 risultare scomodo se vuoi ridurre le dimensioni dei file delle immagini personali.<\/p>\n\n\n\n<p>Questo strumento \u00e8 diverso: non invia nulla da nessuna parte. Tutto avviene all&#039;interno del tuo browser web.<\/p>\n\n\n\n<p>Non \u00e8 necessario alcun account, non \u00e8 richiesta alcuna raccolta dati n\u00e9 archiviazione &#034;cloud&#034; dei file; solo un&#039;elaborazione rapida ed efficiente.<\/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 Consigli professionali che ho raccolto<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83c\udf9a Di solito, per me la qualit\u00e0 \u00e8 pari all&#039;80%.<\/li>\n\n\n\n<li>\ud83c\udf0d Se sono destinati al web, i file WebP sono ancora pi\u00f9 piccoli.<\/li>\n\n\n\n<li>\ud83d\uddc2 Conserva sempre l&#039;originale in un posto sicuro. Credimi, l&#039;ho imparato a mie spese.<\/li>\n\n\n\n<li>\ud83d\udda5 Riduci prima di caricare su WordPress o <a href=\"https:\/\/yamuparkoti.com\/it\/\" data-type=\"link\" data-id=\"https:\/\/yamuparkoti.com\/\">Negozio<\/a>\u2014risparmia grattacapi in seguito.<\/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 Pronto a provare?<\/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>Nel peggiore dei casi libererai un po&#039; di spazio, nel migliore dei casi i visitatori del tuo sito web lo vedranno caricarsi a velocit\u00e0 incredibili.<\/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 Domande frequenti rapide<\/strong><\/h2>\n\n\n\n<p><strong>La compressione compromette la qualit\u00e0?<\/strong><br>Un po&#039;, ma di solito non te ne accorgi.<\/p>\n\n\n\n<p><strong>Posso comprimere pi\u00f9 file contemporaneamente?<\/strong><br>S\u00ec, fino a 20 in una volta sola.<\/p>\n\n\n\n<p><strong>\u00c8 sicuro?<\/strong><br>Sicuro come non mai. I file restano nel tuo browser.<\/p>\n\n\n\n<p><strong>JPG o WebP?<\/strong><br>Il formato JPG funziona ovunque. Il formato WebP \u00e8 pi\u00f9 piccolo, ma non tutti i siti lo apprezzano.<\/p>\n\n\n\n<p><strong>Aiuter\u00e0 la SEO?<\/strong><br>S\u00ec. Pagine pi\u00f9 veloci = Google pi\u00f9 felice.<\/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 Considerazioni finali<\/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>Con la compressione:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u26a1 Rendi il tuo sito web pi\u00f9 veloce<\/li>\n\n\n\n<li>\ud83d\udcbe Risparmia spazio<\/li>\n\n\n\n<li>\ud83d\udcf2 Condividi le foto senza imprecare contro la tua casella di posta<\/li>\n<\/ul>\n\n\n\n<p>Quindi s\u00ec, provaci. Riduci quei JPG e ringraziati pi\u00f9 tardi.<\/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&#039;immagine in evidenza dovrebbe essere di almeno 200 x 200 pixel per essere ripresa da Facebook e altri siti di social media.","pluginReviewed":false,"postSettings":{"linkSuggestions":true,"useFocusKeyword":false},"frontEndScore":false,"postName":"compress-jpg-file","permalinkFormat":"https:\/\/yamuparkoti.com\/it\/%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":"nome utente","primaryTerm":0,"authorName":"Yam Bahadur Uparkoti","titleTemplate":"%title% %sep% %sitename%","descriptionTemplate":"%excerpt%","showScoreFrontend":true,"lockModifiedDate":false},"powerWords":["incredibile","sorprendente","meraviglioso","unico","bello","felicit\u00e0","brillante","affascinante","carismatico","scioccante","chiaro","completamente","riservato","fiducia","significativo","creativo","definitivamente","delizioso","dimostrare","sbrigati","determinato","degno","dinamico","impressionante","essenziale","ispiratore","innovativo","intenso","efficace","magico","magnifico","storico","importante","incredibile","indispensabile","indimenticabile","irresistibile","leggendario","luminoso","lusso","magico","magnifico","maestoso","memorabile","miracoloso","motivante","necessario","nuovo","ufficiale","perfetto","appassionato","persuasivo","fenomenale","piacere","popolare","potere","prestigioso","prodigioso","profondo","prospero","potente","qualit\u00e0","radiante","veloce","di successo","rivoluzionario","soddisfatto","sicurezza","sensazionale","sereno","lussuoso","splendido","sublime","sorprendente","talentuoso","terrificante","unico","valore","vibrante","vittorioso","vivace","veramente","zelante","autentico","avventuroso","spettacolare","esclusivo","garantito","straordinario","favoloso","affascinante","formidabile","geniale","grandioso","gratuito","abile","illimitato","impeccabile","infallibile","infinitamente","influente","ingegnoso","indimenticabile","insostituibile","leader","maestro","notevole","innovativo","pioniere","potente","riconosciuto","rivoluzionario","sorprendente","superiore","trionfante","ultra","coraggioso","prezioso","avanguardia","vigoroso","visionario","volont\u00e0","vitale","trionfo","glorioso","inarrestabile","ineguagliabile","intelligente","invincibile","libert\u00e0","orgoglio","pace","progresso","rinnovato","saggezza","soddisfazione","sicuro","serenit\u00e0","superamento","talento","trascendente","trasformativo","coraggio","vittoria"],"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\/it","objectID":3028,"objectType":"post","locale":"it","localeFull":"it_IT","overlayImages":{"play":{"name":"Icona di riproduzione","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":"Icona 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%2Fit&r=https%3A%2F%2Fyamuparkoti.com%2Fit%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":"Aggiorna","trendsPreviewImage":"https:\/\/yamuparkoti.com\/wp-content\/plugins\/seo-by-rank-math\/assets\/admin\/img\/trends-preview.jpg","currentEditor":false,"homepageData":{"assessor":{"powerWords":["incredibile","sorprendente","meraviglioso","unico","bello","felicit\u00e0","brillante","affascinante","carismatico","scioccante","chiaro","completamente","riservato","fiducia","significativo","creativo","definitivamente","delizioso","dimostrare","sbrigati","determinato","degno","dinamico","impressionante","essenziale","ispiratore","innovativo","intenso","efficace","magico","magnifico","storico","importante","incredibile","indispensabile","indimenticabile","irresistibile","leggendario","luminoso","lusso","magico","magnifico","maestoso","memorabile","miracoloso","motivante","necessario","nuovo","ufficiale","perfetto","appassionato","persuasivo","fenomenale","piacere","popolare","potere","prestigioso","prodigioso","profondo","prospero","potente","qualit\u00e0","radiante","veloce","di successo","rivoluzionario","soddisfatto","sicurezza","sensazionale","sereno","lussuoso","splendido","sublime","sorprendente","talentuoso","terrificante","unico","valore","vibrante","vittorioso","vivace","veramente","zelante","autentico","avventuroso","spettacolare","esclusivo","garantito","straordinario","favoloso","affascinante","formidabile","geniale","grandioso","gratuito","abile","illimitato","impeccabile","infallibile","infinitamente","influente","ingegnoso","indimenticabile","insostituibile","leader","maestro","notevole","innovativo","pioniere","potente","riconosciuto","rivoluzionario","sorprendente","superiore","trionfante","ultra","coraggioso","prezioso","avanguardia","vigoroso","visionario","volont\u00e0","vitale","trionfo","glorioso","inarrestabile","ineguagliabile","intelligente","invincibile","libert\u00e0","orgoglio","pace","progresso","rinnovato","saggezza","soddisfazione","sicuro","serenit\u00e0","superamento","talento","trascendente","trasformativo","coraggio","vittoria"],"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\/it\/wp-json\/wp\/v2\/pages\/3028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/comments?post=3028"}],"version-history":[{"count":28,"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/pages\/3028\/revisions"}],"predecessor-version":[{"id":3082,"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/pages\/3028\/revisions\/3082"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/media\/3084"}],"wp:attachment":[{"href":"https:\/\/yamuparkoti.com\/it\/wp-json\/wp\/v2\/media?parent=3028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}