{"id":6064,"date":"2026-10-28T10:41:32","date_gmt":"2026-10-28T10:41:32","guid":{"rendered":"https:\/\/www.compressorjpg.com\/es\/?p=6064"},"modified":"2026-10-28T10:44:53","modified_gmt":"2026-10-28T10:44:53","slug":"reducir-tamano-jpg-en-kb","status":"publish","type":"post","link":"https:\/\/www.compressorjpg.com\/es\/reducir-tamano-jpg-en-kb\/","title":{"rendered":"Reducir tama\u00f1o JPG en KB online gratis"},"content":{"rendered":"<div id=\"compr-1969592486\" class=\"compr-before-content compr-entity-placement\" role=\"region\" aria-label=\"Advertisements\"><center><script>\r\n  atOptions = {\r\n    'key' : 'b2d3d799b85a0dbb336c2807797be63e',\r\n    'format' : 'iframe',\r\n    'height' : 90,\r\n    'width' : 728,\r\n    'params' : {}\r\n  };\r\n<\/script>\r\n<script src=\"https:\/\/overhearappointdare.com\/b2d3d799b85a0dbb336c2807797be63e\/invoke.js\"><\/script><\/center><\/div>\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>JPG Size Reducer<\/title>\n\n\n\n    <!-- Host element for Shadow DOM encapsulation -->\n    <jpg-size-reducer-widget><\/jpg-size-reducer-widget>\n\n    <script>\n        class JpgSizeReducerWidget extends HTMLElement {\n            constructor() {\n                super();\n                \/\/ Attach Shadow DOM to completely isolate styles and markup from the host WordPress site\n                this.shadow = this.attachShadow({ mode: 'open' });\n            }\n\n            connectedCallback() {\n                this.render();\n                this.initApp();\n            }\n\n            render() {\n                this.shadow.innerHTML = `\n                    <style>\n                        \/* Scoped CSS Reset and Font Import inside Shadow DOM *\/\n                        @import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap');\n                        \n                        *, *::before, *::after {\n                            box-sizing: border-box;\n                            margin: 0;\n                            padding: 0;\n                            font-family: 'Plus Jakarta Sans', sans-serif;\n                        }\n\n                        :host {\n                            display: block;\n                            all: initial;\n                            font-family: 'Plus Jakarta Sans', sans-serif;\n                        }\n\n                        .jsr-wrapper {\n                            background: linear-gradient(135deg, #090d16 0%, #111827 50%, #0f172a 100%);\n                            color: #f8fafc;\n                            padding: 24px;\n                            border-radius: 24px;\n                            border: 1px solid rgba(99, 102, 241, 0.25);\n                            box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5), 0 0 30px rgba(99, 102, 241, 0.1);\n                            max-width: 900px;\n                            width: 100%;\n                            margin: 20px auto;\n                            position: relative;\n                            overflow: hidden;\n                        }\n\n                        \/* Decorative background glows *\/\n                        .jsr-glow-1 {\n                            position: absolute;\n                            top: -60px;\n                            left: -60px;\n                            width: 200px;\n                            height: 200px;\n                            background: rgba(99, 102, 241, 0.15);\n                            filter: blur(50px);\n                            border-radius: 50%;\n                            pointer-events: none;\n                        }\n                        .jsr-glow-2 {\n                            position: absolute;\n                            bottom: -60px;\n                            right: -60px;\n                            width: 200px;\n                            height: 200px;\n                            background: rgba(6, 182, 212, 0.15);\n                            filter: blur(50px);\n                            border-radius: 50%;\n                            pointer-events: none;\n                        }\n\n                        \/* Header *\/\n                        .jsr-header {\n                            display: flex;\n                            align-items: center;\n                            justify-content: space-between;\n                            border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n                            padding-bottom: 16px;\n                            margin-bottom: 24px;\n                            flex-wrap: wrap;\n                            gap: 12px;\n                        }\n                        .jsr-title-area {\n                            display: flex;\n                            align-items: center;\n                            gap: 12px;\n                        }\n                        .jsr-icon {\n                            width: 42px;\n                            height: 42px;\n                            background: linear-gradient(135deg, #6366f1, #06b6d4);\n                            border-radius: 12px;\n                            display: flex;\n                            align-items: center;\n                            justify-content: center;\n                            color: #ffffff;\n                            font-size: 18px;\n                            box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n                        }\n                        .jsr-title {\n                            font-size: 20px;\n                            font-weight: 700;\n                            color: #ffffff;\n                            letter-spacing: -0.025em;\n                        }\n                        .jsr-subtitle {\n                            font-size: 12px;\n                            color: #94a3b8;\n                            margin-top: 2px;\n                        }\n                        .jsr-badge {\n                            background: rgba(6, 182, 212, 0.1);\n                            border: 1px solid rgba(6, 182, 212, 0.3);\n                            color: #22d3ee;\n                            font-size: 11px;\n                            font-weight: 600;\n                            padding: 6px 12px;\n                            border-radius: 20px;\n                            display: flex;\n                            align-items: center;\n                            gap: 6px;\n                        }\n                        .jsr-badge span {\n                            width: 6px;\n                            height: 6px;\n                            background: #22d3ee;\n                            border-radius: 50%;\n                            box-shadow: 0 0 8px #22d3ee;\n                        }\n\n                        \/* Grid layout *\/\n                        .jsr-grid {\n                            display: grid;\n                            grid-template-columns: 1fr 1fr;\n                            gap: 24px;\n                        }\n                        @media (max-width: 768px) {\n                            .jsr-grid {\n                                grid-template-columns: 1fr;\n                            }\n                        }\n\n                        \/* Upload Box *\/\n                        .jsr-dropzone {\n                            border: 2px dashed rgba(255, 255, 255, 0.12);\n                            background: rgba(15, 23, 42, 0.4);\n                            border-radius: 16px;\n                            padding: 32px 20px;\n                            text-align: center;\n                            cursor: pointer;\n                            transition: all 0.3s ease;\n                            position: relative;\n                        }\n                        .jsr-dropzone:hover, .jsr-dropzone.dragover {\n                            border-color: #6366f1;\n                            background: rgba(99, 102, 241, 0.05);\n                        }\n                        .jsr-dropzone input {\n                            position: absolute;\n                            inset: 0;\n                            width: 100%;\n                            height: 100%;\n                            opacity: 0;\n                            cursor: pointer;\n                        }\n                        .jsr-upload-icon {\n                            width: 50px;\n                            height: 50px;\n                            background: rgba(255, 255, 255, 0.05);\n                            border-radius: 14px;\n                            display: flex;\n                            align-items: center;\n                            justify-content: center;\n                            margin: 0 auto 14px;\n                            color: #818cf8;\n                            font-size: 20px;\n                        }\n                        .jsr-dropzone h3 {\n                            font-size: 14px;\n                            font-weight: 600;\n                            color: #f1f5f9;\n                            margin-bottom: 4px;\n                        }\n                        .jsr-dropzone p {\n                            font-size: 12px;\n                            color: #94a3b8;\n                            margin-bottom: 10px;\n                        }\n                        .jsr-dropzone span {\n                            font-size: 10px;\n                            background: rgba(255, 255, 255, 0.06);\n                            padding: 4px 8px;\n                            border-radius: 6px;\n                            color: #64748b;\n                        }\n\n                        \/* Controls Card *\/\n                        .jsr-controls {\n                            background: rgba(15, 23, 42, 0.6);\n                            border: 1px solid rgba(255, 255, 255, 0.06);\n                            border-radius: 16px;\n                            padding: 20px;\n                            margin-top: 16px;\n                            opacity: 0.4;\n                            pointer-events: none;\n                            transition: opacity 0.3s ease;\n                        }\n                        .jsr-controls.active {\n                            opacity: 1;\n                            pointer-events: auto;\n                        }\n                        .jsr-section-title {\n                            font-size: 13px;\n                            font-weight: 600;\n                            color: #cbd5e1;\n                            margin-bottom: 12px;\n                            display: flex;\n                            align-items: center;\n                            justify-content: space-between;\n                        }\n\n                        \/* Presets grid *\/\n                        .jsr-presets {\n                            display: grid;\n                            grid-template-columns: repeat(4, 1fr);\n                            gap: 8px;\n                            margin-bottom: 16px;\n                        }\n                        .jsr-preset-btn {\n                            background: rgba(255, 255, 255, 0.03);\n                            border: 1px solid rgba(255, 255, 255, 0.08);\n                            color: #cbd5e1;\n                            padding: 8px 4px;\n                            border-radius: 10px;\n                            font-size: 11px;\n                            font-weight: 600;\n                            cursor: pointer;\n                            transition: all 0.2s ease;\n                            text-align: center;\n                        }\n                        .jsr-preset-btn:hover {\n                            background: rgba(99, 102, 241, 0.15);\n                            border-color: rgba(99, 102, 241, 0.4);\n                            color: #ffffff;\n                        }\n                        .jsr-preset-btn.selected {\n                            background: linear-gradient(135deg, #6366f1, #4f46e5);\n                            border-color: #818cf8;\n                            color: #ffffff;\n                            box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n                        }\n\n                        \/* Custom KB input group *\/\n                        .jsr-custom-group {\n                            display: flex;\n                            gap: 8px;\n                            align-items: center;\n                            background: rgba(0, 0, 0, 0.2);\n                            border: 1px solid rgba(255, 255, 255, 0.08);\n                            border-radius: 10px;\n                            padding: 6px 12px;\n                        }\n                        .jsr-custom-group label {\n                            font-size: 12px;\n                            color: #94a3b8;\n                            font-weight: 500;\n                            white-space: nowrap;\n                        }\n                        .jsr-custom-input {\n                            background: transparent;\n                            border: none;\n                            color: #ffffff;\n                            font-size: 13px;\n                            font-weight: 600;\n                            width: 100%;\n                            outline: none;\n                        }\n                        .jsr-apply-btn {\n                            background: #6366f1;\n                            color: white;\n                            border: none;\n                            padding: 6px 12px;\n                            border-radius: 6px;\n                            font-size: 11px;\n                            font-weight: 600;\n                            cursor: pointer;\n                            transition: background 0.2s;\n                        }\n                        .jsr-apply-btn:hover {\n                            background: #4f46e5;\n                        }\n\n                        \/* Right Column Preview Panel *\/\n                        .jsr-preview-panel {\n                            background: rgba(15, 23, 42, 0.6);\n                            border: 1px solid rgba(255, 255, 255, 0.06);\n                            border-radius: 16px;\n                            padding: 20px;\n                            display: flex;\n                            flex-direction: column;\n                            justify-content: space-between;\n                            min-height: 420px;\n                            position: relative;\n                        }\n                        .jsr-empty-state {\n                            position: absolute;\n                            inset: 0;\n                            display: flex;\n                            flex-direction: column;\n                            align-items: center;\n                            justify-content: center;\n                            text-align: center;\n                            padding: 20px;\n                        }\n                        .jsr-empty-icon {\n                            width: 50px;\n                            height: 50px;\n                            border-radius: 50%;\n                            background: rgba(255, 255, 255, 0.03);\n                            border: 1px solid rgba(255, 255, 255, 0.06);\n                            display: flex;\n                            align-items: center;\n                            justify-content: center;\n                            color: #64748b;\n                            font-size: 18px;\n                            margin-bottom: 12px;\n                        }\n                        .jsr-empty-state h4 {\n                            font-size: 13px;\n                            font-weight: 600;\n                            color: #94a3b8;\n                            margin-bottom: 4px;\n                        }\n                        .jsr-empty-state p {\n                            font-size: 11px;\n                            color: #64748b;\n                            max-width: 220px;\n                        }\n\n                        .jsr-result-content {\n                            display: flex;\n                            flex-direction: column;\n                            gap: 16px;\n                            width: 100%;\n                        }\n                        .jsr-img-box {\n                            position: relative;\n                            width: 100%;\n                            height: 180px;\n                            background: #090d16;\n                            border: 1px solid rgba(255, 255, 255, 0.08);\n                            border-radius: 12px;\n                            display: flex;\n                            align-items: center;\n                            justify-content: center;\n                            overflow: hidden;\n                        }\n                        .jsr-img-box img {\n                            max-height: 100%;\n                            max-width: 100%;\n                            object-fit: contain;\n                        }\n                        .jsr-preview-tag {\n                            position: absolute;\n                            top: 10px;\n                            left: 10px;\n                            background: rgba(15, 23, 42, 0.85);\n                            backdrop-filter: blur(8px);\n                            border: 1px solid rgba(255, 255, 255, 0.1);\n                            padding: 4px 10px;\n                            border-radius: 8px;\n                            font-size: 11px;\n                            font-weight: 600;\n                            color: #e2e8f0;\n                        }\n\n                        \/* Stats Grid *\/\n                        .jsr-stats-grid {\n                            display: grid;\n                            grid-template-columns: 1fr 1fr;\n                            gap: 10px;\n                        }\n                        .jsr-stat-card {\n                            background: rgba(255, 255, 255, 0.02);\n                            border: 1px solid rgba(255, 255, 255, 0.06);\n                            border-radius: 10px;\n                            padding: 12px;\n                            display: flex;\n                            flex-direction: column;\n                            position: relative;\n                        }\n                        .jsr-stat-card.optimized {\n                            border-color: rgba(6, 182, 212, 0.3);\n                            background: rgba(6, 182, 212, 0.03);\n                        }\n                        .jsr-stat-title {\n                            font-size: 10px;\n                            font-weight: 600;\n                            text-transform: uppercase;\n                            color: #94a3b8;\n                            letter-spacing: 0.05em;\n                        }\n                        .jsr-stat-val {\n                            font-size: 16px;\n                            font-weight: 700;\n                            color: #ffffff;\n                            margin-top: 4px;\n                        }\n                        .jsr-stat-sub {\n                            font-size: 10px;\n                            color: #64748b;\n                            margin-top: 2px;\n                        }\n                        .jsr-savings-pill {\n                            position: absolute;\n                            top: 8px;\n                            right: 8px;\n                            background: rgba(6, 182, 212, 0.15);\n                            color: #22d3ee;\n                            font-size: 10px;\n                            font-weight: 700;\n                            padding: 2px 6px;\n                            border-radius: 6px;\n                        }\n\n                        \/* Download Button *\/\n                        .jsr-download-btn {\n                            width: 100%;\n                            background: linear-gradient(135deg, #6366f1, #06b6d4);\n                            color: white;\n                            border: none;\n                            padding: 14px;\n                            border-radius: 12px;\n                            font-weight: 600;\n                            font-size: 13px;\n                            cursor: pointer;\n                            transition: all 0.2s ease;\n                            box-shadow: 0 4px 20px rgba(99, 102, 241, 0.4);\n                            display: flex;\n                            align-items: center;\n                            justify-content: center;\n                            gap: 8px;\n                        }\n                        .jsr-download-btn:hover {\n                            opacity: 0.92;\n                            transform: translateY(-1px);\n                            box-shadow: 0 6px 25px rgba(99, 102, 241, 0.6);\n                        }\n\n                        \/* Toast notification inside widget *\/\n                        .jsr-toast {\n                            position: absolute;\n                            bottom: 20px;\n                            right: 20px;\n                            background: #0f172a;\n                            border: 1px solid rgba(6, 182, 212, 0.4);\n                            color: #f8fafc;\n                            padding: 10px 16px;\n                            border-radius: 10px;\n                            font-size: 12px;\n                            font-weight: 500;\n                            box-shadow: 0 10px 30px rgba(0,0,0,0.5);\n                            display: flex;\n                            align-items: center;\n                            gap: 8px;\n                            transform: translateY(50px);\n                            opacity: 0;\n                            transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n                            z-index: 100;\n                        }\n                        .jsr-toast.show {\n                            transform: translateY(0);\n                            opacity: 1;\n                        }\n                    <\/style>\n\n                    <div class=\"jsr-wrapper\">\n                        <div class=\"jsr-glow-1\"><\/div>\n                        <div class=\"jsr-glow-2\"><\/div>\n\n                        <!-- Header -->\n                        <div class=\"jsr-header\">\n                            <div class=\"jsr-title-area\">\n                                <div class=\"jsr-icon\">\n                                    <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"17 8 12 3 7 8\"><\/polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"><\/line><\/svg>\n                                <\/div>\n                                <center><div>\n                                    <h2 class=\"jsr-title\">Reductor de Tama\u00f1o JPG<\/h2>\n                                    \n                                <\/div><\/center>\n                            <\/div>\n                           \n                        <\/div>\n\n                        <!-- Main Grid -->\n                        <div class=\"jsr-grid\">\n                            \n                            <!-- Left: Upload & Presets -->\n                            <div>\n                                <div id=\"drop-zone\" class=\"jsr-dropzone\">\n                                    <input type=\"file\" id=\"file-input\" accept=\"image\/jpeg,image\/jpg\">\n                                    <div class=\"jsr-upload-icon\">\n                                        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"><\/rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"><\/circle><polyline points=\"21 15 16 10 5 21\"><\/polyline><\/svg>\n                                    <\/div>\n                                    <h3>Suelta tu imagen JPG aqu\u00ed<\/h3>\n                                    <p>o haz clic para buscar en tu dispositivo<\/p>\n                                    <span>Soporta JPG \/ JPEG<\/span>\n                                <\/div>\n\n                                <div id=\"controls-card\" class=\"jsr-controls\">\n                                    <div class=\"jsr-section-title\">\n                                        <span>Presets de Tama\u00f1o KB<\/span>\n                                        <span style=\"font-size: 11px; color: #818cf8;\" id=\"active-target-text\">Seleccionado: 100 KB<\/span>\n                                    <\/div>\n\n                                    <!-- 8 Preset Buttons -->\n                                    <div class=\"jsr-presets\">\n                                        <button class=\"jsr-preset-btn\" data-kb=\"20\">20 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"50\">50 KB<\/button>\n                                        <button class=\"jsr-preset-btn selected\" data-kb=\"100\">100 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"150\">150 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"200\">200 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"300\">300 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"500\">500 KB<\/button>\n                                        <button class=\"jsr-preset-btn\" data-kb=\"1024\">1 MB<\/button>\n                                    <\/div>\n\n                                    <!-- Custom KB Input -->\n                                    <div class=\"jsr-custom-group\">\n                                        <label for=\"custom-kb\">KB Personalizado:<\/label>\n                                        <input type=\"number\" id=\"custom-kb\" class=\"jsr-custom-input\" placeholder=\"ej. 75\" min=\"5\" max=\"10240\">\n                                        <button id=\"apply-custom-btn\" class=\"jsr-apply-btn\">Aplicar<\/button>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n\n                            <!-- Right: Preview & Stats -->\n                            <div>\n                                <div class=\"jsr-preview-panel\">\n                                    \n                                    <div id=\"empty-state\" class=\"jsr-empty-state\">\n                                        <div class=\"jsr-empty-icon\">\n                                            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"><\/line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"><\/line><\/svg>\n                                        <\/div>\n                                        <h4>Ninguna Imagen Seleccionada<\/h4>\n                                        <p>Sube una imagen JPG a la izquierda para iniciar la compresi\u00f3n inteligente por KB.<\/p>\n                                    <\/div>\n\n                                    <div id=\"result-content\" style=\"display: none;\" class=\"jsr-result-content\">\n                                        <div class=\"jsr-img-box\">\n                                            <img id=\"preview-img\" alt=\"Vista Previa Comprimida\">\n                                            <div class=\"jsr-preview-tag\">Vista Previa Optimizada<\/div>\n                                        <\/div>\n\n                                        <div class=\"jsr-stats-grid\">\n                                            <div class=\"jsr-stat-card\">\n                                                <span class=\"jsr-stat-title\">Tama\u00f1o Original<\/span>\n                                                <div class=\"jsr-stat-val\" id=\"orig-size\">-<\/div>\n                                                <span class=\"jsr-stat-sub\" id=\"orig-dim\">-<\/span>\n                                            <\/div>\n                                            <div class=\"jsr-stat-card optimized\">\n                                                <span class=\"jsr-stat-title\">Tama\u00f1o Optimizado<\/span>\n                                                <div class=\"jsr-stat-val\" id=\"new-size\">-<\/div>\n                                                <span class=\"jsr-stat-sub\" id=\"new-dim\">-<\/span>\n                                                <div class=\"jsr-savings-pill\" id=\"savings-badge\">-0%<\/div>\n                                            <\/div>\n                                        <\/div>\n\n                                        <button id=\"download-btn\" class=\"jsr-download-btn\">\n                                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path><polyline points=\"7 10 12 15 17 10\"><\/polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"><\/line><\/svg>\n                                            Descargar JPG Optimizado\n                                        <\/button>\n                                    <\/div>\n\n                                <\/div>\n                            <\/div>\n\n                        <\/div>\n\n                        <!-- Toast Notification -->\n                        <div id=\"toast\" class=\"jsr-toast\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22d3ee\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"><\/polyline><\/svg>\n                            <span id=\"toast-msg\">\u00a1\u00c9xito!<\/span>\n                        <\/div>\n                    <\/div>\n\n                    <canvas id=\"canvas\" style=\"display: none;\"><\/canvas>\n                `;\n            }\n\n            initApp() {\n                const shadow = this.shadow;\n                let currentFile = null;\n                let originalImage = null;\n                let compressedBlob = null;\n                let originalFileName = \"imagen-optimizada.jpg\";\n                let targetKB = 100; \/\/ default target\n\n                const dropZone = shadow.getElementById('drop-zone');\n                const fileInput = shadow.getElementById('file-input');\n                const controlsCard = shadow.getElementById('controls-card');\n                const emptyState = shadow.getElementById('empty-state');\n                const resultContent = shadow.getElementById('result-content');\n                const previewImg = shadow.getElementById('preview-img');\n                const origSizeEl = shadow.getElementById('orig-size');\n                const origDimEl = shadow.getElementById('orig-dim');\n                const newSizeEl = shadow.getElementById('new-size');\n                const newDimEl = shadow.getElementById('new-dim');\n                const savingsBadge = shadow.getElementById('savings-badge');\n                const downloadBtn = shadow.getElementById('download-btn');\n                const customKbInput = shadow.getElementById('custom-kb');\n                const applyCustomBtn = shadow.getElementById('apply-custom-btn');\n                const activeTargetText = shadow.getElementById('active-target-text');\n                const canvas = shadow.getElementById('canvas');\n                const presetBtns = shadow.querySelectorAll('.jsr-preset-btn');\n                const toast = shadow.getElementById('toast');\n                const toastMsg = shadow.getElementById('toast-msg');\n\n                \/\/ Drag and drop event listeners\n                ['dragenter', 'dragover'].forEach(eventName => {\n                    dropZone.addEventListener(eventName, (e) => {\n                        e.preventDefault();\n                        dropZone.classList.add('dragover');\n                    });\n                });\n                ['dragleave', 'drop'].forEach(eventName => {\n                    dropZone.addEventListener(eventName, (e) => {\n                        e.preventDefault();\n                        dropZone.classList.remove('dragover');\n                    });\n                });\n                dropZone.addEventListener('drop', (e) => {\n                    const files = e.dataTransfer.files;\n                    if (files.length > 0) handleFile(files[0]);\n                });\n                fileInput.addEventListener('change', (e) => {\n                    if (e.target.files.length > 0) handleFile(e.target.files[0]);\n                });\n\n                \/\/ Preset button clicks\n                presetBtns.forEach(btn => {\n                    btn.addEventListener('click', () => {\n                        presetBtns.forEach(b => b.classList.remove('selected'));\n                        btn.classList.add('selected');\n                        targetKB = parseInt(btn.getAttribute('data-kb'));\n                        customKbInput.value = '';\n                        activeTargetText.textContent = `Seleccionado: ${targetKB >= 1024 ? (targetKB\/1024) + ' MB' : targetKB + ' KB'}`;\n                        if (originalImage) runBinarySearchCompression();\n                    });\n                });\n\n                \/\/ Custom KB apply\n                applyCustomBtn.addEventListener('click', () => {\n                    const val = parseInt(customKbInput.value);\n                    if (!val || val <= 0) {\n                        showToast(\"Por favor ingresa un objetivo de KB v\u00e1lido.\");\n                        return;\n                    }\n                    presetBtns.forEach(b => b.classList.remove('selected'));\n                    targetKB = val;\n                    activeTargetText.textContent = `Seleccionado: ${targetKB} KB`;\n                    if (originalImage) runBinarySearchCompression();\n                });\n\n                function handleFile(file) {\n                    if (!file.type.match('image\/jpeg') && !file.type.match('image\/jpg')) {\n                        showToast(\"Por favor selecciona un archivo de imagen JPG\/JPEG v\u00e1lido.\");\n                        return;\n                    }\n                    currentFile = file;\n                    originalFileName = file.name.replace(\/\\.[^\/.]+$\/, \"\") + \"-optimizado.jpg\";\n\n                    const reader = new FileReader();\n                    reader.onload = (e) => {\n                        const img = new Image();\n                        img.onload = () => {\n                            originalImage = img;\n                            controlsCard.classList.add('active');\n                            emptyState.style.display = 'none';\n                            resultContent.style.display = 'flex';\n\n                            origSizeEl.textContent = formatBytes(file.size);\n                            origDimEl.textContent = `${img.width} \u00d7 ${img.height} px`;\n\n                            runBinarySearchCompression();\n                        };\n                        img.src = e.target.result;\n                    };\n                    reader.readAsDataURL(file);\n                }\n\n                \/\/ High-precision Binary Search Compression Algorithm\n                async function runBinarySearchCompression() {\n                    if (!originalImage) return;\n\n                    const targetBytes = targetKB * 1024;\n                    const ctx = canvas.getContext('2d');\n                    canvas.width = originalImage.width;\n                    canvas.height = originalImage.height;\n                    ctx.drawImage(originalImage, 0, 0);\n\n                    \/\/ If original is already smaller or equal to target KB, generate at highest reasonable quality\n                    if (currentFile.size <= targetBytes) {\n                        canvas.toBlob(blob => {\n                            setCompressedResult(blob);\n                            showToast(`\u00a1La imagen ya est\u00e1 dentro de los ${targetKB} KB!`);\n                        }, 'image\/jpeg', 0.95);\n                        return;\n                    }\n\n                    let low = 0.02;\n                    let high = 0.98;\n                    let bestQuality = 0.75;\n                    let bestBlob = null;\n                    let minDiff = Infinity;\n\n                    \/\/ 8 Precision binary search iterations\n                    for (let i = 0; i < 8; i++) {\n                        let mid = (low + high) \/ 2;\n                        let blob = await new Promise(resolve => canvas.toBlob(resolve, 'image\/jpeg', mid));\n                        if (!blob) break;\n\n                        let diff = blob.size - targetBytes;\n\n                        if (blob.size <= targetBytes) {\n                            if (Math.abs(diff) < minDiff) {\n                                minDiff = Math.abs(diff);\n                                bestQuality = mid;\n                                bestBlob = blob;\n                            }\n                            low = mid; \/\/ Try higher quality to get closer to target from below\n                        } else {\n                            high = mid; \/\/ Too large, lower quality\n                            if (!bestBlob) {\n                                bestQuality = mid;\n                                bestBlob = blob;\n                            }\n                        }\n                    }\n\n                    \/\/ Fallback to best found blob or default\n                    if (bestBlob) {\n                        setCompressedResult(bestBlob);\n                        showToast(`\u00a1Comprimido exitosamente a ~${targetKB} KB!`);\n                    }\n                }\n\n                function setCompressedResult(blob) {\n                    compressedBlob = blob;\n                    const url = URL.createObjectURL(blob);\n                    previewImg.src = url;\n\n                    newSizeEl.textContent = formatBytes(blob.size);\n                    newDimEl.textContent = `${originalImage.width} \u00d7 ${originalImage.height} px`;\n\n                    const diff = currentFile.size - blob.size;\n                    const percent = currentFile.size > 0 ? Math.round((diff \/ currentFile.size) * 100) : 0;\n                    savingsBadge.textContent = percent > 0 ? `-${percent}%` : `0%`;\n                }\n\n                downloadBtn.addEventListener('click', () => {\n                    if (!compressedBlob) return;\n                    const link = document.createElement('a');\n                    link.href = URL.createObjectURL(compressedBlob);\n                    link.download = originalFileName;\n                    document.body.appendChild(link);\n                    link.click();\n                    document.body.removeChild(link);\n                    showToast(\"\u00a1JPG optimizado descargado con \u00e9xito!\");\n                });\n\n                function formatBytes(bytes) {\n                    if (bytes === 0) return '0 Bytes';\n                    const k = 1024;\n                    const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n                    const i = Math.floor(Math.log(bytes) \/ Math.log(k));\n                    return parseFloat((bytes \/ Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n                }\n\n                function showToast(msg) {\n                    toastMsg.textContent = msg;\n                    toast.classList.add('show');\n                    setTimeout(() => {\n                        toast.classList.remove('show');\n                    }, 3000);\n                }\n            }\n        }\n\n        \/\/ Register custom element\n        customElements.define('jpg-size-reducer-widget', JpgSizeReducerWidget);\n    <\/script>\n\n\n\n<div style=\"height:41px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfNecesitas reducir el tama\u00f1o de una imagen JPG para subirla a una p\u00e1gina web, completar un formulario o enviar una fotograf\u00eda por Internet? Con nuestra herramienta para reducir el tama\u00f1o JPG en KB, puedes comprimir tus im\u00e1genes de forma sencilla y conseguir archivos m\u00e1s peque\u00f1os en pocos pasos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CompressorJPG te permite elegir un tama\u00f1o objetivo de 20 KB, 50 KB, 100 KB, 200 KB, 500 KB o 1 MB. Tambi\u00e9n puedes introducir tu propio l\u00edmite en KB para ajustar el tama\u00f1o seg\u00fan tus necesidades.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitas descargar ning\u00fan programa ni tener conocimientos t\u00e9cnicos. Solo tienes que seleccionar tu imagen, elegir el tama\u00f1o deseado y descargar el resultado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es un reductor de tama\u00f1o JPG?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un reductor de tama\u00f1o JPG es una herramienta que disminuye el peso de una imagen para que ocupe menos espacio en el dispositivo o se pueda compartir m\u00e1s f\u00e1cilmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las fotograf\u00edas tomadas con m\u00f3viles y c\u00e1maras pueden ocupar varios megabytes. Sin embargo, algunos sitios web, formularios de registro y plataformas online solo aceptan im\u00e1genes de un tama\u00f1o determinado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, si una p\u00e1gina permite subir una fotograf\u00eda de hasta 100 KB, pero tu imagen ocupa 800 KB, tendr\u00e1s que reducir su tama\u00f1o antes de enviarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con nuestro reductor JPG puedes ajustar la compresi\u00f3n para intentar alcanzar el l\u00edmite que necesitas sin modificar las dimensiones originales de la imagen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo reducir el tama\u00f1o de una imagen JPG en KB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizar esta herramienta es f\u00e1cil. Sigue estos pasos para comprimir tu fotograf\u00eda.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Selecciona tu imagen JPG<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Haz clic en el \u00e1rea de carga y elige una imagen JPG o JPEG desde tu ordenador. Tambi\u00e9n puedes arrastrar el archivo hasta el \u00e1rea indicada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Elige el tama\u00f1o de salida<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Selecciona uno de los tama\u00f1os disponibles, como 20 KB, 50 KB, 100 KB, 150 KB, 200 KB, 300 KB, 500 KB o 1 MB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si necesitas un tama\u00f1o diferente, escribe el valor en el campo personalizado y pulsa el bot\u00f3n para aplicarlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Deja que la herramienta comprima la imagen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La herramienta ajustar\u00e1 la calidad de compresi\u00f3n JPEG para intentar conseguir un archivo que se acerque al tama\u00f1o seleccionado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El resultado puede variar seg\u00fan la fotograf\u00eda original, sus dimensiones, los colores y los detalles que contiene.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Comprueba el resultado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de descargar la imagen, puedes consultar el tama\u00f1o original y el tama\u00f1o comprimido. Tambi\u00e9n puedes comparar las dimensiones en p\u00edxeles para comprobar que se han mantenido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Descarga tu imagen JPG<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando est\u00e9s satisfecho con el resultado, pulsa el bot\u00f3n de descarga para guardar la imagen optimizada en tu dispositivo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reducir JPG a 20 KB, 50 KB o 100 KB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cada p\u00e1gina web puede establecer un l\u00edmite de tama\u00f1o diferente para las im\u00e1genes. Por eso, es \u00fatil disponer de varias opciones de compresi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducir JPG a 20 KB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta opci\u00f3n puede resultar \u00fatil para formularios con l\u00edmites muy peque\u00f1os, fotograf\u00edas de perfil y otras aplicaciones que requieren archivos ligeros. Ten en cuenta que una imagen con muchos detalles puede necesitar una compresi\u00f3n considerable para acercarse a 20 KB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducir JPG a 50 KB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comprimir una imagen a 50 KB puede ser una buena alternativa cuando necesitas un archivo peque\u00f1o para una solicitud online, una p\u00e1gina web o un formulario digital.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducir JPG a 100 KB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El l\u00edmite de 100 KB es pr\u00e1ctico para muchas situaciones en las que se necesita una imagen ligera. Puede ayudarte a preparar fotograf\u00edas para p\u00e1ginas web y plataformas que establecen este tama\u00f1o m\u00e1ximo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducir JPG a 200 KB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si necesitas conservar m\u00e1s detalles en una fotograf\u00eda, un objetivo de 200 KB puede ofrecer un equilibrio m\u00e1s adecuado entre el peso del archivo y la calidad visual, aunque el resultado depende de la imagen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducir JPG a 500 KB o 1 MB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Estos tama\u00f1os permiten trabajar con archivos m\u00e1s grandes cuando no necesitas una compresi\u00f3n tan fuerte. Pueden ser \u00fatiles para fotograf\u00edas que contienen muchos detalles o para im\u00e1genes que se mostrar\u00e1n a mayor tama\u00f1o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reducir el tama\u00f1o de una imagen sin perder demasiada calidad<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando comprimes una imagen JPG, la herramienta modifica la calidad de compresi\u00f3n para disminuir el tama\u00f1o del archivo. Una compresi\u00f3n moderada suele conservar una apariencia similar a la original, mientras que una compresi\u00f3n m\u00e1s intensa puede producir p\u00e9rdida de detalles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No existe un m\u00e9todo que garantice que todas las im\u00e1genes alcancen cualquier tama\u00f1o en KB sin perder calidad. Una fotograf\u00eda con muchos colores y detalles puede necesitar m\u00e1s espacio que una imagen sencilla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para obtener un buen resultado, empieza con un tama\u00f1o objetivo razonable. Despu\u00e9s, comprueba la vista previa y aseg\u00farate de que los detalles importantes siguen siendo claros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la imagen se ve demasiado borrosa, prueba con un l\u00edmite de KB m\u00e1s alto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 reducir el tama\u00f1o de los archivos JPG?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hay varias razones por las que puede ser \u00fatil comprimir tus im\u00e1genes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Subir im\u00e1genes a formularios:<\/strong> algunos formularios online establecen un l\u00edmite m\u00e1ximo de KB.<\/li>\n\n\n\n<li><strong>Mejorar la velocidad de una p\u00e1gina web:<\/strong> los archivos de imagen m\u00e1s peque\u00f1os pueden reducir el peso de una p\u00e1gina y ayudar a mejorar sus tiempos de carga.<\/li>\n\n\n\n<li><strong>Enviar fotograf\u00edas por Internet:<\/strong> los archivos ligeros son m\u00e1s f\u00e1ciles de compartir cuando existen l\u00edmites de tama\u00f1o.<\/li>\n\n\n\n<li><strong>Ahorrar espacio de almacenamiento:<\/strong> las im\u00e1genes comprimidas pueden ocupar menos espacio en tu dispositivo.<\/li>\n\n\n\n<li><strong>Preparar im\u00e1genes para tr\u00e1mites online:<\/strong> algunas plataformas solicitan fotograf\u00edas que no superen un tama\u00f1o espec\u00edfico.<\/li>\n\n\n\n<li><strong>Optimizar im\u00e1genes para m\u00f3viles:<\/strong> los archivos m\u00e1s peque\u00f1os pueden consumir menos datos al cargarse o compartirse.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Recuerda que el tama\u00f1o m\u00e1ximo permitido depende de cada p\u00e1gina web o servicio. Comprueba siempre sus requisitos antes de subir tu archivo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfSe pueden comprimir im\u00e1genes JPG sin instalar programas?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. CompressorJPG est\u00e1 dise\u00f1ado para funcionar directamente en el navegador, sin necesidad de instalar un programa adicional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La compresi\u00f3n de esta herramienta se realiza localmente en el navegador del usuario. Esto significa que la imagen seleccionada se procesa en tu dispositivo y no necesita enviarse a un servidor para realizar la compresi\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este funcionamiento tambi\u00e9n permite utilizar la herramienta desde un ordenador sin instalar software especializado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para obtener mejores resultados, utiliza una versi\u00f3n actualizada de tu navegador y aseg\u00farate de disponer de memoria suficiente si trabajas con fotograf\u00edas de gran tama\u00f1o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfCu\u00e1l es la diferencia entre KB y MB?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">KB y MB son unidades utilizadas para medir el tama\u00f1o de los archivos digitales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un kilobyte (KB) representa una unidad m\u00e1s peque\u00f1a que un megabyte (MB). En la herramienta, 1 MB corresponde a 1024 KB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>20 KB: un archivo muy peque\u00f1o.<\/li>\n\n\n\n<li>50 KB: adecuado para algunos formularios con l\u00edmites reducidos.<\/li>\n\n\n\n<li>100 KB: \u00fatil para im\u00e1genes que necesitan un peso limitado.<\/li>\n\n\n\n<li>500 KB: permite un tama\u00f1o de archivo mayor.<\/li>\n\n\n\n<li>1 MB: equivale a 1024 KB.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El tama\u00f1o que necesitas depender\u00e1 de los requisitos de la plataforma donde quieras utilizar la imagen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo puedo reducir una imagen JPG a 100 KB?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Selecciona tu imagen, elige la opci\u00f3n de 100 KB y deja que la herramienta ajuste la compresi\u00f3n. Despu\u00e9s, comprueba el tama\u00f1o obtenido y descarga el archivo si el resultado cumple tus necesidades.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo comprimir una imagen JPG a 50 KB gratis?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. Puedes utilizar la opci\u00f3n de 50 KB sin instalar programas. El resultado depende de las caracter\u00edsticas de la imagen original y del nivel de compresi\u00f3n necesario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo establecer un tama\u00f1o personalizado en KB?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. Introduce el tama\u00f1o que deseas en el campo personalizado y pulsa el bot\u00f3n para aplicarlo. La herramienta intentar\u00e1 ajustar la compresi\u00f3n al l\u00edmite indicado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSe mantienen las dimensiones de la imagen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. Esta herramienta conserva las dimensiones originales en p\u00edxeles durante la compresi\u00f3n. Su funci\u00f3n principal es reducir el tama\u00f1o del archivo, no cambiar su anchura o altura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfLa imagen pierde calidad al comprimirla?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La compresi\u00f3n JPG puede reducir algunos detalles de la imagen. Cuanto m\u00e1s peque\u00f1o sea el tama\u00f1o objetivo, mayor puede ser la p\u00e9rdida de calidad. Comprueba siempre la vista previa antes de descargar el archivo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo utilizar esta herramienta desde el m\u00f3vil?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes utilizarla desde un navegador m\u00f3vil compatible. Selecciona una fotograf\u00eda de tu dispositivo, elige el tama\u00f1o objetivo y descarga el resultado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEs necesario crear una cuenta?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitas instalar un programa para utilizar la herramienta. Puedes comenzar seleccionando tu imagen directamente en la p\u00e1gina.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEs seguro reducir el tama\u00f1o de una imagen online?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En esta herramienta, la compresi\u00f3n se realiza localmente en el navegador, por lo que la imagen no necesita enviarse a un servidor para procesarse. Aun as\u00ed, evita utilizar dispositivos compartidos si tus fotograf\u00edas contienen informaci\u00f3n privada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reduce tu JPG al tama\u00f1o que necesitas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comprimir una imagen no tiene por qu\u00e9 ser complicado. Con CompressorJPG puedes seleccionar un archivo, elegir un objetivo en KB y obtener una versi\u00f3n m\u00e1s ligera en pocos pasos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prueba diferentes tama\u00f1os hasta encontrar el equilibrio adecuado entre el peso del archivo y la calidad visual. As\u00ed podr\u00e1s preparar tus im\u00e1genes para formularios, p\u00e1ginas web y otras necesidades digitales de forma sencilla.<\/p>\n<div id=\"compr-2176628986\" class=\"compr-after-content compr-entity-placement\" role=\"region\" aria-label=\"Advertisements\"><script async=\"async\" data-cfasync=\"false\" src=\"https:\/\/overhearappointdare.com\/fd2904bb45b864bbf2485576be5f2ce4\/invoke.js\"><\/script>\r\n<div id=\"container-fd2904bb45b864bbf2485576be5f2ce4\"><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>JPG Size Reducer \u00bfNecesitas reducir el tama\u00f1o de una imagen JPG para subirla a una p\u00e1gina web, completar un formulario&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[1],"tags":[136,133,129,131,135,132,134,137,130,128],"class_list":["post-6064","post","type-post","status-publish","format-standard","hentry","category-comprimir","tag-compresor-jpg-online","tag-comprimir-imagen-a-20-kb","tag-comprimir-jpg-a-100-kb","tag-comprimir-jpg-online-gratis","tag-jpg-a-200-kb","tag-reducir-jpg-a-50-kb","tag-reducir-peso-de-una-imagen-jpg","tag-reducir-tamano-de-fotos-online","tag-reducir-tamano-de-imagen-jpg","tag-reducir-tamano-jpg-en-kb"],"_links":{"self":[{"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/posts\/6064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/comments?post=6064"}],"version-history":[{"count":3,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/posts\/6064\/revisions"}],"predecessor-version":[{"id":6067,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/posts\/6064\/revisions\/6067"}],"wp:attachment":[{"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/media?parent=6064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/categories?post=6064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.compressorjpg.com\/es\/wp-json\/wp\/v2\/tags?post=6064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}