{"id":1537,"date":"2025-07-09T16:46:16","date_gmt":"2025-07-09T16:46:16","guid":{"rendered":"https:\/\/polisecuador.org\/?page_id=1537"},"modified":"2025-07-10T14:38:35","modified_gmt":"2025-07-10T14:38:35","slug":"generador-de-imagenes-v3","status":"publish","type":"page","link":"https:\/\/polisecuador.org\/en\/plog\/generador-de-imagenes-v3\/","title":{"rendered":"Generador de Im\u00e1genes v3"},"content":{"rendered":"\n[et_pb_section fb_built=\u00bb1&#8243; theme_builder_area=\u00bbpost_content\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb da_is_popup=\u00bboff\u00bb da_exit_intent=\u00bboff\u00bb da_has_close=\u00bbon\u00bb da_alt_close=\u00bboff\u00bb da_dark_close=\u00bboff\u00bb da_not_modal=\u00bbon\u00bb da_is_singular=\u00bboff\u00bb da_with_loader=\u00bboff\u00bb da_has_shadow=\u00bbon\u00bb da_disable_devices=\u00bboff|off|off\u00bb][et_pb_row _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb theme_builder_area=\u00bbpost_content\u00bb][et_pb_column _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb type=\u00bb4_4&#8243; theme_builder_area=\u00bbpost_content\u00bb][et_pb_code _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb theme_builder_area=\u00bbpost_content\u00bb hover_enabled=\u00bb0&#8243; sticky_enabled=\u00bb0&#8243;]<div id=\"divi-column-generator-app\"><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script><!-- [et_pb_line_break_holder] -->    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><!-- [et_pb_line_break_holder] -->    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;600;700&#038;family=Playfair+Display:wght@700&#038;family=Merriweather:wght@400;700&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <style><!-- [et_pb_line_break_holder] -->        \/* Aseguramos que las fuentes base no entren en conflicto con otros estilos *\/<!-- [et_pb_line_break_holder] -->        .generador-editorial-container {<!-- [et_pb_line_break_holder] -->            font-family: 'Inter', sans-serif;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .generador-editorial-container .font-display {<!-- [et_pb_line_break_holder] -->            font-family: 'Playfair Display', serif;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .generador-editorial-container .font-body {<!-- [et_pb_line_break_holder] -->            font-family: 'Merriweather', serif;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .bg-custom-red {<!-- [et_pb_line_break_holder] -->            background-color: #C11731;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .hover\\:bg-custom-red-dark:hover {<!-- [et_pb_line_break_holder] -->            background-color: #a5152a; \/* Un tono ligeramente m\u00e1s oscuro para el efecto hover *\/<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        \/* Estilo para el contenedor del canvas para asegurar que sea responsivo *\/<!-- [et_pb_line_break_holder] -->        .canvas-preview-wrapper {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            \/* Mantener la relaci\u00f3n de aspecto 1620:2000 (ancho:alto) - Ajustado para nuevo ancho *\/<!-- [et_pb_line_break_holder] -->            padding-top: calc(2000 \/ 1620 * 100%); \/* Aproximadamente 123.45% *\/<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->            background-color: #f0f0f0; \/* Fondo para cuando el canvas no est\u00e1 cargado *\/<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .canvas-preview-wrapper canvas {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            left: 0;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            display: block;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        \/* Estilo para el spinner de carga de imagen *\/<!-- [et_pb_line_break_holder] -->        .image-loading-spinner {<!-- [et_pb_line_break_holder] -->            border: 4px solid rgba(0, 0, 0, 0.1);<!-- [et_pb_line_break_holder] -->            border-left-color: #C11731;<!-- [et_pb_line_break_holder] -->            border-radius: 50%;<!-- [et_pb_line_break_holder] -->            width: 24px;<!-- [et_pb_line_break_holder] -->            height: 24px;<!-- [et_pb_line_break_holder] -->            animation: spin 1s linear infinite;<!-- [et_pb_line_break_holder] -->            display: none; \/* Oculto por defecto *\/<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 50%;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            margin-top: -12px;<!-- [et_pb_line_break_holder] -->            margin-left: -12px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        @keyframes spin {<!-- [et_pb_line_break_holder] -->            0% { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->            100% { transform: rotate(360deg); }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ESTRUCTURA HTML DEL GENERADOR --><!-- [et_pb_line_break_holder] -->    <div class=\"generador-editorial-container w-full max-w-6xl mx-auto bg-white rounded-2xl shadow-2xl overflow-hidden flex flex-col lg:flex-row my-8\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Panel de Controles --><!-- [et_pb_line_break_holder] -->        <div class=\"w-full lg:w-1\/3 p-6 md:p-8 bg-gray-50 border-r border-gray-200\"><!-- [et_pb_line_break_holder] -->            <h1 class=\"text-3xl font-bold text-gray-800 font-display mb-2\">Generador de Columna<\/h1><!-- [et_pb_line_break_holder] -->            <pee class=\"text-gray-600 mb-6 text-sm\">Crea im\u00e1genes de columna completa para tus art\u00edculos.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            <div class=\"space-y-6\"><!-- [et_pb_line_break_holder] -->                <div><!-- [et_pb_line_break_holder] -->                    <label for=\"headerType\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Tipo de Cabecera<\/label><!-- [et_pb_line_break_holder] -->                    <select id=\"headerType\" class=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#C11731] focus:border-[#C11731] transition\"><!-- [et_pb_line_break_holder] -->                        <option value=\"Opini\u00f3n\">Opini\u00f3n<\/option><!-- [et_pb_line_break_holder] -->                        <option value=\"Articulista Invitado\">Articulista Invitado<\/option><!-- [et_pb_line_break_holder] -->                    <\/select><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                <div><!-- [et_pb_line_break_holder] -->                    <label for=\"columnTitle\" class=\"block text-sm font-semibold text-gray-700 mb-1\">T\u00edtulo de la columna<\/label><!-- [et_pb_line_break_holder] -->                    <input type=\"text\" id=\"columnTitle\" class=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#C11731] focus:border-[#C11731] transition\" placeholder=\"Punto de inflexi\u00f3n\"><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                <div><!-- [et_pb_line_break_holder] -->                    <label for=\"author\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Nombre del articulista<\/label><!-- [et_pb_line_break_holder] -->                    <input type=\"text\" id=\"author\" class=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#C11731] focus:border-[#C11731] transition\" placeholder=\"Ana Cueva\"><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                <div class=\"relative\"><!-- [et_pb_line_break_holder] -->                    <label for=\"authorImage\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Imagen del articulista<\/label><!-- [et_pb_line_break_holder] -->                    <input type=\"file\" id=\"authorImage\" accept=\"image\/*\" class=\"w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-sm file:font-semibold file:bg-red-50 file:text-[#C11731] hover:file:bg-red-100 transition\"><!-- [et_pb_line_break_holder] -->                    <div id=\"imageLoadingSpinner\" class=\"image-loading-spinner\"><\/div><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                <div><!-- [et_pb_line_break_holder] -->                    <label for=\"columnContent\" class=\"block text-sm font-semibold text-gray-700 mb-1\">Contenido completo de la columna<\/label><!-- [et_pb_line_break_holder] -->                    <textarea id=\"columnContent\" rows=\"10\" class=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-[#C11731] focus:border-[#C11731] transition resize-y\" placeholder=\"Pega aqu\u00ed el texto completo de tu columna. Se dividir\u00e1 en dos columnas autom\u00e1ticamente.\"><\/textarea><!-- [et_pb_line_break_holder] -->                    <pee class=\"text-xs text-gray-500 mt-1\">El texto largo puede ser truncado si excede el espacio disponible.<\/pee><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                <div class=\"pt-4 space-y-4\"><!-- [et_pb_line_break_holder] -->                    <button id=\"downloadBtn\" class=\"w-full bg-custom-red text-white font-bold py-3 px-4 rounded-lg hover:bg-custom-red-dark focus:outline-none focus:ring-4 focus:ring-red-300 transition-all duration-300 transform hover:scale-105 shadow-md\"><!-- [et_pb_line_break_holder] -->                        Descargar Imagen (PNG)<!-- [et_pb_line_break_holder] -->                    <\/button><!-- [et_pb_line_break_holder] -->                    <button id=\"resetBtn\" class=\"w-full bg-gray-200 text-gray-700 font-bold py-3 px-4 rounded-lg hover:bg-gray-300 focus:outline-none focus:ring-4 focus:ring-gray-300 transition-all duration-300 transform hover:scale-105 shadow-md\"><!-- [et_pb_line_break_holder] -->                        Reiniciar Campos<!-- [et_pb_line_break_holder] -->                    <\/button><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Previsualizaci\u00f3n en Canvas --><!-- [et_pb_line_break_holder] -->        <div class=\"w-full lg:w-2\/3 p-6 md:p-8 bg-gray-100 flex items-center justify-center\"><!-- [et_pb_line_break_holder] -->            <div class=\"canvas-preview-wrapper rounded-xl shadow-xl border border-gray-200\"><!-- [et_pb_line_break_holder] -->                <canvas id=\"canvas\"><\/canvas> <!-- Ancho y alto se establecer\u00e1n en JS --><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- SCRIPT DE FUNCIONALIDAD --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        function iniciarGeneradorEditorial() {<!-- [et_pb_line_break_holder] -->            \/\/ Se busca el contenedor principal de la aplicaci\u00f3n, que ahora es 'divi-column-generator-app'<!-- [et_pb_line_break_holder] -->            \/\/ Esto asegura que todas las consultas de elementos se realicen dentro de este \u00e1mbito.<!-- [et_pb_line_break_holder] -->            const appContainer = document.querySelector('#divi-column-generator-app');<!-- [et_pb_line_break_holder] -->            if (!appContainer) {<!-- [et_pb_line_break_holder] -->                console.error(\"El contenedor principal de la aplicaci\u00f3n no fue encontrado.\");<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Ahora, todas las consultas se hacen relativas a 'appContainer'<!-- [et_pb_line_break_holder] -->            const container = appContainer.querySelector('.generador-editorial-container');<!-- [et_pb_line_break_holder] -->            const canvasWrapper = appContainer.querySelector('.canvas-preview-wrapper');<!-- [et_pb_line_break_holder] -->            const canvas = appContainer.querySelector('#canvas');<!-- [et_pb_line_break_holder] -->            const ctx = canvas.getContext('2d');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Inputs del formulario<!-- [et_pb_line_break_holder] -->            const headerTypeInput = appContainer.querySelector('#headerType');<!-- [et_pb_line_break_holder] -->            const columnTitleInput = appContainer.querySelector('#columnTitle');<!-- [et_pb_line_break_holder] -->            const authorInput = appContainer.querySelector('#author');<!-- [et_pb_line_break_holder] -->            const imageInput = appContainer.querySelector('#authorImage');<!-- [et_pb_line_break_holder] -->            const columnContentInput = appContainer.querySelector('#columnContent');<!-- [et_pb_line_break_holder] -->            const downloadBtn = appContainer.querySelector('#downloadBtn');<!-- [et_pb_line_break_holder] -->            const resetBtn = appContainer.querySelector('#resetBtn');<!-- [et_pb_line_break_holder] -->            const imageLoadingSpinner = appContainer.querySelector('#imageLoadingSpinner');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            let authorImage = null;<!-- [et_pb_line_break_holder] -->            const defaultColumnTitle = \"T\u00edtulo de la Columna\";<!-- [et_pb_line_break_holder] -->            const defaultAuthorName = \"Nombre del Articulista\";<!-- [et_pb_line_break_holder] -->            const defaultColumnContent = \"Pega aqu\u00ed el texto completo de tu columna. Este es un texto de ejemplo para mostrar c\u00f3mo se ver\u00eda el contenido de tu art\u00edculo distribuido en dos columnas. La idea es que puedas visualizar el dise\u00f1o final antes de descargar la imagen. Aseg\u00farate de que el texto no sea excesivamente largo para que quepa en el espacio asignado en el canvas. Puedes ajustar el tama\u00f1o de la fuente si es necesario para acomodar m\u00e1s contenido. Este generador est\u00e1 dise\u00f1ado para ayudarte a crear im\u00e1genes atractivas para tus publicaciones en PLOG.\";<!-- [et_pb_line_break_holder] -->            const fixedFooterEmail = \"plog@polisecuador.org\"; \/\/ Correo fijo<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ --- Carga de im\u00e1genes ---<!-- [et_pb_line_break_holder] -->            let logoImage = new Image();<!-- [et_pb_line_break_holder] -->            logoImage.crossOrigin = \"Anonymous\";<!-- [et_pb_line_break_holder] -->            logoImage.src = 'https:\/\/polisecuador.org\/wp-content\/uploads\/2025\/06\/Logo-Plog-Generador.png'; \/\/ URL del logo de Plog<!-- [et_pb_line_break_holder] -->            logoImage.onerror = () => {<!-- [et_pb_line_break_holder] -->                console.error(\"No se pudo cargar la imagen del logo. Se usar\u00e1 un marcador de posici\u00f3n.\");<!-- [et_pb_line_break_holder] -->                logoImage.src = 'https:\/\/placehold.co\/200x60\/000000\/FFFFFF?text=LOGO';<!-- [et_pb_line_break_holder] -->                drawCanvas();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            logoImage.onload = drawCanvas;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ --- Funciones de dibujo ---<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function setCanvasDimensions() {<!-- [et_pb_line_break_holder] -->                canvas.width = 1620; \/\/ Ancho para 3 columnas (1080 \/ 2 * 3 = 1620)<!-- [et_pb_line_break_holder] -->                canvas.height = 2000;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function drawCanvas() {<!-- [et_pb_line_break_holder] -->                setCanvasDimensions();<!-- [et_pb_line_break_holder] -->                ctx.clearRect(0, 0, canvas.width, canvas.height);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                ctx.fillStyle = '#FFFFFF'; \/\/ Fondo blanco<!-- [et_pb_line_break_holder] -->                ctx.fillRect(0, 0, canvas.width, canvas.height);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (authorImage) {<!-- [et_pb_line_break_holder] -->                    drawAuthorImage(authorImage);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                drawHeaderAndTitle();<!-- [et_pb_line_break_holder] -->                drawMultiColumnText();<!-- [et_pb_line_break_holder] -->                drawFooter();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function drawAuthorImage(img) {<!-- [et_pb_line_break_holder] -->                const size = 240;<!-- [et_pb_line_break_holder] -->                \/\/ Ajustar la posici\u00f3n X de la imagen del autor para el nuevo ancho del canvas<!-- [et_pb_line_break_holder] -->                const x = canvas.width - size - 60;<!-- [et_pb_line_break_holder] -->                const y = 60;<!-- [et_pb_line_break_holder] -->                ctx.save();<!-- [et_pb_line_break_holder] -->                ctx.beginPath();<!-- [et_pb_line_break_holder] -->                ctx.arc(x + size \/ 2, y + size \/ 2, size \/ 2, 0, Math.PI * 2, true);<!-- [et_pb_line_break_holder] -->                ctx.closePath();<!-- [et_pb_line_break_holder] -->                ctx.clip();<!-- [et_pb_line_break_holder] -->                const ar = img.width \/ img.height;<!-- [et_pb_line_break_holder] -->                let drawW, drawH, dX, dY;<!-- [et_pb_line_break_holder] -->                if (img.width > img.height) {<!-- [et_pb_line_break_holder] -->                    drawH = size;<!-- [et_pb_line_break_holder] -->                    drawW = size * ar;<!-- [et_pb_line_break_holder] -->                    dX = x - (drawW - size) \/ 2;<!-- [et_pb_line_break_holder] -->                    dY = y;<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    drawW = size;<!-- [et_pb_line_break_holder] -->                    drawH = size \/ ar;<!-- [et_pb_line_break_holder] -->                    dX = x;<!-- [et_pb_line_break_holder] -->                    dY = y - (drawH - size) \/ 2;<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                ctx.drawImage(img, dX, dY, drawW, drawH);<!-- [et_pb_line_break_holder] -->                ctx.restore();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Dibuja un borde gris oscuro fijo<!-- [et_pb_line_break_holder] -->                ctx.beginPath();<!-- [et_pb_line_break_holder] -->                ctx.arc(x + size \/ 2, y + size \/ 2, size \/ 2, 0, Math.PI * 2, true);<!-- [et_pb_line_break_holder] -->                ctx.strokeStyle = '#333333'; \/\/ Color gris oscuro<!-- [et_pb_line_break_holder] -->                ctx.lineWidth = 12;<!-- [et_pb_line_break_holder] -->                ctx.stroke();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function drawHeaderAndTitle() {<!-- [et_pb_line_break_holder] -->                const headerTypeText = headerTypeInput.value;<!-- [et_pb_line_break_holder] -->                const authorText = authorInput.value || defaultAuthorName;<!-- [et_pb_line_break_holder] -->                const columnTitleText = columnTitleInput.value || defaultColumnTitle;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Tipo de Cabecera (Opini\u00f3n \/ Articulista Invitado)<!-- [et_pb_line_break_holder] -->                ctx.textBaseline = 'top'; \/\/ Asegura que el texto se dibuje desde la parte superior de la l\u00ednea<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (headerTypeText === \"Articulista Invitado\") {<!-- [et_pb_line_break_holder] -->                    \/\/ Dibujar fondo rojo para \"Articulista Invitado\"<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 28px 'Inter', sans-serif\"; \/\/ Necesario para medir el texto<!-- [et_pb_line_break_holder] -->                    const textWidth = ctx.measureText(headerTypeText.toUpperCase()).width;<!-- [et_pb_line_break_holder] -->                    const paddingX = 20; \/\/ Espacio horizontal alrededor del texto<!-- [et_pb_line_break_holder] -->                    const paddingY = 10; \/\/ Espacio vertical alrededor del texto<!-- [et_pb_line_break_holder] -->                    const rectX = 60; \/\/ Alineado con el inicio del texto del autor<!-- [et_pb_line_break_holder] -->                    const rectY = 60 - paddingY;<!-- [et_pb_line_break_holder] -->                    const rectWidth = textWidth + (2 * paddingX);<!-- [et_pb_line_break_holder] -->                    const rectHeight = 28 + (2 * paddingY); \/\/ Altura de la fuente + padding<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#C11731'; \/\/ Fondo rojo<!-- [et_pb_line_break_holder] -->                    ctx.fillRect(rectX, rectY, rectWidth, rectHeight);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#FFFFFF'; \/\/ Letras blancas<!-- [et_pb_line_break_holder] -->                    \/\/ El texto se dibuja con un offset para el padding dentro del rect\u00e1ngulo<!-- [et_pb_line_break_holder] -->                    ctx.fillText(headerTypeText.toUpperCase(), rectX + paddingX, 60);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Nombre del articulista - Ajustado para mayor separaci\u00f3n<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 38px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#333333';<!-- [et_pb_line_break_holder] -->                    ctx.fillText(authorText, 60, 130); \/\/ Aumentado de 100 a 130<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    \/\/ Comportamiento por defecto para \"Opini\u00f3n\"<!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#333333'; \/\/ Color oscuro para texto en fondo blanco<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 28px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                    ctx.fillText(headerTypeText.toUpperCase(), 60, 60);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Nombre del articulista - Sin cambio de posici\u00f3n para \"Opini\u00f3n\"<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 38px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#333333';<!-- [et_pb_line_break_holder] -->                    ctx.fillText(authorText, 60, 100);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ T\u00edtulo de la columna<!-- [et_pb_line_break_holder] -->                ctx.fillStyle = '#C11731'; \/\/ T\u00edtulo en color rojo principal<!-- [et_pb_line_break_holder] -->                ctx.font = \"bold 80px 'Playfair Display', serif\";<!-- [et_pb_line_break_holder] -->                ctx.textAlign = 'left';<!-- [et_pb_line_break_holder] -->                ctx.textBaseline = 'top';<!-- [et_pb_line_break_holder] -->                \/\/ El maxWidth para el t\u00edtulo se ajusta autom\u00e1ticamente con el nuevo canvas.width<!-- [et_pb_line_break_holder] -->                \/\/ La posici\u00f3n Y del t\u00edtulo tambi\u00e9n debe ajustarse si el nombre del autor se mueve<!-- [et_pb_line_break_holder] -->                const titleY = (headerTypeText === \"Articulista Invitado\") ? 180 + (130 - 100) : 180; \/\/ Ajuste si el nombre del autor se baj\u00f3<!-- [et_pb_line_break_holder] -->                wrapText(ctx, columnTitleText, 60, titleY, canvas.width - 120 - 240 - 20, 90);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function drawMultiColumnText() {<!-- [et_pb_line_break_holder] -->                const fullText = columnContentInput.value || defaultColumnContent;<!-- [et_pb_line_break_holder] -->                const startY = 400;<!-- [et_pb_line_break_holder] -->                const marginX = 60;<!-- [et_pb_line_break_holder] -->                const columnGap = 40;<!-- [et_pb_line_break_holder] -->                const numColumns = 3; \/\/ Cambiado a 3 columnas<!-- [et_pb_line_break_holder] -->                const availableWidth = canvas.width - (2 * marginX);<!-- [et_pb_line_break_holder] -->                const columnWidth = (availableWidth - (columnGap * (numColumns - 1))) \/ numColumns;<!-- [et_pb_line_break_holder] -->                const lineHeight = 36;<!-- [et_pb_line_break_holder] -->                const maxTextBottom = canvas.height - 200;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                ctx.fillStyle = '#444444';<!-- [et_pb_line_break_holder] -->                ctx.font = \"30px 'Merriweather', serif\";<!-- [et_pb_line_break_holder] -->                ctx.textAlign = 'left';<!-- [et_pb_line_break_holder] -->                ctx.textBaseline = 'top';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                const words = fullText.split(' ');<!-- [et_pb_line_break_holder] -->                let currentColumnText = '';<!-- [et_pb_line_break_holder] -->                let currentColumn = 0;<!-- [et_pb_line_break_holder] -->                let currentY = startY;<!-- [et_pb_line_break_holder] -->                let currentX = marginX;<!-- [et_pb_line_break_holder] -->                let textOverflowed = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                for (let i = 0; i < words.length; i++) {<!-- [et_pb_line_break_holder] -->                    const testLine = currentColumnText + words[i] + ' ';<!-- [et_pb_line_break_holder] -->                    const metrics = ctx.measureText(testLine);<!-- [et_pb_line_break_holder] -->                    const testWidth = metrics.width;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    if (testWidth > columnWidth && currentColumnText !== '') {<!-- [et_pb_line_break_holder] -->                        if (currentY + lineHeight > maxTextBottom && currentColumn === numColumns - 1) {<!-- [et_pb_line_break_holder] -->                            textOverflowed = true;<!-- [et_pb_line_break_holder] -->                            const truncatedLine = currentColumnText.trim() + '...';<!-- [et_pb_line_break_holder] -->                            ctx.fillText(truncatedLine, currentX, currentY);<!-- [et_pb_line_break_holder] -->                            break;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                        ctx.fillText(currentColumnText, currentX, currentY);<!-- [et_pb_line_break_holder] -->                        currentY += lineHeight;<!-- [et_pb_line_break_holder] -->                        currentColumnText = words[i] + ' ';<!-- [et_pb_line_break_holder] -->                    } else {<!-- [et_pb_line_break_holder] -->                        currentColumnText = testLine;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Verifica si necesitamos pasar a la siguiente columna<!-- [et_pb_line_break_holder] -->                    if (currentY + lineHeight > maxTextBottom && currentColumn < numColumns - 1) {<!-- [et_pb_line_break_holder] -->                        ctx.fillText(currentColumnText, currentX, currentY);<!-- [et_pb_line_break_holder] -->                        currentColumn++;<!-- [et_pb_line_break_holder] -->                        currentX = marginX + (columnWidth + columnGap) * currentColumn;<!-- [et_pb_line_break_holder] -->                        currentY = startY;<!-- [et_pb_line_break_holder] -->                        currentColumnText = '';<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                if (!textOverflowed) {<!-- [et_pb_line_break_holder] -->                    ctx.fillText(currentColumnText, currentX, currentY);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (textOverflowed) {<!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#C11731';<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 24px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                    ctx.textAlign = 'center';<!-- [et_pb_line_break_holder] -->                    ctx.fillText(\"... Texto truncado. Ajusta el contenido.\", canvas.width \/ 2, canvas.height - 120);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function drawFooter() {<!-- [et_pb_line_break_holder] -->                const footerEmailText = fixedFooterEmail;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (logoImage.complete && logoImage.naturalHeight !== 0) {<!-- [et_pb_line_break_holder] -->                    ctx.drawImage(logoImage, 60, canvas.height - 120, 200, 60);<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    ctx.fillStyle = '#333333';<!-- [et_pb_line_break_holder] -->                    ctx.font = \"bold 24px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                    ctx.textAlign = 'left';<!-- [et_pb_line_break_holder] -->                    ctx.fillText(\"LOGO\", 60, canvas.height - 100);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                ctx.fillStyle = '#666666';<!-- [et_pb_line_break_holder] -->                ctx.font = \"24px 'Inter', sans-serif\";<!-- [et_pb_line_break_holder] -->                ctx.textAlign = 'right';<!-- [et_pb_line_break_holder] -->                ctx.textBaseline = 'bottom';<!-- [et_pb_line_break_holder] -->                \/\/ Ajustar la posici\u00f3n X del email para el nuevo ancho del canvas<!-- [et_pb_line_break_holder] -->                ctx.fillText(footerEmailText, canvas.width - 60, canvas.height - 60);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            function wrapText(context, text, x, y, maxWidth, lineHeight) {<!-- [et_pb_line_break_holder] -->                const words = text.split(' ');<!-- [et_pb_line_break_holder] -->                let line = '';<!-- [et_pb_line_break_holder] -->                let totalHeight = 0;<!-- [et_pb_line_break_holder] -->                let startY = y;<!-- [et_pb_line_break_holder] -->                for (let n = 0; n < words.length; n++) {<!-- [et_pb_line_break_holder] -->                    const testLine = line + words[n] + ' ';<!-- [et_pb_line_break_holder] -->                    const metrics = context.measureText(testLine);<!-- [et_pb_line_break_holder] -->                    const testWidth = metrics.width;<!-- [et_pb_line_break_holder] -->                    if (testWidth > maxWidth && n > 0) {<!-- [et_pb_line_break_holder] -->                        context.fillText(line, x, startY);<!-- [et_pb_line_break_holder] -->                        line = words[n] + ' ';<!-- [et_pb_line_break_holder] -->                        startY += lineHeight;<!-- [et_pb_line_break_holder] -->                        totalHeight += lineHeight;<!-- [et_pb_line_break_holder] -->                    } else {<!-- [et_pb_line_break_holder] -->                        line = testLine;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                context.fillText(line, x, startY);<!-- [et_pb_line_break_holder] -->                totalHeight += lineHeight;<!-- [et_pb_line_break_holder] -->                return totalHeight;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ --- Event Listeners ---<!-- [et_pb_line_break_holder] -->            headerTypeInput.addEventListener('input', drawCanvas);<!-- [et_pb_line_break_holder] -->            columnTitleInput.addEventListener('input', drawCanvas);<!-- [et_pb_line_break_holder] -->            authorInput.addEventListener('input', drawCanvas);<!-- [et_pb_line_break_holder] -->            columnContentInput.addEventListener('input', drawCanvas);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            imageInput.addEventListener('change', (e) => {<!-- [et_pb_line_break_holder] -->                const file = e.target.files[0];<!-- [et_pb_line_break_holder] -->                if (file) {<!-- [et_pb_line_break_holder] -->                    imageLoadingSpinner.style.display = 'block';<!-- [et_pb_line_break_holder] -->                    const reader = new FileReader();<!-- [et_pb_line_break_holder] -->                    reader.onload = (event) => {<!-- [et_pb_line_break_holder] -->                        authorImage = new Image();<!-- [et_pb_line_break_holder] -->                        authorImage.onload = () => {<!-- [et_pb_line_break_holder] -->                            imageLoadingSpinner.style.display = 'none';<!-- [et_pb_line_break_holder] -->                            drawCanvas();<!-- [et_pb_line_break_holder] -->                        };<!-- [et_pb_line_break_holder] -->                        authorImage.onerror = () => {<!-- [et_pb_line_break_holder] -->                            console.error(\"No se pudo cargar la imagen del autor.\");<!-- [et_pb_line_break_holder] -->                            imageLoadingSpinner.style.display = 'none';<!-- [et_pb_line_break_holder] -->                            authorImage = null;<!-- [et_pb_line_break_holder] -->                            drawCanvas();<!-- [et_pb_line_break_holder] -->                            console.log(\"Error: No se pudo cargar la imagen del autor. Intenta con otra imagen.\");<!-- [et_pb_line_break_holder] -->                        };<!-- [et_pb_line_break_holder] -->                        authorImage.src = event.target.result;<!-- [et_pb_line_break_holder] -->                    };<!-- [et_pb_line_break_holder] -->                    reader.readAsDataURL(file);<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    authorImage = null;<!-- [et_pb_line_break_holder] -->                    drawCanvas();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            downloadBtn.addEventListener('click', () => {<!-- [et_pb_line_break_holder] -->                const dataURL = canvas.toDataURL('image\/png');<!-- [et_pb_line_break_holder] -->                const link = document.createElement('a');<!-- [et_pb_line_break_holder] -->                link.download = `columna-${authorInput.value.replace(\/\\s+\/g, '_').toLowerCase() || 'promo'}.png`;<!-- [et_pb_line_break_holder] -->                link.href = dataURL;<!-- [et_pb_line_break_holder] -->                document.body.appendChild(link);<!-- [et_pb_line_break_holder] -->                link.click();<!-- [et_pb_line_break_holder] -->                document.body.removeChild(link);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            resetBtn.addEventListener('click', () => {<!-- [et_pb_line_break_holder] -->                headerTypeInput.value = \"Opini\u00f3n\";<!-- [et_pb_line_break_holder] -->                columnTitleInput.value = \"\";<!-- [et_pb_line_break_holder] -->                authorInput.value = \"\";<!-- [et_pb_line_break_holder] -->                imageInput.value = \"\";<!-- [et_pb_line_break_holder] -->                authorImage = null;<!-- [et_pb_line_break_holder] -->                columnContentInput.value = \"\";<!-- [et_pb_line_break_holder] -->                drawCanvas();<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            window.addEventListener('resize', drawCanvas);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            drawCanvas();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Iniciar el script cuando el DOM est\u00e9 listo<!-- [et_pb_line_break_holder] -->        if (document.readyState === 'loading') {<!-- [et_pb_line_break_holder] -->            document.addEventListener('DOMContentLoaded', iniciarGeneradorEditorial);<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->            iniciarGeneradorEditorial();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n<span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":685,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-1537","page","type-page","status-publish","hentry"],"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Generador de Im\u00e1genes v3 - Polis Ecuador<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/polisecuador.org\/en\/plog\/generador-de-imagenes-v3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generador de Im\u00e1genes v3 - Polis Ecuador\" \/>\n<meta property=\"og:url\" content=\"https:\/\/polisecuador.org\/en\/plog\/generador-de-imagenes-v3\/\" \/>\n<meta property=\"og:site_name\" content=\"Polis Ecuador\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/polisecuador\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-10T14:38:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/polisecuador.org\/wp-content\/uploads\/2024\/05\/Sin-titulo-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@polisecuador\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-imagenes-v3\\\/\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-imagenes-v3\\\/\",\"name\":\"Generador de Im\u00e1genes v3 - Polis Ecuador\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#website\"},\"datePublished\":\"2025-07-09T16:46:16+00:00\",\"dateModified\":\"2025-07-10T14:38:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-imagenes-v3\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-imagenes-v3\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-imagenes-v3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/polisecuador.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plog\",\"item\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Generador de Im\u00e1genes v3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#website\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/\",\"name\":\"Polis Ecuador\",\"description\":\"Academia de Formaci\u00f3n Pol\u00edtica\",\"publisher\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/polisecuador.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#organization\",\"name\":\"Polis Ecuador\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/polis-web.svg\",\"contentUrl\":\"https:\\\/\\\/polisecuador.org\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/polis-web.svg\",\"width\":1391.69000000000005456968210637569427490234375,\"height\":754.1299999999999954525264911353588104248046875,\"caption\":\"Polis Ecuador\"},\"image\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/polisecuador\",\"https:\\\/\\\/x.com\\\/polisecuador\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generador de Im\u00e1genes v3 - Polis Ecuador","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/polisecuador.org\/en\/plog\/generador-de-imagenes-v3\/","og_locale":"en_US","og_type":"article","og_title":"Generador de Im\u00e1genes v3 - Polis Ecuador","og_url":"https:\/\/polisecuador.org\/en\/plog\/generador-de-imagenes-v3\/","og_site_name":"Polis Ecuador","article_publisher":"https:\/\/www.facebook.com\/polisecuador","article_modified_time":"2025-07-10T14:38:35+00:00","og_image":[{"width":1500,"height":500,"url":"https:\/\/polisecuador.org\/wp-content\/uploads\/2024\/05\/Sin-titulo-2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@polisecuador","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/polisecuador.org\/plog\/generador-de-imagenes-v3\/","url":"https:\/\/polisecuador.org\/plog\/generador-de-imagenes-v3\/","name":"Generador de Im\u00e1genes v3 - Polis Ecuador","isPartOf":{"@id":"https:\/\/polisecuador.org\/#website"},"datePublished":"2025-07-09T16:46:16+00:00","dateModified":"2025-07-10T14:38:35+00:00","breadcrumb":{"@id":"https:\/\/polisecuador.org\/plog\/generador-de-imagenes-v3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/polisecuador.org\/plog\/generador-de-imagenes-v3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/polisecuador.org\/plog\/generador-de-imagenes-v3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/polisecuador.org\/"},{"@type":"ListItem","position":2,"name":"Plog","item":"https:\/\/polisecuador.org\/plog\/"},{"@type":"ListItem","position":3,"name":"Generador de Im\u00e1genes v3"}]},{"@type":"WebSite","@id":"https:\/\/polisecuador.org\/#website","url":"https:\/\/polisecuador.org\/","name":"Polis Ecuador","description":"Academia de Formaci\u00f3n Pol\u00edtica","publisher":{"@id":"https:\/\/polisecuador.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/polisecuador.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/polisecuador.org\/#organization","name":"Polis Ecuador","url":"https:\/\/polisecuador.org\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/polisecuador.org\/#\/schema\/logo\/image\/","url":"https:\/\/polisecuador.org\/wp-content\/uploads\/2023\/04\/polis-web.svg","contentUrl":"https:\/\/polisecuador.org\/wp-content\/uploads\/2023\/04\/polis-web.svg","width":1391.69000000000005456968210637569427490234375,"height":754.1299999999999954525264911353588104248046875,"caption":"Polis Ecuador"},"image":{"@id":"https:\/\/polisecuador.org\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/polisecuador","https:\/\/x.com\/polisecuador"]}]}},"_links":{"self":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/1537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/comments?post=1537"}],"version-history":[{"count":0,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/1537\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/685"}],"wp:attachment":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/media?parent=1537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}