Muchos desarrolladores que utilizan GPT Image 2 u otros modelos de generación de imágenes por IA para crear material de marketing se han topado con el mismo problema frustrante: al subir un código QR existente a la interfaz web de ChatGPT para combinarlo, el resultado siempre es escaneable; sin embargo, al cambiar a la invocación del modelo mediante API con la misma indicación, el código QR generado siempre sale dañado y falla al escanearse el 100% de las veces. El problema no está en la indicación, ni en el modelo, sino en que el flujo de trabajo está mal planteado desde el principio.

La conclusión principal se puede resumir en una frase: la IA no debería "dibujar" el código QR; su función es generar la imagen de fondo, mientras que el código QR debe añadirse mediante un proceso posterior utilizando una biblioteca de procesamiento de imágenes. Este artículo, basado en la documentación oficial de OpenAI, la práctica con ControlNet de Stable Diffusion y los principios de tolerancia a fallos de los códigos QR, desglosa sistemáticamente por qué el redibujado de códigos QR por IA inevitablemente los daña. Además, ofrece tres flujos de trabajo reutilizables, combinando la interfaz de GPT Image 2 de la plataforma APIYI (apiyi.com) con código Python completo, para que puedas configurar en 10 minutos una línea de producción completa de "generación de imágenes por IA + código QR escaneable".
一、Por qué la IA daña los códigos QR al generar imágenes
1.1 Reproducción del fallo típico
El escenario de error más común es el siguiente: el usuario introduce un código QR limpio y utiliza una indicación como "coloca este código QR en la esquina inferior derecha, con una cafetería acogedora de fondo", invocando la API de GPT Image 2. La imagen resultante muestra visualmente un código QR y la composición es correcta, pero ninguna herramienta de escaneo logra leerlo.
A simple vista, puede parecer que los "bordes de los módulos están un poco borrosos", pero los códigos QR exigen una precisión de píxel extremadamente alta. Si la forma, posición o contraste de un solo módulo (pequeño cuadrado) se desplaza más de un 5%, el código puede quedar inutilizable. El redibujado de la IA equivale a "volver a dibujar" el código mediante una red neuronal, y ni siquiera el modelo con mayor precisión a nivel de píxel puede garantizar una restauración al 100%.
1.2 Tres causas fundamentales del daño por redibujado en GPT Image 2
Al analizar el problema, el daño causado por el redibujado de la IA se debe a tres niveles técnicos que deben abordarse:
| Nivel de causa | Detalle técnico | Consecuencia |
|---|---|---|
| Redibujado semántico | La IA interpreta el QR como contenido visual y lo regenera basándose en la semántica, no en una copia de píxeles | La forma de los módulos se "embellece" o distorsiona |
| Remuestreo de resolución | El modelo tiene niveles de resolución fijos (512/1K/2K/4K), por lo que la entrada se redimensiona | Aparece aliasing subpíxel en los bordes de los módulos |
| Compresión con pérdida | La salida por defecto en JPEG/WebP pierde detalles de alta frecuencia | Aparecen transiciones grises en los bordes de los módulos blanco/negro |
Tras la superposición de estas tres capas, el código QR, que originalmente era estrictamente binario (blanco/negro puro), se convierte en una "matriz de escala de grises borrosa", lo que provoca el fallo en los anillos de posicionamiento y en la identificación de los módulos de datos del algoritmo de escaneo.
Lo más engañoso es que este daño suele ser imperceptible para el ojo humano: la imagen final puede parecer un cuadrado que se asemeja a un código QR y el contraste de color puede parecer aceptable, pero el software de escaneo depende de la posición exacta de la cuadrícula y de la densidad binaria, siendo extremadamente sensible a ese desplazamiento de 1 o 2 píxeles que nosotros ignoramos. Por eso muchos usuarios sospechan que "la indicación no está bien escrita" y pierden horas en ingeniería de indicaciones, solo para descubrir que, sin importar lo que cambien, el código sigue sin ser legible.
1.3 Por qué la versión web de ChatGPT a veces tiene éxito
Muchos usuarios se preguntan: "Si la versión web funciona, ¿por qué la API no?". La verdad es que la versión web de ChatGPT aplica una lógica de postprocesamiento adicional internamente: detecta que la entrada es un código QR e intenta generar el resultado mediante composición de imágenes en lugar de un redibujado completo. Esta lógica no está expuesta como parámetro de la API, por lo que al invocarla directamente, no se accede a esta ruta especial.
En otras palabras: que la "invocación de la API siempre falle" no es un error (bug), sino que la API sigue la ruta de generación pura del modelo, sin las protecciones especiales de la web. Esperar que la ingeniería de indicaciones resuelva esto es inútil, ya que es una limitación de la arquitectura, no un problema de la indicación.
🎯 Concepto clave: En escenarios de invocación de API, nunca permitas que la IA "incluya" o "redibuje" un código QR. Graba esta regla como un mandamiento para ahorrarte mucho tiempo de depuración. Te sugiero verificar el fenómeno de que "el redibujado de IA siempre daña el QR" en APIYI apiyi.com; una vez que lo experimentes personalmente, recordarás esta regla de por vida.
二、3 flujos de trabajo correctos para combinar imágenes de IA y códigos QR
La única forma correcta de proceder es la separación de responsabilidades entre la "generación de imágenes por IA" y el "código QR". Las siguientes tres soluciones se adaptan a diferentes stacks tecnológicos y escenarios de negocio.

2.1 Solución 1: Generación de fondo por IA + Composición postprocesamiento (Recomendada, la más estable)
Esta es la solución más sencilla y estable. La idea central es: dejar que la IA genere solo la imagen de fondo, sin mencionarle en absoluto la existencia del código QR, y luego utilizar un lenguaje backend como Python o Node.js para insertar el código QR real con precisión.
El flujo de trabajo consta de cuatro pasos:
- Generar la imagen de fondo pura con GPT Image 2, especificando en la indicación: "dejar un área limpia y clara en la esquina inferior derecha para elementos de marca".
- Generar el código QR localmente con la librería
qrcode(controlando el nivel de corrección de errores, el tamaño del módulo y la zona de silencio). - Utilizar el método
paste()de PIL para componer el código QR en la posición designada de la imagen de fondo. - Exportar en PNG (no en JPEG) para mantener la nitidez de los bordes de los módulos del código QR.
En todo este proceso, la IA solo se encarga de "dibujar el fondo"; el código QR no pasa por ningún modelo de IA, por lo que naturalmente no se daña.
2.2 Solución 2: Generación de área de reserva por IA + Posicionamiento automático con Canvas/Sharp
Si estás realizando una composición dinámica en el frontend (por ejemplo, una plataforma de comercio electrónico donde los usuarios generan carteles con códigos QR en tiempo real), la Solución 1 puede ser un poco pesada; puedes usar la Solución 2.
Esta solución añade un paso de "posicionamiento automático" a la anterior: dejar que la IA reserve un marco de reserva de color sólido en la imagen de fondo (por ejemplo, un rectángulo blanco o del color de la marca), y luego usar OpenCV/Sharp para detectar la posición de dicho marco y componer automáticamente el código QR. El frontend puede implementarlo con la API de Canvas sin necesidad de intervención del backend.
La ventaja es que se adapta a múltiples tamaños y permite la composición en tiempo real en el navegador; la desventaja es que el color y el tamaño del marco deben estar restringidos con precisión en la indicación, lo que aumenta ligeramente el costo de depuración.
2.3 Solución 3: ControlNet QR-Art (Código QR artístico, avanzado)
Si no solo quieres "pegar un código QR", sino que deseas que el propio código sea parte de una obra de arte (por ejemplo, que los módulos en blanco y negro estén formados por flores, edificios o texturas), necesitarás la solución QR-Art con Stable Diffusion + ControlNet.
Este camino consiste esencialmente en utilizar ControlNet para transmitir el código QR como una "condición de control" a SD, permitiendo que la imagen generada mantenga la estructura de módulos del código QR en su distribución de píxeles. Esto no es algo que GPT Image 2 pueda hacer, ya que no cuenta con una interfaz de ControlNet; por lo tanto, para hacer códigos QR artísticos, debes cambiar al flujo de trabajo de SD.
Ten en cuenta que, incluso con ControlNet QR-Art, se recomienda establecer el nivel de corrección de errores en H (30%) y verificar el resultado con una herramienta de escaneo, ya que la probabilidad de obtener una imagen hermosa pero no escaneable no es baja.
| Solución | Complejidad | Tasa de escaneabilidad | Escenario de uso |
|---|---|---|---|
| ① Composición postprocesamiento | ⭐ Baja | ⭐⭐⭐⭐⭐ 100% | Carteles de marketing, empaques, materiales impresos |
| ② Posicionamiento automático Canvas | ⭐⭐ Media | ⭐⭐⭐⭐⭐ 100% | Composición dinámica en e-commerce, carteles personalizados |
| ③ ControlNet QR-Art | ⭐⭐⭐⭐ Alta | ⭐⭐⭐ 70-90% | Marketing creativo, códigos QR artísticos, eventos de marca |
🎯 Consejo de elección: Para el 90% de los escenarios de negocio, la Solución 1 es suficiente. Te sugiero invocar GPT Image 2 en APIYI apiyi.com para generar el fondo y completar la composición localmente con Python; todo el flujo puede ejecutarse en menos de 10 líneas de código.
III. Ejemplo completo en Python para la integración de códigos QR en imágenes con IA
Tras comprender los principios, en esta sección te presento un código completo en Python que puedes copiar y ejecutar directamente, cubriendo la solución más utilizada (la opción 1).
3.1 Versión minimalista: todo el proceso en 30 líneas
import io
import requests
import qrcode
from PIL import Image
from openai import OpenAI
# 1. Invocar a GPT Image 2 para generar la imagen de fondo (a través del servicio proxy de API APIYI)
client = OpenAI(
api_key="your_api_key",
base_url="https://vip.apiyi.com/v1"
)
response = client.images.generate(
model="gpt-image-2",
prompt=(
"Póster de una cafetería acogedora, luz cálida de tarde, "
"mesa de madera con una taza de café con leche, "
"dejar un área cuadrada limpia y clara en la parte inferior derecha "
"para un elemento de marca, fotorrealista"
),
size="1024x1536",
quality="high",
)
bg = Image.open(io.BytesIO(requests.get(response.data[0].url).content))
# 2. Generar el código QR localmente (alta tolerancia a errores + zona de silencio amplia)
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data("https://apiyi.com")
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGB")
qr_img = qr_img.resize((300, 300), Image.LANCZOS)
# 3. Postprocesamiento y composición: pegar en la esquina inferior derecha
bg.paste(qr_img, (bg.width - 360, bg.height - 360))
bg.save("poster_with_qr.png", "PNG", optimize=True)
El punto clave de este código es: el código QR nunca entra en ningún modelo de IA. Desde la librería qrcode hasta PIL.paste() y el save("PNG") final, todo son operaciones de píxeles puros, por lo que el código QR es 100% escaneable.
3.2 Explicación de los parámetros clave
Varios parámetros en el código parecen insignificantes, pero determinan el éxito:
error_correction=ERROR_CORRECT_H: Nivel de tolerancia a errores H (30%), permite que el 30% de los módulos estén ocultos y siga siendo escaneable; es el umbral de seguridad para escenarios de marketing.border=4: La zona de silencio (quiet zone) debe ser ≥4 veces el ancho del módulo; de lo contrario, la tasa de reconocimiento cae drásticamente en fondos complejos.Image.LANCZOS: Al cambiar el tamaño, utiliza el algoritmo Lanczos para mantener los bordes de los módulos del QR nítidos.save(..., "PNG"): Es obligatorio usar PNG en lugar de JPEG, ya que la compresión en bloques de 8×8 del JPEG genera artefactos de color en los bordes de los módulos.
3.3 Consulta rápida de niveles de tolerancia a errores del código QR
Debes elegir diferentes niveles de tolerancia según el escenario:
| Nivel | Redundancia de datos | Escenario de uso |
|---|---|---|
| L (Bajo) | 7% | Fondos limpios, blanco puro; no recomendado para composición |
| M (Medio) | 15% | Valor predeterminado, útil en fondos simples |
| Q (Cuartil) | 25% | Fondos complejos, con elementos decorativos |
| H (Alto) | 30% | Altamente recomendado: obligatorio para imágenes generadas por IA |
🎯 Consejo de robustez: Para cualquier código QR que vayas a integrar en una imagen de IA, usa sin dudar el nivel de tolerancia H. Ese 15% extra de redundancia se traduce en una estabilidad de escaneo radicalmente superior, aunque sea invisible al ojo humano. Al depurar el proceso de composición en APIYI (apiyi.com), este parámetro te ahorrará mucho trabajo de repetición.
IV. 4 trucos avanzados para la composición de códigos QR con IA
Tras dominar el flujo básico, estos 4 trucos pueden elevar tu tasa de escaneo del 95% al 100%.

4.1 Añadir una tarjeta con fondo blanco al código QR
Aunque pegar un código QR en blanco y negro directamente sobre un fondo colorido es escaneable, visualmente "no encaja". La práctica profesional consiste en envolver el código QR en una tarjeta blanca con esquinas redondeadas y sombra, lo que mantiene el área de escaneo y permite que se integre en el diseño.
from PIL import Image, ImageDraw, ImageFilter
card = Image.new("RGB", (340, 340), "white")
draw = ImageDraw.Draw(card)
# Tarjeta blanca redondeada + código QR centrado
card.paste(qr_img, (20, 20))
# Añadir sombra antes de pegar sobre la imagen de fondo
shadow = card.filter(ImageFilter.GaussianBlur(8))
bg.paste(shadow, (bg.width - 370, bg.height - 360))
bg.paste(card, (bg.width - 370, bg.height - 365))
La tarjeta blanca con sombra es el estándar en diseño gráfico para códigos QR; es estético y mantiene la tasa de escaneo.
4.2 Reservar áreas explícitas en la indicación (prompt) de IA
Hacer que la IA sepa "dónde dejar espacio" es clave para reducir el trabajo de edición posterior. Se recomienda escribir directamente en la indicación:
leave a clean rectangular area approximately 300x300 pixels at the bottom right corner with light solid color, suitable for placing a brand element
Al especificar claramente el tamaño en píxeles y la ubicación, la IA suele acertar en el diseño esperado más del 80% de las veces. Si no sale a la primera, modificar el prompt es mucho más barato que modificar el código.
4.3 Validación automática tras la composición
Cada imagen compuesta debe pasar por una validación automática con una librería de escaneo para asegurar que realmente se puede leer:
from pyzbar.pyzbar import decode
result = decode(bg)
assert result and result[0].data.decode() == "https://apiyi.com"
Convierte este paso en parte de tu flujo de CI y nunca más tendrás incidentes de "descubrir que no se puede escanear después de publicar".
4.4 Caché de fondos y códigos QR en producciones masivas
En escenarios de comercio electrónico, a menudo se necesita "el mismo fondo para cientos de códigos QR diferentes". En este caso, la imagen de fondo se genera con IA solo una vez, se guarda en el almacenamiento de objetos y las cientos de composiciones posteriores son operaciones de píxeles locales, reduciendo el coste de API de cientos de llamadas a solo una.
| Truco avanzado | Problema que resuelve | Beneficio |
|---|---|---|
| Tarjeta blanca + sombra | Desconexión visual entre QR y fondo | Alto |
| Reserva de área en Prompt | Conflicto entre posición y contenido | Alto |
| Validación automática | Imposibilidad de escaneo tras publicar | Muy alto |
| Caché de fondos | Costes de API descontrolados | Muy alto |

Cinco. Preguntas frecuentes (FAQ) sobre la composición de códigos QR con IA
5.1 ¿Por qué la versión web de ChatGPT funciona y la API no?
La versión web utiliza una ruta de procesamiento interno especial para escenarios de códigos QR (detección + síntesis), y esta lógica no está abierta como parámetro de API. Por lo tanto, esperar que la "API procese automáticamente los códigos QR igual que la versión web" no es realista. La forma correcta es replicar esta lógica de síntesis en tu propio código utilizando la Opción 1 descrita en este artículo.
5.2 ¿Es viable usar el modo de edición de imagen de GPT Image 2 + una máscara para "preservar" el área del código QR?
Teóricamente, una máscara debería preservar el área especificada sin redibujarla, pero en las pruebas, los bordes de la máscara aún presentan zonas de transición de 1 a 3 píxeles, lo cual es fatal para un escenario sensible a los píxeles como el de los códigos QR. Se recomienda descartar la solución de máscara y utilizar una composición de post-procesamiento convencional.
5.3 ¿Es inútil insistir repetidamente en la indicación "no modifiques el código QR"?
Es inútil. La indicación solo puede influir en "lo que la IA quiere dibujar", pero el proceso de salida de la IA incluye redimensionamiento (resize), compresión y generación mediante redes neuronales. Estos pasos dañan el código QR sin distinción, independientemente de lo que la IA "quiera" hacer.
5.4 ¿Se puede usar JPEG para la imagen compuesta? El tamaño es mucho menor
No se recomienda. La transformada de coseno discreta (DCT) en bloques de 8×8 de JPEG genera artefactos de color en los bordes de los módulos del código QR, lo que reduce significativamente la tasa de reconocimiento al escanear. Si es estrictamente necesario usar JPEG, el parámetro de calidad debe ser ≥95 y se recomienda superponer el área del código QR como una capa PNG adicional. La práctica más segura es exportar directamente en PNG y reducir el tamaño con un optimizador de PNG (como pngquant).
5.5 ¿Dónde puedo invocar de forma estable GPT Image 2 para generar imágenes de fondo?
Los desarrolladores pueden invocar GPT Image 2 a través de APIYI (apiyi.com), simplemente reemplazando la base_url por https://vip.apiyi.com/v1, sin necesidad de configurar un proxy. Esta plataforma admite tanto GPT Image 2 como Nano Banana Pro y otros modelos de imagen convencionales, lo que facilita la comparación de la calidad del fondo según las necesidades de tu negocio.
5.6 Si quiero el efecto de que "el código QR sea una obra de arte", ¿es obligatorio usar ControlNet?
Sí, ControlNet QR-Art es actualmente la única solución viable. GPT Image 2 no tiene una interfaz de control a nivel de píxel, por lo que no puede lograr el efecto de que "los módulos del código QR estén formados por contenido artístico". Si tu necesidad es simplemente que "el código QR esté pegado de forma estética sobre un fondo artístico", la Opción 1 + una tarjeta con fondo blanco + sombras es más que suficiente; no es necesario recurrir a ControlNet.
5.7 ¿Los códigos QR para impresión tienen requisitos especiales?
Sí. Para escenarios de impresión, se recomienda que el tamaño físico del código QR sea ≥2.5cm × 2.5cm, utilizar un nivel de corrección de errores H, una zona de silencio (quiet zone) de al menos 5 módulos y colores estrictamente blanco y negro (evitar escalas de grises). Estos parámetros aseguran que el código sea legible incluso con variaciones de color en la impresión, reflejos en el papel o cambios en la distancia de escaneo.
Seis. Conclusión: El principio de separación de responsabilidades entre la IA y el código QR
Volviendo a la pregunta inicial: "¿Cómo componer imágenes con IA sin dañar el código QR?", la respuesta más precisa es: No dejes que la IA componga el código QR; deja que la IA solo se encargue de generar el fondo y utiliza una librería de procesamiento de imágenes para añadir el código QR mediante post-procesamiento. Una vez establecido este principio, todos los problemas de "daños por redibujado" desaparecerán instantáneamente.
Solo recuerda tres principios fundamentales:
- Separación de responsabilidades: La IA genera el fondo, el código pega el QR; nunca mezcles ambas tareas en una sola invocación de API.
- Nivel de corrección de errores al máximo: En escenarios de composición, utiliza siempre el nivel H (30%) de corrección de errores; ese 15% extra de redundancia garantiza la fiabilidad del escaneo.
- Salida PNG + verificación automática: Usa PNG para preservar la nitidez de los módulos y
pyzbarpara verificar automáticamente la tasa de legibilidad.
🎯 Próximo paso: Copia el código Python de este artículo en tu proyecto y ejecuta el flujo completo utilizando la interfaz de GPT Image 2 de APIYI (apiyi.com). En 10 minutos podrás verificar que la tasa de legibilidad alcanza el 100%. Una vez establecida esta infraestructura, podrás reutilizarla para todos tus carteles de marketing, empaques de productos y materiales de eventos.
El código QR no es contenido gráfico, es una codificación visual de datos estructurados; esencialmente, es igual que el texto o los códigos de barras. Tratarlo como un "activo que requiere precisión a nivel de píxel" y no como una "imagen que la IA puede entender" es el modelo mental necesario para aprovechar al máximo las herramientas de generación de imágenes con IA. Cambiar esta mentalidad te ahorrará el tormento de "pasar tres días ajustando una indicación y que el código siga sin escanearse".
Autor: Equipo técnico de APIYI
Plataformas compatibles: APIYI (apiyi.com) GPT Image 2 / Nano Banana Pro y otras interfaces de generación de imágenes.
