Después de leer este tema, este otro y este más, no estoy del todo seguro de qué hace Discourse con las imágenes grandes. Mi comprensión previa era que no se realizaba ningún redimensionamiento por software, solo con CSS; es decir, el tamaño de la imagen estaba limitado por maximum image upload size in kB y punto. Si una imagen más grande era un archivo remoto, se enlazaba; de lo contrario, simplemente no se podía subir.
Pero ahora estoy confundido porque esos temas mencionan reducción de tamaño y optimización, algo que no creía que ocurriera porque nunca lo he visto en la práctica, al menos que yo sepa. Tampoco tengo idea de a qué se aplica el límite Maximum number of megapixels allowed for an image. ¿Esto impide subir imágenes más grandes que ese valor, o las imágenes que superan ese límite se redimensionan siempre que sean menores que max upload size?
Si es lo segundo, ¿por qué la configuración predeterminada para megapíxeles es tan enorme en relación con el tamaño máximo de subida predeterminado? Parece extraordinariamente improbable que alguien quiera publicar una imagen de 51 megapíxeles que pese menos de 4096 kB.
Lo que quiero es que los usuarios puedan subir convenientemente lo que tengan sin preocuparse por los tamaños de archivo ni las resoluciones, y que el software entregue algo apropiado que no perjudique a los usuarios móviles ni a quienes tienen conexiones lentas. ¿Esto es posible actualmente simplemente ajustando max image size y max megapixels?
Entonces, si cambio max upload a 10 MB y max megapixel a 12, ¿qué sucede cuando un usuario intenta subir una imagen de 16 megapíxeles que pesa 7 MB?
Con la configuración predeterminada, un porcentaje significativo de fotos tomadas con teléfonos más recientes superan los 4096 kB, pero están muy lejos de los 40 megapíxeles.
Aún no entiendo qué ocurre en ese caso, ni por qué los valores predeterminados están configurados así.
Está bien, puedo hacer eso. Sin embargo, también me gustaría entender qué es lo que el software está haciendo realmente para poder tomar decisiones más informadas. En el tiempo que llevo usando Discourse, he aprendido a respetar la configuración predeterminada y solo cambiarla cuando sea necesario. En este caso, los valores predeterminados no están funcionando muy bien para una comunidad bastante típica y me pregunto por qué están configurados así, qué valores razonables debería considerar en su lugar y qué ocurrirá cuando realice esos cambios.
Al leer el código, el máximo de megapíxeles es una restricción estricta. Es un interruptor de seguridad, no algo que el sistema utilice para tomar decisiones sobre la reducción de tamaño.
max_image_size_kb es el único factor determinante para la reducción automática de tamaño al subir.
Aumenta el máximo de megapíxeles a la cantidad absoluta más grande de megapíxeles que alguna vez desees alojar.
Después de pulsar botones durante un tiempo para entender cómo funciona, esto es lo que creo que está ocurriendo:
Con una instalación por defecto, si client_max_body_size es igual a max image size kb, las imágenes no se redimensionarán.
Aumentar client_max_body_size permitirá subir archivos más grandes, que Discourse intentará redimensionar por debajo del límite establecido en max image size kb.
A pesar de la descripción que sugiere lo contrario, max image size kb en realidad no limita el tamaño de las cargas (¡esto es súper confuso!).
Los tamaños de carga se establecen únicamente mediante client_max_body_size de nginx.
Al redimensionar:
Los JPEGs se mantienen como JPEGs con buenos resultados.
Los PNGs se convierten a JPGs con resultados aceptables.
Los GIFs animados se mantienen como GIFs, pero generalmente con resultados pobres.
¿Es todo esto correcto? De ser así, parece algo que debería explicarse un poco mejor, ya que una instalación sin configuración previa no realiza ningún redimensionamiento de imágenes, aunque esta es una función que muchas personas podrían desear, y la documentación disponible no deja claro en absoluto cómo activarla.
Hmm, acabo de ver el archivo nginx.sample.conf en GitHub y parece que el valor predeterminado de client_max_body_size ahora es de 10 MB en lugar de 4 MB. ¿Siempre ha sido así? No recuerdo haber realizado ningún cambio en ese archivo en mi instalación antes de hoy.
Hola Sam, según la descripción, parece que no está funcionando para mí:
max_image_size_kb: “El tamaño máximo de carga de imagen en kB. Esto también debe configurarse en nginx (client_max_body_size) / apache o proxy. Las imágenes más grandes que este valor y más pequeñas que client_max_body_size se redimensionarán para ajustarse durante la carga.”
max_image_megapixels: “Número máximo de megapíxeles permitidos para una imagen. Las imágenes con un número mayor de megapíxeles serán rechazadas.”
O al menos no parece intentarse ningún redimensionamiento.
Tenía max_image_size_kb configurado en 1000kb y una imagen ligeramente superior fue reemplazada por un enlace seguido del texto que dice (imagen mayor que 1000KB).
Cambié la configuración a 500kb y ocurrió lo mismo.
No he modificado client_max_body_size en NGINX, ya que asumo que está en el valor predeterminado (4096).
Estas son imágenes con enlaces directos, por cierto (donde asumo que si tienes marcada la opción descargar imágenes remotas a local), debería tratarse como una carga estándar, ¿verdad? (Si no es así, ¿podemos hacer que se comporte de la misma manera, por favor?)
Edición: Bien, así que al cargar directamente, el redimensionamiento funciona ¡genial! Entonces, solo fallan las imágenes remotas que se recuperan. No estoy seguro de cuál sería el comportamiento ideal, pero a primera vista pensaría que debería ser el mismo: esas imágenes también deberían redimensionarse.
Creo que esto es una solicitud de funcionalidad independiente. Ciertamente, si reduces el tamaño máximo de imagen a 200 KB, tiene todo el sentido redimensionar las imágenes con enlace directo cuando las descargamos. Hay umbrales en juego; no deberíamos descargar una imagen de 700 gigabytes solo para averiguar esto, pero sí, algo podría mejorarse un poco.
Estoy de acuerdo, Sam. No se me ocurre ninguna razón por la que no quieras que las imágenes enlazadas directamente descargadas sigan las mismas reglas, a decir verdad.
También acabo de descubrir que si cambias el tamaño máximo de imagen, eso realmente afecta el tamaño de archivo final que obtienes, ¡lo cual es genial! Configurar el límite en 500 KB terminó redimensionando una imagen de 1,2 MB a 360 KB; configurarlo en 200 KB dio como resultado el mismo archivo de 118 KB (aunque, por supuesto, también es más pequeña).
Edición: Argh, pero volvemos al problema original: las imágenes demasiado grandes para ser redimensionadas fallan con:
Esta es la configuración predeterminada en nuestros foros. Intenté cambiarla a 20000 y funcionó (o al menos pareció quedarse guardada), pero cuando intenté subir una imagen/GIF de 17.2 MB, apareció este mensaje de error:
¿Podrías decirme qué ruta debo seguir (qué comandos ejecutar) en Linux para cambiar el “client_max_body_size” en nginx? Estoy en un droplet de DigitalOcean.
¿Esto significa que el valor predeterminado cambiará pronto de 4096 a 20000?
/var/discourse solo contiene una carpeta compartida. No puedo encontrar el archivo del que hablas. Mi problema es que tengo una instalación completamente nueva de Discourse y las cargas de imágenes en los mensajes no funcionan en absoluto. Incluso como administrador, obtengo el error: “Lo sentimos, hubo un error al subir ese archivo. Por favor, inténtalo de nuevo”. Lo he intentado una y otra vez y siempre recibo el mismo error.
Los registros de error muestran:
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) no se pudo encontrar: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
¿Está diseñado Discourse para ser un grupo de discusión “solo texto”? He aumentado todos los ajustes de archivo para el tamaño máximo de carga a tamaños enormes y ni siquiera puedo cargar una imagen de 7 KB.
No estoy seguro de cómo reconstruir. ¿Alguna orientación? Esta es una instalación nueva en una máquina virtual y no tuve ningún error. Todo parece funcionar, excepto los gráficos.