Entiendo perfectamente (¡y lo aprecio!) que esto se exponga como una configuración del sitio para que los administradores la activen o desactiven, pero considero que esta “funcionalidad” está muy equivocada desde el principio.
Hay dos características enormemente importantes de los PNG: su representación sin pérdida (¡y legible!) del texto y el soporte para transparencia. Ambas son razones importantes para usar PNGs. Como usuario de un sitio de Discourse, subí una imagen (de texto con transparencia) a mi foro y quedé muy decepcionado al ver que se convertía automáticamente a JPG. No importa, lo alojaré en otro lugar. Bueno, eso funcionó muy bien hasta que apareció @system, descargó y convirtió mi imagen, editó mi publicación por debajo de mi control, rompiendo la transparencia y haciendo que se viera peor. Afortunadamente, también soy administrador y pude buscar en la web uno de los hilos de abajo que me guiaron hacia la configuración png to jpg quality que pude modificar.
Como mínimo, parece prudente desactivar esta funcionalidad si hay transparencia en el GIF.
¿Realmente a la gente le gusta esta funcionalidad en sus foros? Se ha planteado dos veces antes, ambas con personas confundidas o frustradas porque los PNG se estaban convirtiendo. Parece worthwhile reconsiderar esta configuración predeterminada.
Esto significa que la imagen era mucho más pequeña como JPG. Creo que hay configuraciones del sitio para ajustar este umbral. Echa un vistazo y busca en la configuración de tu sitio.
En Configuración/Archivos, baja hasta el tercer elemento desde la parte inferior. Desmarca Eliminar metadatos de imagen. Justo encima de eso está calidad de png a jpg. Ajusta la configuración según sea necesario.
Sí, entiendo perfectamente que esto es configurable (ya lo he desactivado en mi sitio) y comprendo la motivación detrás de ello. Sin embargo, sigo pensando que la característica en sí está mal planteada y que tendría sentido cambiar la configuración predeterminada.
Aquí tienes un ejemplo: los PNG son el formato de archivo predeterminado para las capturas de pantalla, y con razón. Si simplemente tomo una captura de esta ventana e intento subirla, se convierte automáticamente a JPG.
El archivo original pesaba 361 KB, mientras que tu JPG comprimido pesa 218 KB. Es cierto que es más pequeño, pero también hemos perdido la transparencia, lo cual se ve terrible para quienes usan un tema oscuro, y además hay artefactos alrededor del texto.
En cambio, si uso optipng localmente para optimizar el PNG, obtengo un archivo con transparencia y texto nítido que pesa solo 219 KB. Este archivo se mantendrá como PNG al subirlo:
La conversión de PNG a JPG es muy destructiva. Otra cosa es hacer esto al subir el archivo; es algo completamente distinto editar publicaciones para que se aplique automáticamente a imágenes externas después de publicarlas. Existen otras formas de ahorrar ancho de banda y almacenamiento, como optimizadores de PNG e incluso el redimensionamiento (con la función de hacer clic para ver la imagen completa, parece sensato incrustar la imagen más pequeña en la publicación y solo mostrar la versión completa al hacer clic).
Hay muchos temas de personas que intentan alojar sus foros lo más barato posible y se quejan de que las imágenes ocupan demasiado espacio. Este tipo de administrador no le importa la calidad de las imágenes; todo lo que quieren es recortar en todo y reducir costos.
Por otro lado, están las personas que están realmente comprometidas con sus comunidades, utilizarán el almacenamiento de objetos y podrán ofrecer una buena calidad con costos razonables.
¿La discusión aquí se trata de los valores predeterminados, cierto? O quizás podríamos intentar medir el tamaño del JPG frente a la optimización de la imagen PNG en la publicación. Si recuerdo correctamente, la optimización de PNG puede ser bastante costosa…
Eliminar esta función no va a suceder. Pero este post parece interesante:
¿Qué se necesitaría para que Discourse intente usar optipng primero y luego use el tamaño “optimizado” resultante para determinar si quiere pasar a JPG? ¿O sería demasiado lento?
Prueba ejecutar optipng en un PNG de 6000x6000 y observa qué sucede. Ya realizamos una forma de esto, pero el rendimiento cae en picada algorítmica muy rápidamente. Y de manera muy grave.
No tengo la intención de eliminar la funcionalidad en absoluto; lo siento si fui demasiado exagerado al llamarla una característica defectuosa. Se trata de los valores predeterminados. Simplemente encontré el comportamiento sorprendente y poco útil (especialmente después de haberlo solucionado con un enlace externo y que se editara automáticamente de nuevo). Por eso vine aquí, porque pensé que sería beneficioso para otros si el valor predeterminado fuera diferente… pero, como ocurre con todas las opciones predeterminadas, las preferencias subjetivas sobre los compromisos entran rápidamente en juego.
Gracias por tu post bien razonado, Rafael. Agradezco la discusión; como dije inicialmente, preguntaba sinceramente si a la gente le gustaba esta característica.
Vale la pena mencionar que la decisión actual de usar JPEG optimizado por defecto no está equivocada. ¡Me encantan los PNG y detesto los JPG para gráficos, pero en este caso apoyo totalmente el régimen actual (en ambos sentidos: autoridad y sistema).
El equipo de Discourse ha hecho una evaluación realista de lo que hará que Discourse funcione bien desde el principio:
El administrador promedio de un sitio no buscará opciones de calidad de imagen. No tienen la calidad de imagen como objetivo y no considerarán que el formato de archivo de imagen predeterminado sea un problema. Por lo tanto, establecer JPG optimizado como predeterminado genera menos problemas y ofrece el mayor beneficio para la mayoría de las personas.
Los amantes de los PNG, como yo, siempre buscamos opciones en el sitio para preservar la calidad y la información de las imágenes. De manera similar, los sitios centrados en fotos e imágenes tendrán la calidad de imagen como una decisión central.
Una consecuencia práctica del enfoque actual probablemente será una transición fluida a WebP con pérdida. Entonces, es probable que surja la cuestión de WebP con pérdida frente a WebP sin pérdida en futuros temas aquí.
Si alguna vez has optimizado muchos archivos PNG, sabrás que el resultado probable no es atractivo. Los optimizadores de PNG tardan eternidades en comparación con los optimizadores de JPG. También se requiere más inteligencia para crear imágenes PNG que puedan optimizarse de manera más efectiva, por ejemplo: https://medium.com/@duhroach/reducing-png-file-size-8473480d0476 o How To Optimize PNG — Smashing Magazine
Una cosa que eventualmente tendremos es la capacidad de que los usuarios optimicen su imagen antes de subirla.
Al delegar el trabajo de compresión en otro hilo (usando web workers) y emplear los mismos algoritmos que utilizamos en el servidor (usando WASM), la experiencia de usuario no es mala.
Si le indicas a tu programa de capturas de pantalla que deje de insertar sombras proyectadas, Discourse probablemente dejará de convertirla, porque realmente será texto y colores sólidos.
Estaba investigando esto hoy para un sitio que desea mantener todos los archivos PNG subidos en formato PNG. Lo que descubrí es que, tras establecer png to jpg quality en 100, Discourse sigue convirtiendo los PNG grandes a JPG a menos que la configuración recompress original jpg quality también se establezca en 100. ¿Es este el comportamiento esperado? De ser así, la descripción de la configuración recompress original jpg quality debe actualizarse para explicar cómo afecta a las cargas de PNG.