10
votes

Alternatives d'imagerie python

J'ai un code Python qui doit faire juste quelques choses simples à photographier: récolter, redimensionner et recouvrir 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 je le lançant à plusieurs reprises une série d'escaliers à un clavier.

Je recherche quelque chose qui n'est pas PIL ou ImageMagick que je peux utiliser avec Python pour faire des transformations d'image simples et de haute qualité. Pour cette affaire, il n'a même pas besoin d'avoir des liaisons Python si l'interface de ligne de commande est bonne.

OH, et il doit être relativement plate-forme agnostique, nos serveurs de production sont Linux, mais certains de nos Devs se développent sous Windows. Il ne peut pas nécessiter l'installation d'un groupe de code d'interface graphique idiote à utiliser comme une bibliothèque, non plus.


3 commentaires

Vous serez regarder un moment. Pymagick est la seule chose qui existe autre chose que PIL.


Comment les gens trouvent-ils PIL acceptables? Toute opération de redimensionnement (même rédaction) produit des artefacts et des flancs, même avec le réglage de rééchantillonnage antialias. J'ai essayé de nombreuses heures pour faire produire des résultats que j'accepterais, mais comparé aux outils de bureau tels que Photoshop ou Gimp, le redimensionnement de PIL est pathétique.


J'utilise redimensionner avec des antialias pour générer des vignettes pour une application de génération de documents, et ils sont comparables à ce que Acrobat PDF Viewer fait


9 Réponses :


1
votes

PIL peut faire un bon redimensionnement. Assurez-vous que votre image source est en mode RVB, pas de couleurs à la palette et essayez les différents choix d'algorithmes.


2 commentaires

Je l'ai toujours utilisé sur des JPEG plaines. Image.open ('myfile.jpg'), puis image.Thumbnail ou image.Resize, suivi de l'image.save ... tout avec le réglage antialias pour la rédaction. Cela devrait être en mode RVB par défaut (JPEGS sont RVB) et avec le meilleur algorithme de descente, non? Si je manque quelque chose, j'aimerais savoir ce que j'ai mal ...


Sans voir le code source et les images source, il est difficile de dire ce qui se passe. Beaucoup de gens utilisent PIL pour ce type de travail et sont satisfaits des résultats. Quelque chose est différent de votre cas (avez-vous des yeux surtout d'aigle?), Mais nous n'avons pas encore compris ce que cela.



1
votes

tandis que Imagemagick semble être la bibliothèque d'imagerie open source de facto, éventuellement diable ( Plate-forme transversale, semble faire des opérations d'image simples) ou FreeImage .


0 commentaires

18
votes

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

Ils ne devraient pas être, aussi longtemps que vous:

  1. Utilisez uniquement l'image.Antialias Filtrage pour les opérations d'inadaptation
  2. Utilisez uniquement image.Bicubic Filtrage pour les opérations d'amortissement d'amortissement.
  3. N'oubliez pas de convertir en mode couleur 'RVB' avant le redimensionnement si vous utilisez une image Paletted
  4. N'utilisez pas .Thumbnail (). C'est la merde
  5. Définissez le niveau Qualité = à quelque chose approprié lors de l'enregistrement des JPEG (la valeur par défaut est assez faible)

3 commentaires

Vous savez, après quelques autres tests, les résultats sont mieux avec redimensionnement, par opposition à la vignette, même avec l'algorithme de l'image.Antialias. Si j'y pense plus tard, je posterai quelques échantillons de résultats de diverses opérations.


Voir Stackoverflow.com/Questions/ 1386400 / ... - il ne teste pas assez comme contre, mais il y a clairement quelque chose de mal avec quelle vignette () fait.


Je voulais juste renforcer le point 5. Il est facile à manquer et c'est la principale cause des problèmes que cette question se plaint à l'origine.



1
votes

Avez-vous vérifié PYPI ? Une recherche superficielle montre des outils liés à l'image là-bas, j'ai également découvert Python-GD, aucun indice à quel point cela pourrait être utile.

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


0 commentaires

1
votes

GIMP a une interface de ligne de commande raisonnable, je pense.


1 commentaires

Malheureusement, GIMP nécessite GTK +, qui est une bibliothèque assez idiote à installer sur un serveur sans tête.



1
votes

Jetez un coup d'œil à certaines de ces bibliothèques d'imagerie:

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

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

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


0 commentaires

0
votes

La dernière fois que j'ai comparé, cette sortie de Downscaler est presque identique à celle de l'option "cubique" de Gimp: xxx p> IIRC, les différences sont visuellement indiscernables - certaines valeurs de pixel +/- 1 En raison de l'arrondi, ils ont tendance à être autour des bords. Ce n'est pas lent non plus non plus.

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


0 commentaires

2
votes

Je ne suis pas sûr de savoir pourquoi l'image.Thumbnail obtient un tel flak. Dans la présente publication que je suis en train de s'expliquer, il fait un peu plus que de comprendre la taille souhaitée et redimensionnez l'image en place. Tant que vous utilisez le filtre de rééchantillonnage approprié et que vous convertissez en premier (indique Bobince), la vignette ne doit pas être différente de redimensionnement.

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


0 commentaires

1
votes

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

Redimensionnement en PIL a été brisé à bien des égards et PIL n'est pas maintenu pendant une longue période. À partir de oreiller 2.7 La plupart des problèmes sont fixés le long de avec une amélioration spectaculaire des performances. Assurez-vous que vous utilisez dernier oreiller .


0 commentaires