Depois de ler este tópico, este e este outro, não tenho certeza do que o Discourse faz com imagens grandes. Minha compreensão anterior era de que não há redimensionamento via software, apenas CSS — ou seja, o tamanho da imagem era limitado por tamanho máximo de upload de imagem em kB e pronto. Se uma imagem maior for um arquivo remoto, ela é vinculada; caso contrário, você simplesmente não consegue fazê-la upload.
Mas agora estou confuso, pois esses tópicos mencionam redução de tamanho e otimização, algo que eu não achava que ocorresse, já que nunca vi isso acontecer na prática, pelo menos que eu saiba. Também não faço ideia do que se aplica o limite Número máximo de megapixels permitidos para uma imagem. Isso impede o upload de imagens maiores que esse limite, ou as imagens que o ultrapassam são redimensionadas, desde que sejam menores que o tamanho máximo de upload?
Se for o segundo caso, por que a configuração padrão de megapixels é tão enorme em relação ao tamanho máximo de upload padrão? Parece extremamente improvável que alguém queira postar uma imagem de 51 megapixels que seja menor que 4096 kB.
O que eu quero é que os usuários façam upload de forma conveniente do que tiverem, sem se preocupar com tamanhos de arquivo e resoluções, e que o software entregue algo adequado que não prejudique usuários móveis e pessoas com conexões mais lentas. Isso é possível atualmente apenas ajustando tamanho máximo de imagem e máximo de megapixels?
Então, se eu alterar max upload para 10 MB e max megapixel para 12, o que acontece quando um usuário tenta fazer o upload de uma imagem de 12 megapixels com 7 MB?
Com as configurações padrão, uma porcentagem significativa de fotos tiradas por celulares mais recentes tem mais de 4096 kB, mas está longe de 40 megapixels.
Ainda não entendo o que acontece nesse caso, ou por que os valores padrão estão definidos como estão.
Ok, eu posso fazer isso. No entanto, também gostaria de entender o que o software está realmente fazendo para que eu possa tomar decisões mais informadas. No tempo que tenho usado o Discourse, aprendi a respeitar as configurações padrão e alterá-las apenas quando necessário. Neste caso, os padrões não estão funcionando muito bem para uma comunidade bastante típica, e estou curioso sobre por que eles estão configurados dessa forma, quais valores razoáveis eu deveria considerar em vez disso e o que acontecerá quando eu fizer essas alterações.
Ao ler o código, o número máximo de megapixels é uma restrição rígida. É um mecanismo de segurança, não algo que o sistema utiliza para tomar decisões sobre redução de tamanho.
max_image_size_kb é o único fator determinante para a redução automática de tamanho no momento do upload.
Aumente o número máximo de megapixels para a maior quantidade absoluta de megapixels que você jamais gostaria de hospedar.
Depois de apertar botões por um tempo para entender como funciona, é isso que acho que está acontecendo:
Com uma instalação padrão, client_max_body_size == max image size kb, as imagens não serão redimensionadas.
Aumentar o client_max_body_size permitirá uploads maiores, que o Discourse tentará redimensionar dentro do limite definido em max image size kb.
Apesar da descrição que sugere o contrário, max image size kb na verdade não limita o tamanho dos uploads (isso é super confuso!)
Os tamanhos de upload são definidos exclusivamente pelo client_max_body_size do nginx.
Ao redimensionar, JPEGs permanecem JPEGs com bons resultados
PNGs são convertidos para JPGs com resultados aceitáveis
GIFs animados permanecem GIFs com resultados geralmente ruins
Isso tudo está correto? Se sim, parece ser algo que deveria ser explicado um pouco melhor, já que uma instalação padrão não faz nenhum redimensionamento de imagem, mesmo sendo uma funcionalidade que muitas pessoas podem desejar, e não fica claro em absoluto na documentação disponível como ativá-la.
Hmm, acabei de olhar o nginx.sample.conf no GitHub e parece que o padrão para client_max_body_size agora é 10 MB em vez de 4 MB. Isso sempre foi assim? Não me lembro de ter feito nenhuma alteração nesse arquivo na minha instalação antes de hoje.
Oi Sam, pelo que a descrição diz, não parece estar funcionando para mim:
max_image_size_kb: “O tamanho máximo de upload de imagem em kB. Isso também deve ser configurado no nginx (client_max_body_size) / apache ou proxy. Imagens maiores que isso e menores que client_max_body_size serão redimensionadas para caber no upload.”
max_image_megapixels: “Número máximo de megapixels permitido para uma imagem. Imagens com um número maior de megapixels serão rejeitadas.”
Ou pelo menos nenhuma tentativa de redimensionamento parece estar sendo feita.
Eu tinha max_image_size_kb definido como 1000kb e uma imagem um pouco maior que isso foi substituída por um link, seguido pelo texto (imagem maior que 1000KB).
Mudei a configuração para 500kb e a mesma coisa aconteceu.
Não alterei client_max_body_size no NGINX, pois assumo que esteja no padrão (4096).
Isso ocorre com imagens que estão hot linked, aliás (onde, se você tiver a opção download remote images to local marcada, deveria tratar como um upload padrão? (Caso contrário, podemos fazer com que se comporte da mesma forma, por favor?))
Edição: Ok, então ao fazer o upload diretamente, o redimensionamento funciona – ótimo! Então, são apenas as imagens remotas que estão sendo buscadas que falham. Não tenho certeza de qual seria o comportamento ideal, mas, à primeira vista, eu pensaria no mesmo: essas imagens também deveriam ser redimensionadas.
Acho que isso é um pedido de recurso separado. Certamente, se você reduzir o tamanho máximo da imagem para 200 KB, faz todo o sentido redimensionar as imagens com link direto ao baixá-las. Existem limites envolvidos; não devemos baixar uma imagem de 700 GB apenas para descobrir isso, mas sim, algo poderia ser um pouco melhor.
Concordo, Sam. Não consigo pensar em nenhum motivo para não querer que as imagens hotlinked baixadas sigam as mesmas regras, sinceramente.
Também acabei de descobrir que, se você alterar o tamanho máximo da imagem, isso realmente impacta o tamanho final do arquivo — o que é muito legal! Definir para 500kb resultou no redimensionamento de uma imagem de 1,2mb para 360kb; definir para 200kb resultou no mesmo arquivo com 118kb (embora, obviamente, ela também fique menor).
Edição: Argh, mas voltamos ao problema original: imagens que são grandes demais para serem redimensionadas falham com:
Essa é a configuração padrão em nossos fóruns. Tentei alterá-la para 20000 e funcionou (ou parecia ter sido aplicada), mas ao tentar fazer o upload de uma imagem/GIF de 17,2 MB, apareceu esta mensagem de erro:
Pode me dizer qual caminho seguir (comandos a serem inseridos) no Linux para alterar o “client_max_body_size” no nginx? Estou usando um droplet da DigitalOcean.
Isso significa que o padrão será alterado em breve de 4096 para 20000?
/var/discourse contém apenas uma pasta compartilhada. Não consigo encontrar o arquivo que você mencionou. Meu problema é que tenho uma instalação nova do Discourse e nenhum upload de imagem em posts está funcionando. Mesmo como administrador, recebo o erro: “Desculpe, ocorreu um erro ao fazer upload desse arquivo. Por favor, tente novamente.” Já tentei várias vezes e continuo recebendo o mesmo erro.
Os logs de erro mostram:
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) não pôde ser encontrado: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
O Discourse foi projetado para ser um grupo de discussão “apenas texto”? Ajustei todas as configurações de arquivo para tamanhos máximos de upload absurdos, mas não consigo nem fazer upload de uma imagem de 7kb.
Não tenho certeza de como reconstruir. Poderia me orientar? Esta é uma instalação totalmente nova em uma VM e não obtive nenhum erro. Tudo parece funcionar, exceto os gráficos.