Outils pour utilisateurs

Outils du site


issue170:inkscape

I’m starting to think that the Inkscape developers have deliberately synchronised their calendar with the Full Circle Magazine article deadlines to ensure that they announce new releases just a few days after I’ve submitted this column, leaving the News pages to break the story. As you may have noticed in last month’s issue, Inkscape 1.1 has been released, and is now available for download from the Inkscape website. For Linux users there are versions in AppImage and snap format, as well as an official PPA repository, which may be preferable to Ubuntu users in particular. The 1.1 release does bring a few welcome additions; however, I’m still working my way through the changes introduced with 1.0.x in this column, so the very latest changes will have to wait. This month will be all about the improved UI in the Trace Bitmap dialog.

Je commence à penser que les développeurs d'Inkscape ont délibérément synchronisé leur calendrier avec les dates limites des articles du magazine Full Circle, afin de s'assurer qu'ils annoncent les nouvelles versions quelques jours seulement après que j'ai soumis cette colonne, laissant les pages des Actus annoncer la nouvelle. Comme vous l'avez peut-être remarqué dans le numéro du mois dernier, Inkscape 1.1 a été publié et peut-être téléchargé depuis le site Web d'Inkscape. Pour les utilisateurs de Linux, il existe des versions au format AppImage et snap, ainsi qu'un dépôt PPA officiel, qui peut être préférable pour les utilisateurs d'Ubuntu en particulier.

La version 1.1 apporte quelques ajouts bienvenus ; cependant, je suis toujours en train de travailler sur les changements introduits avec la 1.0.x dans cet article ; donc, les tout derniers changements devront attendre. Ce mois-ci, nous parlerons de l'amélioration de l'interface utilisateur de la boîte de dialogue Trace Bitmap.

Trace Bitmap Dialog This dialog has seen some substantial changes in the layout of its options, partly to avoid some confusion that could easily happen with the previous UI, and partly to integrate some tracing modes, one of which I’ll describe later in this article, with the others being held over until next month. Let’s deal with the placement of the long-standing features first of all, by taking a look at how the dialog appeared when I first introduced this feature, back in part 19 of this series: Here we can see the mis-titled “Move” tab (later versions corrected this to “Mode”), showing the two main operating modes, “Single scan” and “Multiple scana” (which was probably intended to be “Multiple scans”). Each mode then offers different approaches to tracing, as a set of radio buttons that actually encompasses both parts of the dialog. The result is that only a single tracing method can be selected at a time, even if the design of the dialog makes it initially appear as though each mode can have a different method selected.

Boîte de dialogue Vectoriser un objet matriciel

Cette boîte de dialogue a subi quelques changements substantiels dans la disposition de ses options, en partie pour éviter une certaine confusion qui pouvait facilement se produire avec l'ancienne interface utilisateur, et en partie pour intégrer certains modes de vectorisation, dont l'un sera décrit plus loin dans cet article, les autres étant reportés au mois prochain. Commençons par l'emplacement des fonctionnalités de longue date, en regardant comment la boîte de dialogue apparaissait lorsque j'ai présenté cette fonctionnalité pour la première fois, dans la partie 19 de cette série :

Ici, nous pouvons voir l'onglet « Move » mal intitulé (les versions ultérieures l'ont corrigé en « Mode »), montrant les deux principaux modes de fonctionnement, « Single scan » et « Multiple scana » (qui était probablement destiné à être « Multiple scans »). Chaque mode propose ensuite différentes approches du traçage, sous la forme d'un ensemble de boutons radio qui englobent en fait les deux parties de la boîte de dialogue. Le résultat est qu'une seule méthode de traçage peut être sélectionnée à la fois, même si la conception de la boîte de dialogue donne initialement l'impression qu'une méthode différente peut être sélectionnée pour chaque mode.

Within each mode area there are also various other parameters that affect the tracing algorithm. The layout makes it somewhat unclear whether these parameters all apply to every tracing method, or whether some are tied to particular algorithms (answer: it’s the latter). Finally there are options that affect all methods and modes, in the “Options” tab, plus a lone “SIOX foreground selection” option that I described in part 20 of this series, but which I summarised with “you would be better off separating out the foreground using The GIMP (which has its own, more interactive, implementation of the SIOX algorithm) and then tracing the result.”, here’s what I had to say about this dialog in part 19: “This is one dialog in Inkscape that could really do with a little UI love. It's cramped, unintuitive, contains typos, and the spinboxes don't have the nice context pop-ups of most similar controls in Inkscape.” Although the spinboxes still don’t have any context-sensitive pop-ups, I’m pleased to say that all my other concerns have finally been addressed, with this much cleaner dialog in 1.0. I will start with a small complaint. It’s a general Inkscape issue, but is particularly obvious in this dialog. As I prefer floating dialogs in windows over docked dialogs at the side of the canvas, I often have several windows, each of which contains only a single dialog inside it – as in this image. In that situation, I think it would be nicer for Inkscape to collapse the tab bar down to a smaller “grab handle” that could be used to re-dock the dialog, rather than showing a lone tab in a bar that stretches across the whole dialog, wasting quite a bit of space. The window title already tells me this is the Trace Bitmap dialog; I don’t think I need that information on a tab as well. And with this particular dialog, the first tab within the dialog also bears the same name, making the dialog tab seem doubly redundant, and potentially confusing.

Dans chaque zone de mode, on trouve également divers autres paramètres qui affectent l'algorithme de traçage. La mise en page ne permet pas de savoir si ces paramètres s'appliquent tous à toutes les méthodes de traçage ou si certains sont liés à des algorithmes particuliers (réponse : c'est la deuxième). Enfin, il y a des options qui affectent toutes les méthodes et tous les modes, dans l'onglet « Options », plus une option isolée de « Sélection du premier plan avec SIOX » que j'ai décrite dans la partie 20 de cette série (FCM n° 80), mais que j'ai résumée par « vous feriez mieux de faire ressortir le premier plan à l'aide de GIMP (qui a son propre outil, plus interactif, de mise en œuvre de l'algorithme de SIOX), puis de vectoriser le résultat. ». Voici ce que j'avais à dire à propos de cette boîte de dialogue dans la partie 19 (FCM n° 79) : « C'est une boîte de dialogue dans Inkscape qui pourrait vraiment être bien si l'IU était plus agréable. Elle est exiguë, pas intuitive, elle contient des fautes de frappe, et les roulettes n'ont pas les beaux menus contextuels de la plupart des contrôles similaires dans Inkscape. » Bien que les spinboxes (sélections rotatives) n'aient toujours pas de fenêtres contextuelles, je suis heureux de dire que toutes mes autres préoccupations ont finalement été prises en compte, avec ce dialogue beaucoup plus propre dans la 1.0.

Je vais commencer par une petite plainte. C'est un problème général d'Inkscape, mais il est particulièrement évident dans cette boîte de dialogue. Comme je préfère les dialogues flottants dans les fenêtres aux dialogues ancrés sur le côté du canevas, j'ai souvent plusieurs fenêtres, dont chacune ne contient qu'un seul dialogue, comme dans cette image. Dans cette situation, je pense qu'il serait plus agréable pour Inkscape de réduire la barre d'onglets à une « poignée » plus petite qui pourrait être utilisée pour raccrocher la boîte de dialogue, plutôt que d'afficher un seul onglet dans une barre qui s'étend sur toute la boîte de dialogue, ce qui fait perdre beaucoup d'espace. Le titre de la fenêtre m'indique déjà qu'il s'agit de la boîte de dialogue Vectoriser un objet matriciel ; je ne pense pas avoir besoin de cette information dupliquée sur un onglet. De plus, avec cette boîte de dialogue particulière, le premier onglet de la boîte de dialogue porte également le même nom, ce qui rend l'onglet de la boîte de dialogue doublement redondant et potentiellement déroutant.

Moving on to the real content of the dialog, you can see that the tabs along the top have been completely replaced. The old “Mode” tab is now “Trace bitmap”, and within that section are two large buttons for switching between the Single scan and Multiple scans modes. Gone are the radio buttons for selecting the tracing method, replaced instead with a single pop-up which greatly reduces the visual clutter. The parameters below change according to the selection in this pop-up, avoiding any confusion about which fields apply to which methods. Finally, the global parameters that formerly lived in the “Options” tab have been moved to a common section at the bottom of this dialog, making them far more obvious. This move also makes it clear that these options apply to the “Trace bitmap” modes, but not to the “Pixel art” mode, which has its own tab entirely. Aside from the UI changes, the operation of this part of the dialog remains unchanged from previous versions – apart from the addition of some new tracing modes that I will look at next month. For details on how to use the older modes, therefore, parts 19 and 20 of this series still apply.

En ce qui concerne le contenu réel de la boîte de dialogue, vous pouvez constater que les onglets situés en haut de la page ont été complètement remplacés. L'ancien onglet « Mode » est maintenant « Vectoriser un objet matriciel », et dans cette section se trouvent deux gros boutons pour basculer entre les modes Une seule passe et Plusieurs passes. Les boutons radio pour sélectionner la méthode de traçage ont disparu, remplacés par une seule fenêtre contextuelle qui réduit considérablement l'encombrement visuel. Les paramètres ci-dessous changent en fonction de la sélection effectuée dans cette fenêtre contextuelle, ce qui évite toute confusion quant aux champs qui s'appliquent à telle ou telle méthode.

Enfin, les paramètres globaux qui se trouvaient auparavant dans l'onglet « Options » ont été déplacés dans une section commune au bas de cette boîte de dialogue, ce qui les rend beaucoup plus évidents. Ce déplacement permet également de préciser que ces options s'appliquent aux modes « Vectoriser un objet matriciel », mais pas au mode « Pixel art », qui dispose de son propre onglet.

En dehors des modifications apportées à l'interface utilisateur, le fonctionnement de cette partie de la boîte de dialogue reste inchangé par rapport aux versions précédentes, à l'exception de l'ajout de nouveaux modes de vectorisation que j'examinerai le mois prochain. Pour les détails sur la façon d'utiliser les anciens modes, les parties 19 et 20 de cette série restent donc valables.

Trace Pixel Art The “Pixel art” mode isn’t actually a new thing – it first appeared in version 0.91 – but I haven’t covered it in this series before. Back in the 0.9x days, it had its own dialog, opened via an entry in the Path menu. In 1.0, the UI is essentially unchanged, save for an additional checkbox labelled “Optimise”. But it’s now accessed via the “Pixel art” tab of the Trace Bitmap dialog, rather than being a wholly separate dialog of its own. This means it also shares the image preview pane of the Trace Bitmap dialog, although it’s largely useless here, showing only a black-and-white picture which bears little resemblance to the traced image you’ll probably end up with. As the name suggests, this mode is intended for tracing pixel-based graphics, such as icons, emojis, or other small bitmap images. When scaling up a small image, you will often find that the interpolation algorithms that are commonly used can result in a blurry appearance, as intermediate colors are used for the new pixels that need to be created, losing any crisp transitions that are an essential part of the design. The Pixel Art tracer attempts to produce vector elements that will reproduce the original image, but which can be scaled without introducing a blurred or softened result. How effective it is at this will depend largely on the source image, and the result you’re looking for.

Pixel Art

Le mode « Pixel art » n'est pas vraiment nouveau - il est apparu pour la première fois dans la version 0.91, mais je ne l'ai pas encore abordé dans cette série. À l'époque de la 0.9x, il disposait de sa propre boîte de dialogue, ouverte via une entrée du menu Chemin.

Dans la version 1.0, l'interface utilisateur est essentiellement inchangée, à l'exception d'une case à cocher supplémentaire appelée « Optimisé ». Mais on y accède désormais via l'onglet « Pixel art » de la boîte de dialogue Vectoriser un objet matriciel, au lieu de disposer d'une boîte de dialogue entièrement distincte. Cela signifie qu'il partage également le panneau de prévisualisation de l'image de la boîte de dialogue Vectoriser un objet matriciel, bien que ce soit largement inutile ici, en n'affichant qu'une image en noir et blanc qui ressemble peu à l'image vectorisée que vous obtiendrez probablement.

Comme son nom l'indique, ce mode est destiné à la vectorisation d'éléments graphiques basés sur des pixels, tels que des icônes, des emojis ou d'autres petites images bitmap. Lors de la mise à l'échelle d'une petite image, vous constaterez souvent que les algorithmes d'interpolation couramment utilisés peuvent donner une apparence floue, car des couleurs intermédiaires sont utilisées pour les nouveaux pixels qui doivent être créés, perdant ainsi les transitions nettes qui sont une partie essentielle de la conception. Le vectoriseur de Pixel Art tente de produire des éléments vectoriels qui reproduisent l'image originale, mais qui peuvent être mis à l'échelle sans donner un résultat flou ou adouci. Son efficacité dépendra largement de l'image source et du résultat que vous recherchez.

As an example, I decided to trace the 16px × 16px image used as a “favicon” on the Full Circle Magazine website. It’s a tiny representation of the orange circle with white swirls that forms the logo of this magazine. Let’s see what the preview pane in the dialog makes of it. The various spinboxes in the Heuristics section are a mystery to me. They each have tooltips… which do nothing to clarify their purpose. They refer to parameters in the tracing algorithm, but the original research paper that is linked from the Inkscape 0.91 release notes is no longer available, nor have I been able to find it elsewhere. When faced with this situation, I resort to a tried-and-trusted technique to try to work out what effect they have: I first traced images using the defaults, then I cranked the values up to their maximum levels (10, 20, 8 and 10), and traced the same images. The results, in every case that I tried, were so close as to be irrelevant. The “optimize” checkbox at least has an understandable tooltip. It claims that enabling it will try to optimize paths by joining adjacent Bézier curve segments. With my test images, however, it served to only cut off the corners of some paths, resulting in holes within the design.

À titre d'exemple, j'ai décidé de vectoriser l'image 16px × 16px utilisée comme « favicon » sur le site Web du magazine Full Circle. Il s'agit d'une représentation minuscule du cercle orange avec des tourbillons blancs qui constitue le logo de ce magazine. Voyons ce qu'en fait le volet d'aperçu de la boîte de dialogue.

Les différents champs à compteur de la section Heuristique sont un mystère pour moi. Ils ont tous des infobulles… qui ne font rien pour clarifier leur but. Elles font référence à des paramètres de l'algorithme de vectorisation, mais le document de recherche original dont le lien figure dans les notes de mise à jour d'Inkscape 0.91 n'est plus disponible, et je n'ai pas été en mesure de le trouver ailleurs. Face à cette situation, j'ai eu recours à une technique éprouvée pour essayer de déterminer l'effet de ces paramètres : j'ai d'abord vectorisé des images en utilisant les valeurs par défaut, puis j'ai augmenté les valeurs jusqu'à leur niveau maximal (10, 20, 8 et 10) et j'ai tracé les mêmes images. Les résultats, dans tous les cas que j'ai essayés, étaient si proches qu'ils n'étaient pas pertinents.

La case à cocher « optimisé » a au moins une info-bulle compréhensible. Il y est affirmé que si elle est activée, elle essaiera d'optimiser les chemins en joignant les segments adjacents de la courbe de Bézier. Avec mes images de test, cependant, elle n'a servi qu'à couper les coins de certains chemins, ce qui a entraîné des trous dans le dessin.

In the Output section, you can decide between producing shapes that have entirely straight edges (Voronoi), or which may include curves (B-splines). When tracing very small images, this is a matter of personal taste. With larger images – even those of only a few hundred pixels – the Voronoi output can take a lot longer, and may not produce the result you expect. Let’s look at the result of playing with some of these options. In this screenshot, the original 16px square favicon is at the top-left. To the right of it you can see how it looks when scaled directly in Inkscape – first using the “optimize for quality” mode, and secondly with the “optimize for speed” mode (remember, the selected mode can be changed in the Object Properties dialog). In both cases, however, the end result is still a bitmap image, so its individual parts can’t be manipulated as vectors. The lower part of the image shows the result of the tracing algorithm, with the B-spline versions on the left, and the Voronoi versions on the right. In each case, there’s a column showing the results when the parameters are left at their defaults, and one showing the results when all the parameters are set to their maximum values. The bottom row shows the result of enabling the Optimize checkbox. In most cases I suspect that creating an un-optimized B-spline using the default values will be good enough.

Dans la section Résultat, vous pouvez choisir de produire des formes dont les bords sont entièrement droits (Voronoï) ou qui peuvent inclure des courbes (B-splines). Pour la vectorisation de très petites images, c'est une question de goût personnel. Avec des images plus grandes, même celles de quelques centaines de pixels seulement, la sortie Motif de Voronoï peut prendre beaucoup plus de temps et ne pas donner le résultat escompté.

Voyons le résultat de l'utilisation de certaines de ces options. Dans cette capture d'écran, la favicon carrée originale de 16px se trouve en haut à gauche. À sa droite, vous pouvez voir comment elle se présente lorsqu'elle est mise à l'échelle directement dans Inkscape, d'abord en utilisant le mode « optimiser pour la qualité », puis avec le mode « optimiser pour la vitesse » (rappelez-vous que le mode sélectionné peut être modifié dans la boîte de dialogue Propriétés de l'objet). Dans les deux cas, cependant, le résultat final est toujours une image bitmap, et ses différentes parties ne peuvent pas être manipulées comme des vecteurs.

La partie basse de l'image montre le résultat de l'algorithme de vectorisation, avec les versions B-spline à gauche, et les versions Voronoï à droite. Dans chaque cas, il y a une colonne montrant les résultats lorsque les paramètres sont laissés à leurs valeurs par défaut, et une autre montrant les résultats lorsque tous les paramètres sont réglés à leurs valeurs maximales. La ligne du bas montre le résultat de l'activation de la case à cocher Optimisé. Dans la plupart des cas, je pense que la création d'une courbe B-spline non optimisée en utilisant les valeurs par défaut sera suffisante.

The close similarity between all the results may simply be because my choice of test images doesn’t really do justice to the algorithm, but it was actually rather difficult to find genuinely small pixel images. Many examples of “pixel art” that you might find online have the appearance of being pixellated, while actually being made up of a much larger collection of pixels. For example, here’s one I tried from Wikimedia Commons: A count of the obvious “pixels” in the computer image on the left suggests that part is only 31px wide. Except that it’s actually 248 pixels, with each apparent pixel in the image actually consisting of an 8×8 square of pixels. Nevertheless, we should be able to trace that with Inkscape, right? Here’s the original image on the left, followed by B-spline and Voronoi versions after tracing. In both cases, the tracing took a lot longer than with the favicon, with the Voronoi version taking the longest by a clear margin. And why does it look so faint? A close-up view of the result, with some paths selected, shows us a bit more of what’s happening. The top-left shows shapes from the B-spline tracing. The black pixels that form a diagonal edge in the original image have been turned into a single path, with far more nodes than necessary, as a result of the 8×8 pixel blocks. The resultant trace consists of a group of 69 individual objects, each of them an overly defined path.

La grande similitude entre tous ces résultats est peut-être simplement due au fait que mon choix d'images de test ne rend pas vraiment justice à l'algorithme, mais il était en fait assez difficile de trouver des images avec des pixels véritablement petits. De nombreux exemples de « pixel art » que vous pouvez trouver en ligne ont l'apparence d'être pixellisés, alors qu'ils sont en fait constitués d'une collection de pixels beaucoup plus grande. Par exemple, en voici un que j'ai essayé à partir de Wikimedia Commons :

Un comptage des « pixels » évidents dans l'image informatique de gauche suggère que cette partie ne fait que 31 px de large. Sauf qu'il s'agit en fait de 248 pixels, chaque pixel visible dans l'image étant en réalité constitué d'un carré de pixels 8 × 8. Néanmoins, nous devrions être en mesure de la vectoriser avec Inkscape, non ? Voici l'image originale à gauche, suivie des versions B-spline et Voronoï après vectorisation.

Dans les deux cas, le traçage a pris beaucoup plus de temps qu'avec la favicon, la version Voronoï étant la plus longue, et de loin. Et pourquoi cela semble-t-il si ténu ? Une vue rapprochée du résultat, avec quelques chemins sélectionnés, nous montre un peu plus de ce qui se passe.

En haut à gauche, on voit les formes de la vectorisation avec B-spline. Les pixels noirs qui forment un bord diagonal dans l'image originale ont été transformés en un seul chemin, avec beaucoup plus de nœuds que nécessaire, en raison des blocs de 8 × 8 pixels. La trace résultante est constituée d'un groupe de 69 objets individuels, chacun d'entre eux étant sur un chemin défini.

The Voronoi mode fares even worse. Here the individual pixels of the 8×8 blocks have been converted into separate paths, resulting in a group of 63,000 objects! That’s quite a result from what was clearly designed as a 32px × 32px icon (1,024 pixels in total). It also explains why it looks faint: the large number of closely spaced objects plays havoc with Inkscape’s anti-aliasing algorithm, as it tries to resolve the individual edges of the shapes. Trying to convert something as small as an icon into a vector graphic will always be a trade-off that will work better for some images than others. The lesson from this is that the pixel art mode is not really designed for “pixel-style art”, but specifically for very low resolution pixel images. If your source material is more than about 48px in either dimension, you probably need to consider scaling it down in a bitmap editor before throwing it at this algorithm. As great as it is to have advanced algorithms in Inkscape, what I would really like to see in terms of tracing pixel art is a mode that simply takes each individual pixel and converts it to an Inkscape square, with an option to merge adjacent squares of the same color into a path. You can kind-of achieve this with the Tiled Clones dialog, if you know what you’re doing, but adding that as an option to the Trace Bitmap dialog would likely cover most people’s pixel tracing requirements, without the need for opaque parameters and complex results.

Le mode Voronoï est encore pire. Ici, les pixels individuels des blocs 8 × 8 ont été convertis en chemins séparés, ce qui donne un groupe de 63 000 objets ! C'est un sacré résultat pour une icône clairement conçue comme une icône de 32 px × 32 px (1 024 pixels au total). Cela explique également pourquoi l'icône semble affadie : le grand nombre d'objets très rapprochés perturbe l'algorithme d'anticrénelage d'Inkscape, qui tente de résoudre les bords individuels des formes.

Essayer de convertir quelque chose d'aussi petit qu'une icône en une image vectorielle sera toujours un compromis qui fonctionnera mieux pour certaines images que pour d'autres. La leçon à en tirer est que le mode pixel art n'est pas vraiment conçu pour « l'art de style pixel », mais spécifiquement pour les images pixel à très basse résolution. Si votre matériel source mesure plus de 48 px dans l'une ou l'autre dimension, vous devriez probablement envisager de le réduire dans un éditeur de bitmap avant de le soumettre à cet algorithme.

Même si c'est génial d'avoir des algorithmes avancés dans Inkscape, ce que j'aimerais vraiment voir en termes de vectorisation de pixel art est un mode qui prend simplement chaque pixel individuel et le convertit en un carré Inkscape, avec une option pour fusionner les carrés adjacents de la même couleur en un chemin. Vous pouvez plus ou moins réaliser cela avec la boîte de dialogue du Pavage des clones, si vous savez ce que vous faites, mais ajouter cette option à la boîte de dialogue Vectoriser un objet matriciel couvrirait probablement les besoins de la plupart des gens en matière de vectorisation de pixels, sans avoir besoin de paramètres opaques et de résultats complexes.

issue170/inkscape.txt · Dernière modification : 2021/06/30 15:43 de andre_domenech