Domanda

Ho un codice Python che deve fare solo un paio di cose semplici da fotografare: ritagliare, ridimensionare e sovrapporre una filigrana. Ho usato PIL e i risultati di ricampionamento / ridimensionamento sono TERRIBILI. Ho usato imagemagick e l'interfaccia e i comandi sono stati progettati impacchettando un gatto in una scatola, e poi gettandolo ripetutamente giù da una rampa di scale su una tastiera.

Sto cercando qualcosa che non sia PIL o Imagemagick che posso usare con Python per fare trasformazioni di immagini semplici e di alta qualità. Del resto, non deve nemmeno avere i collegamenti python se l'interfaccia della riga di comando è buona.

Oh, e deve essere relativamente indipendente dalla piattaforma, i nostri server di produzione sono Linux, ma alcuni dei nostri sviluppatori si sviluppano su Windows. Non può nemmeno richiedere l'installazione di un gruppo di stupidi codici gui da utilizzare come libreria.

È stato utile?

Soluzione

  

Ho usato PIL e i risultati di ricampionamento / ridimensionamento sono TERRIBILI.

Non dovrebbero essere, purché tu:

  1. utilizza solo il filtro Image.ANTIALIAS per le operazioni di ridimensionamento
  2. utilizza solo il filtro Image.BICUBIC per le operazioni di upscaling.
  3. ricordati di convertire in modalità colore 'RGB' prima del ridimensionamento se stai usando un'immagine palettizzata
  4. non usare .thumbnail (). è una schifezza
  5. imposta il livello quality = su qualcosa di appropriato durante il salvataggio di JPEG (il valore predefinito è piuttosto basso)

Altri suggerimenti

Non sono sicuro del motivo per cui Image.thumbnail stia ottenendo tale difetto. Nella presente versione che sto esaurendo fa poco più che capire la dimensione desiderata e ridimensionare l'immagine in posizione. Finché stai usando il filtro di ricampionamento corretto e converti prima in RGB (come dice Bobince) la miniatura non dovrebbe essere diversa dal ridimensionamento.

Ecco la fonte effettiva del metodo di anteprima:

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 può fare un buon ridimensionamento. Assicurati che l'immagine sorgente sia in modalità RGB, non nei colori della tavolozza, e prova le diverse scelte dell'algoritmo.

Mentre imagemagick sembra essere la libreria di imaging open source di fatto, probabilmente DevIL ( multipiattaforma, sembra fare semplici operazioni con le immagini) o FreeImage .

Hai controllato pypi ? Una ricerca rapida mostra alcuni strumenti relativi alle immagini lì, ho anche scoperto python-gd, nessun indizio su quanto possa essere utile.

Non ho mai avuto problemi con PIL da solo, ma un certo tipo di varietà potrebbe essere interessante.

GIMP ha un'interfaccia a riga di comando ragionevole, credo.

Dai un'occhiata ad alcune di queste librerie di imaging:

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

L'ultima volta che ho confrontato, l'output di questo downscaler è quasi identico a quello del "cubic" di GIMP Opzione:

 import Image

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

IIRC, le differenze sono visivamente indistinguibili - alcuni valori di pixel +/- 1 a causa dell'arrotondamento e tendono ad essere arrotondati ai bordi. Non è nemmeno lento.

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

  

Ho usato PIL e i risultati di ricampionamento / ridimensionamento sono TERRIBILI.

Il ridimensionamento in PIL è stato interrotto in molti modi e PIL non viene mantenuto per lungo tempo. A partire da Pillow 2.7 la maggior parte dei problemi è stata risolta con un netto miglioramento delle prestazioni. Assicurati di utilizzare ultimo cuscino .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top