Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue117:inkscape [2017/01/31 13:13] – d52fr | issue117:inkscape [2017/02/03 16:54] (Version actuelle) – andre_domenech |
---|
| |
Let's first of all rule out the two that don't work. “Fill Paint” and “Stroke Paint”, according to the SVG specification, should do exactly what their names suggest. They should act in a similar way to the Flood primitive, by filling the filter area with a color, but rather than specifying the value within the filter primitive itself, it is taken from the selected object's Fill or Stroke color. This sounds like a great way of pulling a couple of colors into your filter chain, and allowing you to create filters that can adapt to the colors of the objects they're applied to. Except it doesn't work at all in Inkscape.** | Let's first of all rule out the two that don't work. “Fill Paint” and “Stroke Paint”, according to the SVG specification, should do exactly what their names suggest. They should act in a similar way to the Flood primitive, by filling the filter area with a color, but rather than specifying the value within the filter primitive itself, it is taken from the selected object's Fill or Stroke color. This sounds like a great way of pulling a couple of colors into your filter chain, and allowing you to create filters that can adapt to the colors of the objects they're applied to. Except it doesn't work at all in Inkscape.** |
| |
| Les filtres sont un sujet important pour tirer le meilleur parti d'Inkscape - au moins, pour des activités artistiques. Il y a toujours un danger avec le dessin vectoriel : qu'il puisse paraître, au final, trop précis et stérile pour certains usages ; les filtres sont souvent une façon de rajouter de fines (et pas si fines) variations dans la texture et la couleur qui sont souvent la marque de fabrique des dessins bitmap. Du moins, c'est la raison pour laquelle j'ai choisi de passer les neuf derniers articles de la série à vous présenter les filtres ; mais, ayant décrit chaque primitive dans le détail et montré quelques chaînes de filtrage ce faisant, cet article est le dernier sur ce sujet, et je passerai à autre chose le mois prochain. |
| |
| Dans la partie 48, j'ai mentionné rapidement les colonnes d'entrées source sur la droite du dialogue des filtres (soulignées en rouge). Nous avons passé un peu de temps avec l'« Opacité de la source » et beaucoup plus avec la « Source image » ; mais, il reste quatre autres options qui ont été complètement ignorées jusqu'à maintenant. Il y a une bonne raison à cela, car dans la partie 48, j'ai écrit : « des six entrées visibles dans l'interface utilisateur, deux d'entre elles réclament un traitement spécial... et deux autres ne fonctionnent pas du tout ! » |
| |
| Tout d'abord, réglons le sort des deux qui ne fonctionnent pas. « Remplissage » et « Remplissage du contour », d'après la spécification SVG, devraient faire exactement ce que suggèrent les noms. Elles devraient agir comme pour la primitive Remplissage, en remplissant la zone de filtrage avec une couleur, mais, plutôt que de spécifier la couleur dans la primitive de filtrage elle-même, elle est prise à partir de la couleur de remplissage ou de contour de l'objet sélectionné. Ceci semble être une façon brillante d'introduire une paire de couleurs dans votre chaîne de filtrage, vous permettant de créer des filtres qui s'adaptent aux couleurs des objets auxquelles elles sont appliquées. Sauf que ça ne fonctionne pas du tout dans Inkscape. |
| |
**There's one obvious technical issue with these input sources: a fill or stroke in SVG can be more than a simple flat color. This doesn't really affect their use in a filter chain – a pattern can be repeated to fill the filter region, as can a gradient if the definition allows it – but it does significantly complicate the rendering process for Inkscape, and has not (yet) been tackled by the developers. Nevertheless, even just being able to use solid colored fills and strokes would be a useful addition. If there are no plans to add even that much, it's long past the time when these couple of columns should be removed from the UI to avoid further confusion. | **There's one obvious technical issue with these input sources: a fill or stroke in SVG can be more than a simple flat color. This doesn't really affect their use in a filter chain – a pattern can be repeated to fill the filter region, as can a gradient if the definition allows it – but it does significantly complicate the rendering process for Inkscape, and has not (yet) been tackled by the developers. Nevertheless, even just being able to use solid colored fills and strokes would be a useful addition. If there are no plans to add even that much, it's long past the time when these couple of columns should be removed from the UI to avoid further confusion. |
| |
The remaining source inputs, “Background Image” and “Background Alpha” can be used within Inkscape, but only after a little preparation. These inputs represent an “image snapshot of the canvas under the filter region at the time that the 'filter' element is invoked” (according to the SVG spec). In other words, they pull in a flattened bitmap version of the drawing behind the filter region (or just the alpha channel of the same area), and make it available inside the filter chain, much like a bitmap pulled in via the Image primitive. The spec also points out, however, that holding a copy of the background image in memory “can take up significant system resources”, so the SVG content must “explicitly indicate” to the application that the document needs access to the background before these two input sources will have any effect. It then goes on to define how a document should specify that it needs access to the background by putting an attribute called “enable-background” onto an ancestor container element, giving it a value of “new”. You can fiddle around with the XML editor, or even modify your file's source code in a text editor, to achieve this, but there is a much easier way.** | The remaining source inputs, “Background Image” and “Background Alpha” can be used within Inkscape, but only after a little preparation. These inputs represent an “image snapshot of the canvas under the filter region at the time that the 'filter' element is invoked” (according to the SVG spec). In other words, they pull in a flattened bitmap version of the drawing behind the filter region (or just the alpha channel of the same area), and make it available inside the filter chain, much like a bitmap pulled in via the Image primitive. The spec also points out, however, that holding a copy of the background image in memory “can take up significant system resources”, so the SVG content must “explicitly indicate” to the application that the document needs access to the background before these two input sources will have any effect. It then goes on to define how a document should specify that it needs access to the background by putting an attribute called “enable-background” onto an ancestor container element, giving it a value of “new”. You can fiddle around with the XML editor, or even modify your file's source code in a text editor, to achieve this, but there is a much easier way.** |
| |
| Il y a un problème technique évident avec ces deux sources d'entrée : un remplissage ou un contour peut être plus qu'une simple couleur unie dans SVG. Ceci n'affecte pas vraiment leur utilisation dans une chaîne de filtres - un motif peut être répété pour remplir la zone de filtrage, de même qu'un dégradé, si la définition le permet - mais cela complique de manière significative le processus de rendu pour Inkscape, et cela n'a pas (encore) été abordé par les développeurs. Néanmoins, même la simple possibilité d'utiliser une couleur unie de remplissage ou de contour serait un ajout utile. S'ils ne projettent pas d'ajouter au moins cela, il y a longtemps que ces deux colonnes auraient dû être supprimées de l'interface pour éviter toute confusion. |
| |
| Les sources d'entrée restantes, « Image de fond » et « Opacité de fond », peuvent être utilisées dans Inkscape, mais seulement après une petite préparation. Ces images représentent un « image instantanée du canevas sous la zone du filtrage au moment où l'élément de filtrage est invoqué » (d'après la spécification SVG). En d'autres termes, ils introduisent une image bitmap du dessin derrière la zone de filtrage (ou simplement le canal alpha de cette même zone) et la rendent disponible dans la chaîne de filtrage, comme l'introduction d'un bitmap via la primitive Image (ou presque). Cependant, la spécification indique aussi que la conservation d'une image de l'arrière-plan en mémoire « peut prendre une quantité significative des ressources système » ; aussi, le contenu SVG doit « indiquer explicitement » à l'application que le document doit avoir accès à l'arrière-plan avant que l'une de ces deux sources puisse avoir le moindre effet. Puis, elle définit comment spécifier à un document qu'il doit avoir accès à l'arrière-plan, en plaçant un attribut « enable-background » (activer l'arrière-plan) dans l'élément conteneur ascendant, lui donnant la valeur « new » (nouveau). Vous pouvez bricoler l'éditeur XML ou même modifier le code source du fichier dans un éditeur de texte, mais il y a une façon beaucoup plus facile de le faire. |
| |
**Before explaining the simpler method, I'll use a very basic test file to clarify exactly what I'm talking about. Here I have a pair of green circles as my background objects. The background consists of any content below the filtered object in the z-order, so could just as easily have been a single shape or an entire drawing. In front of the circles is a red square, the object I'll be applying the filter to. | **Before explaining the simpler method, I'll use a very basic test file to clarify exactly what I'm talking about. Here I have a pair of green circles as my background objects. The background consists of any content below the filtered object in the z-order, so could just as easily have been a single shape or an entire drawing. In front of the circles is a red square, the object I'll be applying the filter to. |
My test image now looks like this, with the background colors rotated within the area covered by the square's filter region. By default the filter region extends beyond the selected object, which is why the color shift is present outside the dotted outline of the selection box. The square itself has disappeared, because there's nothing in the filter chain that pulls in the “Source Graphic” input. | My test image now looks like this, with the background colors rotated within the area covered by the square's filter region. By default the filter region extends beyond the selected object, which is why the color shift is present outside the dotted outline of the selection box. The square itself has disappeared, because there's nothing in the filter chain that pulls in the “Source Graphic” input. |
So what happened? What was the black arts and voodoo that made the filter work just by changing a blend mode, then immediately changing it back again? It's actually quite simple: the blend mode popup in the layers dialog is just a shorthand way to add a filter with a Blend primitive to the document. You can even see it appear in the filter editor.** | So what happened? What was the black arts and voodoo that made the filter work just by changing a blend mode, then immediately changing it back again? It's actually quite simple: the blend mode popup in the layers dialog is just a shorthand way to add a filter with a Blend primitive to the document. You can even see it appear in the filter editor.** |
| |
| Avant d'expliquer cette méthode plus simple, j'utiliserai un fichier texte très basique pour clarifier exactement ce dont je parle. Voici un couple de cercles verts qui seront mes objets d'arrière-plan. L'arrière-plan est constitué de tous les contenus qui sont sous l'objet filtré dans l'axe z ; ce peut être aussi bien une forme simple qu'un dessin complet. Devant les cercles se trouve un carré rouge, l'objet sur lequel j'appliquerai le filtre. |
| |
| Le filtre lui-même est assez simple, juste une primitive Matrice de couleurs réglée sur le mode Décalage de teinte, en utilisant l'Image de fond comme source. |
| |
| Le résultat, à cet instant, est plutôt décevant. Le carré devient simplement transparent, sans aucun effet sur les cercles d'arrière-plan. |
| |
| Maintenant, ajoutons l'attribut « enable-background ». Ouvrez simplement le dialogue des calques et changez le mode de fondu de l'un des calques pour autre chose que « Normal » (voyez la partie 9 de la série, si nécessaire). Ne paniquez pas si un effet inattendu apparaît sur votre image, car nous allons immédiatement revenir à « Normal ». La magie devrait déjà avoir agi. |
| |
| Mon image de test ressemble maintenant à ceci, avec les couleurs d'arrière-plan qui ont changé dans le secteur couvert par la zone de filtrage du carré. Par défaut, la région de filtrage s'étend bien au-delà de l'objet sélectionné ; c'est pourquoi le changement de couleur est présent à l'extérieur de la ligne pointillée de la boîte sélectionnée. Le carré lui-même a disparu, parce qu'il n'y a rien dans la chaîne de filtrage qui vient de la Source image. Alors, que s'est-il passé ? Quelle magie noire, quel vaudou a fait que le filtre fonctionne juste en changeant un mode de fondu, puis en revenant immédiatement à la valeur initiale ? C'est vraiment très simple : le choix du mode de fondu dans le dialogue des calques est un raccourci pour ajouter un filtre avec la primitive Mélange à l'objet. Vous pouvez même voir qu'il apparaît dans l'éditeur de filtre. |
| |
**Although it appears in the dialog, the filter isn't attached to any objects that you can select on the canvas. Rather it is linked to the layer itself. Remember that layers are just a group with some Inkscape-specific attributes added, so it's not really any different to having a filter applied to a group of objects. When the filter is created, Inkscape automatically connects the inputs of the Blend primitive to the Source Graphic (i.e. the layer that's actually a group), and to the Background Image. At the same time, it adds the “enable-background” attribute to the root node of the SVG document, visible here in Inkscape's XML editor. | **Although it appears in the dialog, the filter isn't attached to any objects that you can select on the canvas. Rather it is linked to the layer itself. Remember that layers are just a group with some Inkscape-specific attributes added, so it's not really any different to having a filter applied to a group of objects. When the filter is created, Inkscape automatically connects the inputs of the Blend primitive to the Source Graphic (i.e. the layer that's actually a group), and to the Background Image. At the same time, it adds the “enable-background” attribute to the root node of the SVG document, visible here in Inkscape's XML editor. |
| |
I shan't spend any time going exhaustively through the list of default filters, but instead encourage you to explore them on your own. Try creating a test sheet with some different objects and groups to work on: some of the filters work best on small objects, others on large ones; some require colorful content, others work just as well with a monochrome shape; some are wasted on intricate outlines, whilst others fail just as easily on featureless blocks of color.** | I shan't spend any time going exhaustively through the list of default filters, but instead encourage you to explore them on your own. Try creating a test sheet with some different objects and groups to work on: some of the filters work best on small objects, others on large ones; some require colorful content, others work just as well with a monochrome shape; some are wasted on intricate outlines, whilst others fail just as easily on featureless blocks of color.** |
| |
| Bien qu'il apparaisse dans le dialogue, le filtre n'est attaché à aucun objet que vous puissiez sélectionner sur le canevas. Il est plutôt lié au calque lui-même. Souvenez-vous que les calques sont juste un groupe auquel sont ajoutés quelques attributs spécifiques à Inkscape ; aussi, ce n'est pas vraiment différent d'un filtre appliqué à un groupe d'objets. Quand le filtre est créé, Inkscape connecte automatiquement les entrées de la primitive Mélange à la Source image (c'est-à-dire le calque qui est vraiment un groupe) et à l'Image de fond. En même temps, il ajoute l'attribut « enable-background » au nœud racine du document SVG, visible ici dans l'éditeur XML d'Inkscape. |
| |
| Le point clé est que le retour du Mode de rendu à « Normal » laisse cet attribut intact, alors qu'il a bien retiré le filtre. A partir de ce moment-là, vous êtes libre d'utiliser les entrées Image de fond et Opacité de fond dans vos propres chaînes de filtrage. |
| |
| Ceci conclut notre examen détaillé de l'art mystérieux de la création de vos propres chaînes de filtrage. Mais, si vous avez fait des tests, vous avez noté, sans aucun doute, qu'Inkscape fournit déjà une liste étendue de filtres prêts à l'emploi, groupés par type, qui représentent la majeure partie du menu des Filtres. Pendant qu'il y a ces courageux masochistes qui osent braver les défaillances de l'interface utilisateur d'Inkscape pour créer leurs propres filtres complexes « ex nihilo », beaucoup plus d'utilisateurs travaillent simplement avec l'ensemble fourni par défaut. Mais, avec le savoir que vous avez engrangé ces derniers mois, vous pouvez faire mieux que ça : vous pouvez commencer avec un filtre standard, puis plonger dans ses entrailles pour l'éditer et l'ajuster pour répondre à vos besoins. |
| |
| Je ne perdrai pas de temps à passer exhaustivement en revue la liste des filtres par défaut, mais, à la place, je vous encourage à les explorer vous-même. Essayez de créer une feuille de test avec différents objets et groupes pour travailler dessus : certains filtres fonctionnent mieux avec des petits objets, d'autres avec des grands ; certains ont besoin d'un contenu coloré, d'autres marchent avec une simple forme monochrome ; certains sont perdus avec des contours compliqués, pendant que d'autres sont en défaut sur de simples blocs de couleur sans fioritures. |
| |
**A useful ability of Inkscape is that, when you copy and paste an object from one document to another any attached filters are copied with it. Why not start a “filter library” – a document into which you copy any particularly useful or impressive filters? Each time you create or find a great filter, just apply it to a suitable object, then copy and paste it into your library file. Similarly, when you want to use a filter from the library, just copy the object from the library file and paste it into your current creation. The filter will appear in the filters dialog, and, once you've applied it to something else in your image, you can safely delete the object you pasted in. Other users have already posted their own filter collections online – search for “Inkscape filter pack”, for example – so you might find that someone else has already created just the filter you need, and it's only a copy and paste away from being used in your drawings. | **A useful ability of Inkscape is that, when you copy and paste an object from one document to another any attached filters are copied with it. Why not start a “filter library” – a document into which you copy any particularly useful or impressive filters? Each time you create or find a great filter, just apply it to a suitable object, then copy and paste it into your library file. Similarly, when you want to use a filter from the library, just copy the object from the library file and paste it into your current creation. The filter will appear in the filters dialog, and, once you've applied it to something else in your image, you can safely delete the object you pasted in. Other users have already posted their own filter collections online – search for “Inkscape filter pack”, for example – so you might find that someone else has already created just the filter you need, and it's only a copy and paste away from being used in your drawings. |
| |
If you look closely you'll see that it's not even connected to the last primitive, so plays no active role in this chain. You can delete it entirely and it won't have any effect. So why is it there?** | If you look closely you'll see that it's not even connected to the last primitive, so plays no active role in this chain. You can delete it entirely and it won't have any effect. So why is it there?** |
| |
| Une possibilité classique d'Inkscape est que, quand vous copiez/collez un objet d'un document à un autre, tous les filtres attachés le suivent. Pourquoi ne pas commencer une « bibliothèque de filtres », un document dans lequel vous copiez tout filtre particulièrement utile ou impressionnant ? Chaque fois que vous créez ou trouvez un filtre génial, appliquez-le simplement à un objet approprié, puis copiez/collez-le dans le fichier de la bibliothèque. De même, quand vous voulez utiliser un filtre de votre bibliothèque, copiez juste l'objet du fichier de la bibliothèque et collez-le dans votre dessin en cours de création. Le filtre apparaîtra dans le dialogue des filtres et, une fois appliqué à quelque chose d'autre dans votre image, vous pourrez effacer sans risque l'objet tiré de la bibliothèque. Des utilisateurs ont déjà posté en ligne leurs propres collections de filtres ; cherchez « Inkscape filter pack » (paquet de filtres Inkscape), par exemple ; vous pourriez trouver ainsi que quelqu'un d'autre a déjà créé le filtre dont vous avez besoin, et il vous suffit d'un copier/coller pour l'utiliser dans vos propres dessins. |
| |
| Quand vous créez vos propres chaînes de filtrage à partir de rien, la question sur ce qui se passe en combinant deux primitives ne se pose pratiquement jamais. Vous voulez un filtre pour flouter et dé-saturer ? Pas de problème, simplement enchaînez une primitive Flou gaussien avec une primitive Matrice de couleurs (en mode Saturation). Mais qu'arrive-t-il si vous voulez faire la même chose avec les filtres par défaut ? Il y a, dans le menu Filtres, Flou > Flou ( qui fournit une simple primitive Flou gaussien) et aussi Couleurs > Brillance (qui fournit une simple primitive Matrice de couleurs). Que se passe-t-il si vous ajoutez les deux à un objet ? Si vous l'essayez, vous verrez que vous obtenez un résultat flou et dé-saturé ; ainsi, il est possible de combiner de cette manière les filtres par défaut. Mais il se passe un truc bizarre dans la chaîne de filtres. Vous n'avez pas seulement les deux primitives que vous avez prévu, mais aussi une troisième : une Matrice de couleurs supplémentaire entre les deux primitives attendues. |
| |
| Si vous regardez avec attention, vous verrez qu'elle n'est même pas reliée à la dernière primitive ; elle ne joue donc aucun rôle actif dans la chaîne. Vous pouvez la supprimer et cela n'aura aucun effet. Alors, pourquoi est-elle là ? |
| |
| |
**It turns out that this is actually a rather nice addition on the part of the Inkscape developers. Let's suppose you want to add another filter to this chain, but it's one that would normally use Source Alpha as an input. To prevent any unexpected results, you need it to use the alpha from the previous filter output, which will usually not be the same as the Source Alpha at all. These extra Color Matrix primitives act as intermediate alpha outputs within the chain. So with the addition of these, you can not only link any new primitives into the image output of each filter, but also to its alpha output as well. | **It turns out that this is actually a rather nice addition on the part of the Inkscape developers. Let's suppose you want to add another filter to this chain, but it's one that would normally use Source Alpha as an input. To prevent any unexpected results, you need it to use the alpha from the previous filter output, which will usually not be the same as the Source Alpha at all. These extra Color Matrix primitives act as intermediate alpha outputs within the chain. So with the addition of these, you can not only link any new primitives into the image output of each filter, but also to its alpha output as well. |
| |
One final thing to note is that, in 0.91 (and the just released 0.92!), many of the default filters now have an ellipsis (three dots, “…”) after their name. Choosing one of these opens a dialog which lets you enter parameters for the filter, and even see a live preview. Of course this is just a shortcut to setting parameters in the individual filter primitives, but is a welcome addition that can expose the most important parameters from across a number of primitives, whilst hiding all the other options and settings that aren't relevant in most cases. Unfortunately, there's no way to get this simplified UI back once you've dismissed it, so any subsequent tweaks will mean diving into all the gory details of the individual primitives again. Some of the separate filters from 0.48 have also been dropped, since the new parameterized filters can achieve the same effects and more. If you can't find an old favourite filter in the newer releases, look for a similar name with an ellipsis, and start tweaking the parameters!** | One final thing to note is that, in 0.91 (and the just released 0.92!), many of the default filters now have an ellipsis (three dots, “…”) after their name. Choosing one of these opens a dialog which lets you enter parameters for the filter, and even see a live preview. Of course this is just a shortcut to setting parameters in the individual filter primitives, but is a welcome addition that can expose the most important parameters from across a number of primitives, whilst hiding all the other options and settings that aren't relevant in most cases. Unfortunately, there's no way to get this simplified UI back once you've dismissed it, so any subsequent tweaks will mean diving into all the gory details of the individual primitives again. Some of the separate filters from 0.48 have also been dropped, since the new parameterized filters can achieve the same effects and more. If you can't find an old favourite filter in the newer releases, look for a similar name with an ellipsis, and start tweaking the parameters!** |
| |
| Il s'avère que c'est un ajout plutôt sympa de la part des développeurs d'Inkscape. Supposons que vous vouliez ajouter un autre filtre à cette chaîne, mais que ça en soit un qui utiliserait normalement l'Opacité de la source comme entrée. Pour empêcher tout résultat inattendu, vous avez besoin qu'il utilise l'alpha à partir de la sortie du filtre précédent, qui ne sera en général pas du tout pareil que l'Opacité de la source elle-même. Ces primitives Matrice de couleurs supplémentaires agissent comme des sorties alpha intermédiaires dans la chaîne. Ainsi, avec l'ajout de celles-ci, vous pouvez non seulement lier toute nouvelle primitive à l'image de sortie de chaque filtre, mais aussi à la sortie alpha. |
| |
| Pouvoir combiner des filtres de cette manière et les voir fonctionner comme prévu est impressionnant, mais cela peut conduire rapidement à de longues chaînes de filtrage compliquées et difficiles à gérer. Une meilleure approche est souvent d'appliquer un filtre, puis de grouper votre objet avant d'appliquer le filtre suivant au groupe. Vous pouvez répéter ceci autant de fois que nécessaire, créant un emboîtement toujours plus long de groupes, chacun ayant son propre filtre. Ceci rend certainement plus facile leur gestion dans le dialogue des filtres, car il y a beaucoup moins de confusion sur quel filtre vous êtes en train de modifier, particulièrement si vous les nommez bien. |
| |
| Une dernière chose à noter est que, dans la 0.91 (et dans la 0.92 qui vient de sortir !), beaucoup de filtres par défaut ont des points de suspension (trois points « … ») en fin d'appellation. Le choix de l'un d'eux ouvre une boîte de dialogue qui vous permet de saisir les paramètres du filtre et voir une prévisualisation immédiate. Bien sûr, c'est juste un raccourci pour régler les paramètres de chaque primitive de filtrage, mais c'est une addition bienvenue qui peut présenter les paramètres les plus importants de nombre de primitives, tout en cachant les autres options et réglages qui n'ont aucun intérêt dans la plupart des cas. Malheureusement, vous n'avez aucune possibilité de retrouver cette interface simplifiée une fois que vous l'avez renvoyée ; aussi, tout réglage ultérieur nécessitera de plonger à nouveau dans tous les détails sordides de chaque primitive. Certains filtres distincts venant de la 0.48 ont été aussi supprimés, puisque les nouveaux filtres paramétrés peuvent réaliser les mêmes effets, voire plus. Si vous ne trouvez pas votre vieux filtre favori dans les nouvelles versions, cherchez un nom voisin avec trois points de suspension et commencez à ajuster les paramètres ! |