Pergunta

Eu tenho o código python que precisa fazer apenas um par simples coisas para fotografias: cortar, redimensionar, e sobrepor uma marca d'água. Eu usei PIL, e os resample / resultados de redimensionamento são terríveis. Eu usei imagemagick, e os e comandos da interface foram desenhados por embalagem de um gato em uma caixa, e depois repetidamente jogá-lo para baixo um conjunto de escadas em um teclado.

Eu estou procurando algo que não é PIL ou Imagemagick que eu possa usar com python para fazer, de alta qualidade transformações de imagem simples. Para essa matéria, não tem sequer a ter vínculos python se a interface de linha de comando é bom.

Oh, e ele precisa ser relativamente plataforma agnóstica, os nossos servidores de produção são linux, mas alguns dos nossos devs desenvolver nas janelas. Ele não pode exigir a instalação de um monte de código gui bobo para uso como uma biblioteca, também.

Foi útil?

Solução

Eu usei PIL, e os resample / resultados de redimensionamento são terríveis.

Eles não devem ser, contanto que você:

  1. Use apenas Image.ANTIALIAS filtragem para operações de redução de escala
  2. usar a filtragem única Image.BICUBIC para operações upscaling.
  3. lembre-se de converter para o modo de cor 'RGB' antes do redimensionamento se você estiver usando uma imagem paletted
  4. Não uso .thumbnail (). ele é excremento
  5. definir o nível quality= para algo apropriado ao salvar JPEGs (o padrão é bastante baixa)

Outras dicas

Eu não tenho certeza do porquê Image.thumbnail está ficando tais críticas. Na presente versão que eu estou correndo fora dele faz pouco mais do que descobrir o tamanho desejado e redimensionar a imagem no lugar. Enquanto você estiver usando o filtro resample adequada e converter para RGB primeira (como bobince diz) thumbnail não deve ser diferente do que redimensionamento.

Aqui está a fonte real para o método de miniaturas:

def thumbnail(self, size, resample=NEAREST):
  # preserve aspect ratio
  x, y = self.size
  if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
  if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
  size = x, y

  if size == self.size:
      return

  self.draft(None, size)

  self.load()

  try:
      im = self.resize(size, resample)
  except ValueError:
      if resample != ANTIALIAS:
          raise
      im = self.resize(size, NEAREST) # fallback

  self.im = im.im
  self.mode = im.mode
  self.size = size

  self.readonly = 0

PIL pode fazer o bem de redimensionamento. Certifique-se de sua imagem fonte está no modo RGB, não cores da paleta, e experimentar as diferentes opções de algoritmos.

Enquanto imagemagick parece ser a biblioteca de imagens de facto open-source, possivelmente diabo ( multiplataforma, parece estar a fazer operações de imagem simples) ou FreeImage .

Você verificou pypi ? A superficiais shows Procurar algumas ferramentas relacionadas imagem lá, eu também descobri python-gd, nenhum indício quão útil pode ser embora.

Eu nunca tive quaisquer problemas com PIL mim mesmo, mas algum tipo de variedade pode ser interessante.

GIMP tem uma interface de linha de comando razoável, eu acho.

Dê uma olhada em algumas dessas bibliotecas de imagem:

hxxp: //pypi.python.org/pypi/collective.croppingimagefield/0.1beta

hxxp: //pypi.python.org/pypi/cropresize/0.1.1

hxxp: //pypi.python.org/pypi/image_resize/1.0

A última vez que em comparação, a saída deste downscaler é quase idêntico ao da opção "cúbico" do GIMP:

 import Image

 def stretch(im, size, filter=Image.NEAREST):
     im.load()
     im = im._new(im.im.stretch(size, filter))
     return im

IIRC, as diferenças são visualmente indistinguíveis - alguns valores de pixel +/- 1 devido ao arredondamento, e eles tendem a ser em torno das bordas. Não é lento também.

cf: http: //www.mail-archive .com / imagem-sig @ python.org / msg00248.html

Eu usei PIL, e os resample / resultados de redimensionamento são terríveis.

O redimensionamento no PIL foi quebrado em muitos aspectos e PIL não é mantida por um longo tempo. A partir Pillow 2,7 a maioria dos problemas são fixos ao longo com a melhoria do desempenho drasticamente. Certifique-se de que você está usando mais recente Pillow .

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