Pergunta

Estou tentando reduzir programaticamente (perdas) o tamanho do arquivo de arquivos PNG e GIF. Como parte disso, preciso reduzir o número de cores nas imagens. Não quero reduzir todas as imagens para um único valor de cores, então o que estou fazendo é; Obtenha o número de cores exclusivas na imagem; Divida esse número por 2 para reduzir o número de cores pela metade.

O problema é que isso não funciona. Usando o ImageMagic, é muito lento e não reduz o tamanho do arquivo, a menos que a imagem tenha em algumas centenas de cores únicas. O uso do GraphicsMagick sempre resulta em um valor exclusivo de cores abaixo de 255, independentemente de quantas cores houve na imagem original. Outro problema com o GraphicsMagick é se houver algum pixels transparente na imagem, ele substitui as cores perdidas por transparentes.

Qualquer ajuda seria bem -vinda, obrigado.

Foi útil?

Solução 3

Primeiro problema, o GraphicsMagick pode ser compilado usando níveis quânticos de 8 bits, 16 bits ou 32 bits. Minha versão é compilada em 8 bits (o padrão), isso significa que o número máximo de cores que pode ser atribuído a uma imagem é 256 cores únicas (3*3*2, 1 dos bits azuis é removido porque o olho humano pode Vejo isso corretamente). Obviamente, o GraphicsMagick pode lidar com imagens com mais cores do que isso, mas ao reduzir as cores, ele pode reduzir apenas 256 ou menos cores. Quantums de pixels maiores fazem com que o GraphicsMagick funcione mais devagar e exige mais memória. Por exemplo, o uso de quantums de pixels de dezesseis bits faz com que o GraphicsMagick seja executado de 15% a 50% mais lento (e tome o dobro da memória) do que quando é construído para suportar quantões de pixels de oito bits.

Segundo problema; Manuseio de transparência em imagens PNG, eu estava usando uma versão anterior do GraphicsMagick (1.1, eu acho), de qualquer maneira, quando atualizei para 1.3, esse problema não está mais presente, o que me diz que foi um bug no GraphicsMagick 1.1 que causou isso.

Outras dicas

Reduzir o número de cores só é útil se

  1. A imagem pode então usar uma paleta em vez de armazenar a cor para cada pixel
  2. O tamanho de um índice de paleta é menor que o tamanho de uma cor
  3. O formato de imagem suporta o tamanho da paleta

Eu acho que você só pode obter 1 bit, 4 bits, 8 bits, tão 2 cores, 16 cores ou 256 cores nesses formatos. Eu acho que se você pedir mais, será truncado para 256. Se você pedir menos, isso simplesmente não usa toda a paleta.

Você já pensou em converter para JPEG e brincar com a configuração de qualidade? Você acaba com mais controle de grãos finos da perda de perdas. A desvantagem é se as imagens não forem fotos, mas parece que elas têm muitas cores, então podem ser.

Talvez escolha 1, 4, 8 bits se estiver perto do que você deseja e do JPEG, se tiver muitas cores.

Eu acho que a instalação do ImageMagick que você procura pode ser quantização:

http://www.imagemagick.org/usage/quantize/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top