Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3222
| Newsgroups | fr.comp.lang.python |
|---|---|
| From | Lulu <lulu042@fry.fr.invalid> |
| Subject | Re: manipulation d'image |
| References | (1 earlier) <mn.74d37e38ae0c412e.79899@free.fr> <slrnql8oj8.h4p.lulu042@Minty.Rock-n-Roll.org> <slrnql8qac.j11.lulu042@Minty.Rock-n-Roll.org> <slrnql8s1q.l38.lulu042@Minty.Rock-n-Roll.org> <mn.79c57e38782a91f7.79899@free.fr> |
| Organization | koitess? |
| Message-ID | <slrnqle525.dfa.lulu042@Minty.Rock-n-Roll.org> (permalink) |
| Date | 2019-08-16 22:38 +0200 |
Le 15-08-2019, Pierre Maurette <maurette.pierre@free.fr> a écrit : > Lulu : Tout d'abord, merci de me répondre d'une réponse aussi détaillée, j'ai juste un peu peur que ce ne soit pas à la portée d'un newbie de mon espèce (but i'm working hard). > [...] > > Quelques indications qui devraient vous permettre de répondre vous-même > à vos questions. > Pour la doc, vous devriez partir de la doc officielle: > https://pillow.readthedocs.io/en/latest/ > > Vous voyez que Pillow est la distribution actuelle de l'historique > bibliothèque PIL (Pillow est un nom "commercial", c'est bien sous le > nom de PIL qu'elle sera importée, Pillow n'existe pas dans le code). 0K. J'avais un peu peur de cette histoire de fork... Voullez-vous dire que lorsque je "cause" avec PIL, j'ai aussi accès aux fonctions/modules/classes de Pillow ? (Est-ce newbie friendly ?) Je lis dans les premières lignes du votre lien : « Pillow is the _friendly_ PIL fork by... », donc a priori, « oui » à ma question. > Dans cette bibliothèque, une foule de modules, dont un nous intéresse > particulièrement (et pour un temps exclusivement): Image : > https://pillow.readthedocs.io/en/latest/reference/Image.html Je note la distinction que je dois faire entre "bibliothèque" et "module"... > Dans ce module, des fonctions et une classe (un objet): Image. Dans > la même page: > https://pillow.readthedocs.io/en/latest/reference/Image.html#the-image-class > C'est peut être confusant, mais en définitive logique. > Un module: PIL.Image > Une classe: PIL.Image.Image 0K. (J'essaye de suivre) Image est un module de la bibliothèque PIL mais Image est aussi une "classe" du module Image de PIL. > Parmi les fonctions du module (PIL.Image): open, new, etc. Liste de fonctions que l'on obtient en tapant dans un shell bash : hugo@Minty ~ $ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from PIL import Image >>> dir(Image) ['ADAPTIVE', 'AFFINE', 'ANTIALIAS', 'BICUBIC', 'BILINEAR', 'BOX', 'CONTAINER', 'CUBIC', 'DECODERS', 'DEFAULT_STRATEGY', 'DecompressionBombError', 'DecompressionBombWarning', 'ENCODERS', 'EXTENSION', 'EXTENT', 'FASTOCTREE', 'FILTERED', 'FIXED', 'FLIP_LEFT_RIGHT', 'FLIP_TOP_BOTTOM', 'FLOYDSTEINBERG', 'HAMMING', 'HAS_CFFI', 'HAS_PATHLIB', 'HUFFMAN_ONLY', 'ID', 'Image', 'ImageMode', 'ImagePointHandler', 'ImageTransformHandler', 'LANCZOS', 'LIBIMAGEQUANT', 'LINEAR', 'MAXCOVERAGE', 'MAX_IMAGE_PIXELS', 'MEDIANCUT', 'MESH', 'MIME', 'MODES', 'NEAREST', 'NONE', 'NORMAL', 'OPEN', 'ORDERED', 'PERSPECTIVE', 'PILLOW_VERSION', 'Path', 'QUAD', 'RASTERIZE', 'RLE', 'ROTATE_180', 'ROTATE_270', 'ROTATE_90', 'SAVE', 'SAVE_ALL', 'SEQUENCE', 'TRANSPOSE', 'TRANSVERSE', 'USE_CFFI_ACCESS', 'VERSION', 'WEB', '_E', '_ENDIAN', '_MAPMODES', '_MODEINFO', '_MODE_CONV', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_apply_env_variables', '_check_size', '_conv_type_shape', '_decompression_bomb_check', '_fromarray_typemap', '_getdecoder', '_getencoder', '_getscaleoffset', '_imaging_not_installed', '_initialized', '_plugins', '_show', '_showxv', '_wedge', 'alpha_composite', 'atexit', 'blend', 'builtins', 'coerce_e', 'collections', 'composite', 'core', 'deferred_error', 'effect_mandelbrot', 'effect_noise', 'eval', 'fromarray', 'frombuffer', 'frombytes', 'fromqimage', 'fromqpixmap', 'fromstring', 'getmodebandnames', 'getmodebands', 'getmodebase', 'getmodetype', 'i8', 'init', 'io', 'isImageType', 'isPath', 'isStringType', 'linear_gradient', 'logger', 'logging', 'math', 'merge', 'new', 'numbers', 'open', 'os', 'preinit', 'radial_gradient', 'register_decoder', 'register_encoder', 'register_extension', 'register_extensions', 'register_mime', 'register_open', 'register_save', 'register_save_all', 'registered_extensions', 'struct', 'sys', 'warnings'] Ce qui me permet de connaître les fonctions que je peux appeler depuis le code que j'écris. > Parmi les fonctions (méthodes) de la classe (PIL.Image.Image): convert, > putpixel, getpixel, etc. Justement. Je suis étonné de ne trouver dans la liste ci-dessus, ni convert, ni putpixel, ni getpixel. J'ai avancé... Avant mon code ne marchait pas et je ne savais pourquoi. Maintenant, mon code marche, mais je ne sais toujours pas pourquoi puisque je ne vois, dans PIL.Image aucune fonction convert, putpixel ou getpixel. > Donc, si je fais juste: > from PIL import Image > je n'ai importé que le module PIL.Image, en faisant simplement > l'économie d'avoir à saisir PIL.Image au profit de Image. La classe > PIL.Image.Image deviendra Image.Image, c'est tout. Soit. > Je vais donc avoir: > theimage1 = Image.open(blah) > theimage2 = Image.new(blahblah) OK. 'open' et 'new' font bien partie des fonctions du module Image de PIL. > theimage1.putpixel(blah) > theimage2.show() Par contre ni 'putpixel' ni 'show' ne sont listées par 'dir(Image)'. Comment pourrais-je (autrement que par des exemples tirés du web) savoir que ces fonctions sont disponibles ? > Mais je peux également faire: > Image.Image.putpixel(theimage1, blah) > Image.Image.show(theimage2) Même remarque. > Cas particulier: > Image._show(theimage2) > fonctionne. C'est un peu un hasard (ne fonctionne pas pour _convert, > qui n'existe pas), même si la pratique est habituelle. _show(unobjet) > est une fonction utile au module PIL.Image, l'underscore indique > qu'elle est vaguement "à usage interne" (peut-être héritée par > PIL.Image.Image, peu importe en fait), elle ne sera pas importée avec > *, ne sera pas documentée, etc. Mais reste parfaitement accessible. 0K pour "_show" qui apparaît avec 'dir (Image)' Reste le problème de 'putpixel' et 'getpixel' qui n'apparaissent pas comme fonction du module Image de PIL... > Un code qui utilise des écritures exotiques (les "mais je peux > également...") masque un problème, et doit être corrigé. Pas compris > Pourquoi (par exemple) > from PIL.Image import * > est *réellement* bad ? > > PIL.Image.open() devient open(). Hors open() est une fonction native > largement utilisée, elle sera masquée. Il ne sera pas rare d'avoir à > l'utiliser dans un code incluant PIL.Image.open(). On peut bien sûr > faire import builtins puis builtins.open(), il est clair que c'est > débile, ça casse les habitudes, les templates, le copier-coller de > code, ça fait chier le lecteur du code, et sans doute bien d'autres > choses. 0K. Bien compris. J'ai peur d'abuser de votre temps, mais si vous trouvez moyen de répondre à mes interrogations, je vous en serais gré
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 17:40 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-14 20:35 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 21:35 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 22:04 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-14 22:34 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-15 07:33 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-16 22:38 +0200
Re: manipulation d'image Pierre Maurette <maurette.pierre@free.fr> - 2019-08-17 17:37 +0200
Re: manipulation d'image Lulu <lulu042@fry.fr.invalid> - 2019-08-17 19:55 +0200
csiph-web