Planejo escrever um script que digitalize mais de 100.000 imagens JPEG e as recompacte se forem "grandes demais" em termos de tamanho do arquivo. O script é a parte mais fácil, mas não sei como categorizar uma imagem como "muito grande".
Por exemplo, há uma imagem de 2400x600px com um tamanho de arquivo de 1,81 MB. O comando save for web do Photoshop cria um arquivo de 540 KB com qualidade e 60 dimensões iguais. Isso representa cerca de 29% do tamanho original.
Agora, estou pensando em usar esses números como orientação. Algo como 540 KB / (2.400 * 600 / 1.000.000) = 375 KB por megapixel. Qualquer imagem maior que isso é considerada grande. Essa é a abordagem correta ou existe uma melhor?
Edição 1: as imagens precisam ser otimizadas para exibição nos sites.
Edição 2: Posso determinar a qualidade de saída desejada experimentando, preciso saber se as imagens são grandes em termos de tamanho de arquivo e dimensões e precisam ser salvas em qualidade inferior.
fonte
Respostas:
Em média , o ponto ideal do JPEG é de cerca de um bit por pixel .
Obviamente, isso varia de acordo com o conteúdo da imagem, porque certos tipos de gráficos (por exemplo, áreas planas e gradientes suaves) são compactados melhor que outros (ruído, texto); portanto, não é um método robusto para aplicar às cegas em todas as imagens.
Você também tem o problema de não ter uma imagem de referência descompactada para comparar, portanto não sabe ao certo qual é a qualidade atual das imagens que possui e quanto mais você pode diminuir a qualidade para continuar aceitável. A qualidade pode ser estimada em certa medida a partir de tabelas de quantização em JPEGs, mas também não é um método confiável (especificamente, o julgamento da qualidade do ImageMagick é muito incorreto para JPEGs com tabelas de quantização personalizadas e otimizadas).
Dito isto, existe uma abordagem prática razoável:
É importante não escolher apenas o tamanho menor do arquivo e exigir uma queda significativa no tamanho do arquivo. Isso ocorre porque a recompressão do JPEG tende sempre a diminuir levemente o tamanho do arquivo devido à perda de detalhes causada pela natureza com perdas do JPEG e à conversão para RGB de 8 bits, então pequenas quedas no tamanho do arquivo podem ter uma queda desproporcionalmente grande na qualidade que não vale a pena isto.
fonte
O tamanho dos arquivos compactados com JPEG varia dependendo da complexidade da imagem. Tentar controlar o tamanho dos arquivos da maneira que você descreve resultará em uma qualidade de imagem percebida altamente variável.
Considere as seguintes opções:
A abordagem suficientemente boa. Use uma configuração de qualidade que você considere aceitável, como 75. Compare o tamanho do resultado com a imagem original e mantenha o arquivo menor. Consulte Qual qualidade escolher ao converter para JPG?
Use um minimizador de JPEG , como JPEGmini ou
jpeg-recompress
do arquivo jpeg . Eles são projetados essencialmente para fazer o que você parece estar tentando fazer, mas com mais conhecimento dos componentes internos do algoritmo JPEG.Gere miniaturas de vários tamanhos , como sugere Nathancahill , da perspectiva do desenvolvedor da web.
fonte
Não. Essa é uma abordagem errada.
O tamanho do arquivo em pixels, sim, tem algo a ver com o peso final, mas não é o único fator.
Faça um teste. Pegue um arquivo completamente branco da mesma 2400x600px e salve-o como JPG.
Agora, tire uma foto de uma floresta (mesma 2400x600px) com muitos detalhes e salve-a. Este arquivo será maior usando as mesmas configurações de compactação.
O tamanho final depende desses 3 fatores:
Portanto, você não pode e não deve definir o peso com base no tamanho do pixel.
Mas eu entendo o seu problema.
Sem analisar a compactação atual da imagem, é difícil definir o peso "ideal" (que é relativo ao observador ou uso das imagens)
Você provavelmente pode definir uma configuração de compactação e recomprimir "todos eles". Não sei se você deseja fazer isso antes do "upload", o que provavelmente poupará mais tempo do que os salvos pulando alguns deles.
Existem algumas ferramentas que analisam uma imagem e calculam a taxa de compactação atual. Mas duvido que isso seja importante.
fonte
jpeg size / raw size
eraw size = pixel size * number of pixel
,pixel size
sendo 3 octetos para um espaço de cores RGB de 24 bits. E, como você diz, essa métrica não é suficiente para determinar se uma imagem está compactada o suficiente.Desenvolvedor da Web aqui. Aqui está como eu abordaria isso:
1. Determine as dimensões da imagem exibida e as resoluções de tela necessárias.
Sua primeira tarefa é determinar em que tamanho de pixel as imagens serão exibidas. São fotos de produtos em uma loja online? Uma galeria de fotos? Fotos do perfil do usuário? Vários tamanhos diferentes? Faça uma lista das dimensões de pixel necessárias. Verifique se você precisará de imagens @ 2x para telas de alta resolução, como telefones e tablets recentes.
2. Use um script de miniatura para criar novos arquivos de imagem.
Eles são chamados de scripts em miniatura, mas podem ser usados para muito mais do que apenas miniaturas. Existem muitos scripts por aí ou você pode escrever seus próprios. Ao não redimensionar os arquivos originais, você poderá fazê-lo se cometer um erro no script ou perceber que precisa de uma imagem de maior resolução. Uma prática comum é especificar um sufixo no nome do arquivo de saída. Por exemplo:
3. Comprimir.
O script de miniatura deve especificar a compactação jpg quando você recorta os novos arquivos de imagem. No entanto, existem outros minificadores por aí que podem reduzir ainda mais o tamanho do arquivo.
fonte
Embora a resposta de @ Rafael tenha explicado as entradas e saídas da compactação JPEG, tentarei responder à sua web e carregar problemas.
Usar uma imagem em um site (para design ou conteúdo) ditará alguns imperativos: para que minha imagem será usada? Logotipo, foto de capa, miniatura, foto em uma postagem de blog, foto em tela cheia para uma galeria ... Além disso, se você a usar para várias finalidades (por exemplo, uma foto e sua miniatura da galeria), você deseja recusá-la em todos os tamanhos necessários. No entanto, a menos que você esteja criando seu próprio site, a maioria dos serviços da Web hoje em dia gerará imagens de tamanho menor a partir de sua imagem maior para usar no site.
Agora que você conhece o objetivo da sua imagem, o site (ou CMS ou Framework front-end) sempre exigirá um tamanho máximo em pixels para sua imagem estar em conformidade. Os logotipos podem ter no máximo 600x600px, a cobertura do plano de fundo pode ter no máximo 1280x720px, foto de conteúdo para exibição em tela cheia 1920x1080 ou resolução nativa da câmera para conservação absoluta dos detalhes. Verifique o tamanho correto do site para o qual você deseja fazer o upload. Você deseja corresponder pelo menos ao tamanho máximo de pixel necessário, dependendo da proporção que deseja atingir. Cuidado, alguns serviços cortam e ampliam sua imagem se a proporção não for a mesma. Nesse caso, você terá que recriar sua imagem para se ajustar ao tamanho e à proporção máximos necessários.
Em seguida, o site pode impor um limite de tamanho de arquivo (ou não, dependendo da finalidade da imagem). Quanto ao tempo de carregamento da página, quanto mais leve, melhor. No seu exemplo de uma imagem de alta resolução em 2400x600px, 300 a 500kB é um tamanho totalmente fino para o tempo de carregamento. As imagens de conteúdo (como fotos) podem ser mais pesadas se a finalidade da imagem exigir (por exemplo, exibição em tela cheia), até a resolução nativa da sua câmera, se necessário. Se nenhuma indicação for fornecida, pode ser difícil adivinhar o limite de tamanho do arquivo, pois pode depender do equipamento do público-alvo (móvel, desktop ...), da qualidade da rede do país do público-alvo ... Para obter qualidade e serviço máximos, trate a foto uma a uma para obtenha o tamanho mínimo do arquivo sem artefatos visíveis. Para conveniência ou velocidade de processamento, o redimensionamento de script usando um nível geral de compactação satisfatório (cerca de 70 deve ser bom).A resposta do @ xiota também pode ser a ferramenta que você precisa. Defina seu próprio padrão aqui.
TL; DR a finalidade da imagem no site é essencial para o tamanho do redimensionamento / compactação.
fonte
O que você está calculando é o tamanho médio compactado de um pixel de imagem. Se você dividir pelo tamanho de pixel bruto (geralmente 3 octetos para um RGB de 24 bits), obtém a taxa de compactação.
Essa é uma boa métrica que fornece informações sobre o estado de compactação da imagem, mas não basta julgar se a imagem está suficientemente compactada ou não, porque a taxa de compactação não depende apenas do perfil de compactação (algoritmo = JPEG, qualidade = 60/100), mas também no potencial de compactação da imagem: imagens diferentes com o mesmo tamanho bruto e o mesmo perfil de compactação produzirão tamanhos jpeg diferentes porque as imagens são mais ou menos fáceis de compactar (uma imagem em branco é muito fácil de compactar, branca barulho não é).
Devido a isso e porque o perfil de qualidade "usado pela última vez" não é armazenado nesta imagem (nem na estrutura de cabeçalho de metadados ou jpeg), a abordagem mais usada ao republicar imagens com um perfil de tamanho / qualidade de destino é apenas recomprimir (e potencialmente redimensione) tudo (automaticamente), independentemente do estado inicial da imagem.
Sim, você pode recomprimir quando não for necessário, pode até perder espaço se recomprimir com um perfil de qualidade superior, mas esses são casos extremos e, em larga escala, é a coisa mais fácil a ser feita para garantir um perfil de qualidade desejado. Obviamente, você deseja fazer isso apenas uma vez para não degradar gradualmente as imagens e provavelmente deve armazenar duas bibliotecas de imagens: a inicial "intocada" e a "a ser publicada / recomprimida".
Existem muitas ferramentas para recomprimir vários arquivos. Você também pode criar seu próprio script e, usando a pilha técnica correta (principalmente C ++ e libjpeg), pode ser bem rápido, mesmo para arquivos com> 100k.
Se você deseja implementar um processo mais inteligente / complexo, tente experimentar uma lógica de tamanho de compactação / comparação iterativa para estimar o perfil de qualidade original (a compactação com a mesma qualidade deve produzir aproximadamente o mesmo tamanho, com uma alta a qualidade deve aumentar ligeiramente o tamanho e, com uma qualidade inferior, diminuir significativamente o tamanho). Obviamente, isso consumiria muito mais energia da CPU.
fonte
O tamanho original não compactado é 2400 x 600 x 3 = 4.320.000 bytes (4,1 MB), porque a cor de 24 bits é sempre três bytes de dados RGB por pixel . Não há como contornar essa verdade absoluta.
No entanto, o tamanho do JPG também depende dos detalhes da imagem. Grandes áreas lisas (como céu ou paredes pintadas) são mais compactadas, mas áreas com mais detalhes (como uma árvore cheia de folhas) também não são compactadas. Portanto, não há indicador numérico absoluto.
Mas 540 KB é 0.540 / 4.1 = 13% do tamanho original de 4.1 MB . Pode ser 29% do tamanho JPG anterior, mas é 13% do tamanho original não compactado. Isso significa 1/8 do tamanho original não compactado, que geralmente é considerado de qualidade "decente". Não é a melhor qualidade, não é a máxima, mas geralmente decente, talvez boa o suficiente para alguns usos. Apenas dizendo, já é pequeno.
Um arquivo JPG maior tem melhor qualidade de imagem e menor é menor qualidade de imagem. Você precisa decidir o que é bom o suficiente, mas o JPG nunca é "muito grande", pois a qualidade da imagem diminui com a compactação do JPG. A cor de 24 bits possui três bytes por pixel não compactado.
Portanto, a decisão é se você quer pequeno ou bom.
Mas aumentar um JPG existente ainda é pior, pois mais artefatos JPG são adicionados e, uma vez pequenos, os dados são alterados e nunca melhoram.
Os artefatos JPG normalmente mostram duas maneiras, como blocos visíveis de 8x8 pixels de uma cor nas áreas suaves sem detalhes ou como arestas visíveis ao redor das arestas de detalhes.
Se editar e salvar novamente um JPG, artefatos JPG adicionais serão adicionados. Se necessário, é recomendável sempre salvar novamente para corresponder à configuração de compactação original.
fonte
O "Save for Web" do Photoshop é, na verdade, um compromisso muito bom entre tamanho e qualidade do arquivo. Portanto, a menos que você tenha requisitos mais específicos, deve fazê-lo. Um conselho típico para desenvolvedores da Web é manter a faixa de qualidade de 50 a 70%. Obviamente, existem exceções: você desejará uma qualidade de 90 a 95% no logotipo da empresa, que deverá sempre parecer ótima (ou até convertê-la para um formato sem perdas) e chegar a 30% em um tamanho grande, mas mal conseguido. fundo da página visível.
Também não se esqueça de redimensionar suas imagens. Uma imagem de 2400x600 ficará ótima em uma tela 4K, mas será redimensionada em telas menores, desperdiçando largura de banda de dados sem nenhuma melhoria visual para o usuário. Verifique o modelo de site que você usará para descobrir a largura ideal para as imagens. Normalmente, no momento da redação deste documento, algo estará entre 1200 e 1300 pixels (veja a resolução mais popular aqui ).
Lembre-se de manter os originais das fotos convertidas em qualidade da Web. Se você precisar retrabalhar ou imprimir esse material, lamentará tê-lo apenas com qualidade de 60% e resolução de 1 Mpix.
fonte