Question

J'ai un code python qui nécessite quelques opérations simples pour la photographie: rogner, redimensionner et superposer un filigrane. J'ai utilisé PIL, et les résultats de ré-échantillonnage / redimensionnement sont terribles. J'ai utilisé imagemagick, et l'interface et les commandes ont été conçues en emballant un chat dans une boîte, puis en le lançant à plusieurs reprises dans un escalier sur un clavier.

Je recherche quelque chose qui ne soit pas PIL ou Imagemagick et que je puisse utiliser avec python pour effectuer des transformations d’images simples et de haute qualité. D'ailleurs, il n'est même pas nécessaire d'avoir des liaisons python si l'interface en ligne de commande est bonne.

Oh, et il doit être relativement agnostique sur la plate-forme, nos serveurs de production sont Linux, mais certains de nos développeurs se développent sous Windows. Il ne peut pas non plus nécessiter l’installation d’un tas de code graphique stupide à utiliser comme bibliothèque.

Était-ce utile?

La solution

  

J'ai utilisé PIL et les résultats de ré-échantillonnage / redimensionnement sont terribles.

Ils ne devraient pas l'être tant que vous:

  1. utiliser uniquement le filtrage Image.ANTIALIAS pour les opérations de réduction de la taille
  2. utilisez uniquement le filtrage Image.BICUBIC pour les opérations de conversion ascendante.
  3. n'oubliez pas de convertir en mode de couleur 'RVB' avant le redimensionnement si vous utilisez une image à palettes
  4. n'utilisez pas .thumbnail (). c'est de la merde
  5. définissez le niveau quality = sur quelque chose de approprié lors de l'enregistrement de fichiers JPEG (la valeur par défaut est assez faible)

Autres conseils

Je ne suis pas sûr de savoir pourquoi Image.thumbnail reçoit une telle image. Dans la version actuelle dont je parle, il ne fait guère plus que déterminer la taille souhaitée et redimensionner l'image en place. Tant que vous utilisez le filtre de rééchantillonnage approprié et que vous convertissez d'abord en RVB (comme le dit Bobince), la vignette ne devrait pas être différente de la taille.

Voici la source réelle de la méthode de la vignette:

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 peut faire du bon redimensionnement. Assurez-vous que votre image source est en mode RVB, et non en couleurs de palette, et essayez les différents choix d'algorithmes.

Même si imagemagick semble être la bibliothèque d'imagerie open source de facto, il est peut-être même DevIL ( multiplate-forme, semble effectuer de simples opérations sur les images) ou FreeImage .

Avez-vous vérifié pypi ? Une recherche superficielle y montre quelques outils liés aux images. J'ai aussi découvert python-gd, aucune idée de son utilité.

Je n'ai jamais eu de problèmes avec PIL moi-même, mais une sorte de variété pourrait être intéressante.

Je pense que GIMP a une interface de ligne de commande raisonnable.

Jetez un coup d'œil à certaines de ces bibliothèques de création d'image:

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

La dernière fois que j'ai comparé, la sortie de ce downscaler est presque identique à celle de GIMP "Cubic". option:

 import Image

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

IIRC, les différences sont impossibles à distinguer visuellement - certaines valeurs de pixel +/- 1 en raison de l'arrondissement, et elles ont tendance à être arrondies. Ce n'est pas lent non plus.

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

  

J'ai utilisé PIL et les résultats de ré-échantillonnage / redimensionnement sont terribles.

Le redimensionnement dans la notice interne a été interrompu de nombreuses façons et la maintenance interne n’est pas conservée longtemps. À partir de Oreiller 2.7 , la plupart des problèmes sont résolus avec une amélioration spectaculaire des performances. Assurez-vous d'utiliser le dernier oreiller .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top