Quero compactar um arquivo de imagem JPG com o ImageMagick, mas não consigo fazer muita diferença no tamanho. Por padrão, o tamanho da saída é maior que a entrada. Não sei por que, mas depois de adicionar algumas opções de perfil + e definir a qualidade, posso obter um tamanho menor, mas ainda semelhante ao original.
A imagem de entrada é 255kb, a imagem processada é 264kb (usando o perfil + para remover perfis e definindo a qualidade para 70%). Existe alguma maneira de comprimir essa imagem em 150kb, pelo menos? Isso é possível? Quais opções do ImageMagick posso usar?
image-processing
imagemagick
Javis Perez
fonte
fonte
Respostas:
Eu sempre uso:
no imagemagick deve ser
ou na versão mais recente:
espero que isso seja útil.
Link da fonte: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/
De @Fordi nos comentários (não esqueça de deixar o comentário dele, se quiser): Se você não gosta de desfocar, use
-sampling-factor 4:2:0
. O que isso faz é reduzir a resolução do canal de croma para metade, sem mexer com a resolução de luminância em que seus olhos se agarram. Se você deseja uma melhor fidelidade na conversão, pode obter uma pequena melhoria sem aumentar o tamanho do arquivo especificando-define jpeg:dct-method=float
- ou seja, use a transformação de cosseno discreto de ponto flutuante mais precisa, em vez da versão inteira rápida padrão.fonte
mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg
. Verifique se você possui um backup antes de executar esse comando. Ele irá escrever no lugar.-strip
fez isso por mim. Graçasmogrify -strip -quality 75% *.jpg
. Strip é ótimo. 0 perda de qualidade e grande economia de espaço. E a qualidade de 75% mal se distingue de 100%, mas ocupa metade do espaço.Estou usando as diretrizes de otimização de imagem do Google Pagespeed Insights e, para o ImageMagick, eles recomendam o seguinte:
-sampling-factor 4: 2: 0
-strip -quality
85 [pode variar, eu uso o intervalo 60-80, número menor aqui significa arquivo menor]
-interlace
-colorspace RGB
Comando no ImageMagick:
Com essas opções, economizo até 40% no tamanho JPEG sem muita perda visível.
fonte
Só para quem usa a classe Imagick no PHP:
fonte
Uma vez eu precisei redimensionar as fotos da câmera para o desenvolvimento:
Comando:
e não consigo ver nenhuma alteração na tela cheia com meu monitor de resolução 1920x1080. A resolução 2048 é a melhor para o desenvolvimento de fotos de 10 cm com qualidade máxima de 360 dpi. Eu não quero tirar isso.
edit: notei que até obtive resultados muito melhores sem desfocar. Sem desfocar o tamanho do arquivo é 50% do original, mas a qualidade é melhor (ao aplicar zoom).
fonte
Eu acrescentaria uma nota lateral útil e uma sugestão geral para minimizar JPG e PNG.
Primeiro, o ImageMagick lê (ou melhor, "adivinhar" ...) o nível de compactação do JPEG de entrada e, se você não adicionar
-quality NN
, a saída deve usar o mesmo nível da entrada. Às vezes, pode ser uma característica importante. Caso contrário, o nível padrão é-quality 92
(consulte www.imagemagick.org )A sugestão é sobre uma ferramenta gratuita realmente incrível ImageOptim , também para processo em lote.
Você pode obter jpgs menores (e pngs também, especialmente após o uso do ImageAlpha gratuito [sem processo em lote] ou do Pngyu gratuito, se precisar do processo em lote).
Além disso, essas ferramentas são para Mac e Win e como linha de comando (sugiro instalar usando o Brew e pesquisar nas fórmulas do Brew).
fonte
Eu adicionei
-adaptive-resize 60%
ao comando sugerido, mas com-quality 60%
.Estes foram os meus resultados
Não tenho certeza se essa conversão destrói muito minha imagem, mas sinceramente não acho que minha conversão pareça uma porcaria. Era um panorama de grande angular e eu não ligava para obstruções meticulosas.
fonte
Consulte os links a seguir, onde há uma opção no ImageMagick para especificar o tamanho do arquivo de saída desejado para gravar em arquivos JPG.
http://www.imagemagick.org/Usage/formats/#jpg_write http://www.imagemagick.org/script/command-line-options.php#define
-define jpeg:extent={size} As of IM v6.5.8-2 you can specify a maximum output filesize for the JPEG image. The size is specified with a suffix. For example "400kb".
Você perderá alguma qualidade ao descompactar e recomprimir, além de qualquer perda devido à redução do valor de qualidade da entrada.
fonte
Fiz algumas experiências aqui e menino, esse desfoque gausiano é bem diferente. O comando final que usei foi:
mogrify * - fator de amostragem 4: 2: 0 -strip -quality 88 -interlace Plane -define jpeg: dct-method = float -colorspace RGB -gaussian-blur 0.05
Sem o desfoque gausiano em 0,05, ele estava em torno de 261kb, e em torno de 171KB para a imagem em que eu estava testando. A diferença visual em um monitor 1440p com uma imagem grande e complexa não é perceptível até você aumentar o zoom.
fonte
Aqui está uma solução completa para quem usa o Imagick no PHP:
fonte
Se a imagem tiver grandes dimensões, é difícil obter bons resultados sem redimensionar, abaixo está um redimensionamento de 60% que, na maioria das finalidades, não destrói muito a imagem.
Eu uso isso com bom resultado para imagens em escala de cinza (eu converto de PNG):
Eu uso isso para páginas em preto e branco digitalizadas, para obter imagens em escala de cinza (os argumentos extras limpam as sombras das páginas anteriores):
Eu uso isso para imagens coloridas:
fonte