I’ve looked at using clipping paths in Inkscape on several occasions in this series. This time, I’m going to hark all the way back to part 32, which appeared in FCM #92 in December 2014! In that article, I looked at some clipping techniques that could be applied to any type of object, but which were particularly suited to bitmap images. I used this familiar lady as my subject. The highest resolution version of this file weighs in at nearly 90MB, so it’s not the sort of thing you’d want to embed into an SVG file – especially not multiple times. One solution to this is to link the image into your Inkscape document rather than embed it, but there are occasions when embedding is the better option. The classic example of this is when you want to share the file with somebody else. Inkscape will also sometimes use absolute rather than relative paths when embedding images, which makes them less practical to move between systems. You can manually edit the paths to make them relative, which helps the situation a lot, but you’re still left with an Inkscape document that actually consists of two or more files that have to be moved as one. Embedding images solves all these problems, but this comes at the cost of a larger file, since it now contains a copy of the bitmap data in a text-based encoding that bloats it even further.

J'ai examiné l'utilisation des chemins de détourage dans Inkscape à plusieurs reprises dans cette série. Cette fois-ci, je vais revenir à la partie 32, qui a été publiée dans le FCM n° 92 en décembre 2014 ! Dans cet article, j'ai examiné quelques techniques de détourage qui pouvaient être appliquées à tout type d'objet, mais qui étaient particulièrement adaptées aux images bitmap. J'ai utilisé cette dame familière comme sujet.

La version dans la plus haute résolution de ce fichier pèse près de 90 Mo, ce n'est donc pas le genre d'objet que l'on souhaite intégrer dans un fichier SVG, surtout pas plusieurs fois. Une solution consiste à lier l'image à votre document Inkscape plutôt qu'à l'incorporer, mais il y a des cas où l'incorporation est la meilleure option. L'exemple classique est celui où vous souhaitez partager le fichier avec quelqu'un d'autre. Inkscape utilise parfois des chemins absolus plutôt que des chemins relatifs lors de l'incorporation d'images, ce qui les rend moins pratiques à déplacer d'un système à un autre. Vous pouvez modifier manuellement les chemins pour les rendre relatifs, ce qui améliore grandement la situation, mais vous vous retrouvez toujours avec un document Inkscape composé en fait de deux fichiers ou plus qui doivent être déplacés comme un seul. L'intégration d'images résout tous ces problèmes, mais au prix d'un fichier plus volumineux, puisqu'il contient désormais une copie des données bitmap dans un encodage textuel qui le gonfle encore plus.

The main subject of part 32 was therefore how to avoid embedding multiple copies of an image in your document when you need to reference different parts of it. The example provided was of an information leaflet that contains clipped images of La Giaconda’s head and hands. Despite appearances, the document in this screenshot contains only a single copy of the original image file. The secret is well known to Inkscape veterans, but is perhaps the single most useful tip I can provide when working with clipping paths (or masks): the content to be clipped is placed inside a group. That alone isn’t enough to get this effect, but it’s a prerequisite that makes for a good tip in general. With the clipping path applied to the group rather than the image itself, you can still double-click to enter the group, then move the image within it to change the point of focus. What you can also do is clone the image within the group, then cut it to the clipboard, exit the group, and paste it somewhere else (even on another layer). Because you’ve cloned the image itself, not the clipped group, you get a complete copy of the image that can be further manipulated. In this case, the requirement was to clip the clone to show only the hands, and position it beside the head.

Le sujet principal de la partie 32 était donc d'éviter d'incorporer plusieurs copies d'une image dans votre document lorsque vous devez faire référence à différentes parties de celle-ci. L'exemple fourni était celui d'une brochure d'information contenant des images découpées de la tête et des mains de La Joconde.

Malgré les apparences, le document de cette capture d'écran ne contient qu'une seule copie du fichier image original. Le secret est bien connu des vétérans d'Inkscape, mais c'est peut-être le conseil le plus utile que je puisse donner lorsque l'on travaille avec des chemins de détourage (ou des masques) : le contenu à détourer est placé à l'intérieur d'un groupe.

Ce n'est pas suffisant pour obtenir cet effet, mais c'est une condition préalable qui permet d'obtenir une bonne astuce en général. Le chemin de détourage étant appliqué au groupe plutôt qu'à l'image elle-même, vous pouvez toujours double-cliquer pour entrer dans le groupe, puis déplacer l'image à l'intérieur de celui-ci pour modifier le point de focalisation. Vous pouvez également cloner l'image dans le groupe, la couper dans le presse-papiers, quitter le groupe et la coller ailleurs (même sur un autre calque). Comme vous avez cloné l'image elle-même, et non le groupe coupé, vous obtenez une copie complète de l'image qui peut être manipulée ultérieurement. Dans ce cas, il s'agissait de découper le clone pour ne montrer que les mains et de le positionner à côté de la tête.

While we’re on the subject of clipping tips, another useful tip is to always convert your clipping shape into an actual path if it’s not already one. That means any rectangles, ellipses, stars, or regular polygons, that you want to use as a clipping path, should generally be converted using the Path > Object to Path menu entry before you apply the clip. The reason? It means that the path can be edited using the Node tool (F2) without unclipping first, which is not only a time-saver but also gives you a more representative view of how the final clipped object will look while you’re editing the path. Note that this capability can be toggled on and off when the Node tool is selected, by using this button in the toolbar; so make sure it’s enabled if necessary. This is all well and good, but this month’s column isn’t really about repeating some tips from a decade ago, no matter how useful they still are. Instead, I want to talk about a new feature in Inkscape 1.3 which might make the previous approach redundant… at least in some cases.

Puisque nous parlons d'astuces de détourage, une autre astuce utile consiste à toujours convertir votre forme de détourage en un chemin réel si ce n'est pas déjà le cas. Cela signifie que tous les rectangles, ellipses, étoiles ou polygones réguliers que vous souhaitez utiliser comme chemin de détourage doivent généralement être convertis à l'aide de l'entrée de menu Chemin > Objet en chemin avant d'appliquer le détourage. Pour quelle raison ? Cela signifie que le chemin peut être édité à l'aide de l'outil Nœud (F2) sans déselection préalable du détourage, ce qui permet non seulement de gagner du temps, mais aussi d'obtenir une vue plus représentative de l'aspect final de l'objet découpé lors de l'édition du chemin. Notez que cette fonctionnalité peut être activée ou désactivée lorsque l'outil Nœud est sélectionné, en utilisant ce bouton dans la barre d'outils ; assurez-vous donc qu'elle est activée si nécessaire.

Tout cela est bien beau, mais la rubrique de ce mois-ci n'a pas pour but de répéter des conseils datant d'une dizaine d'années, même s'ils sont toujours utiles. Au lieu de cela, je veux parler d'une nouvelle fonctionnalité dans Inkscape 1.3 qui pourrait rendre l'approche précédente redondante… au moins dans certains cas.

Looking back at the original requirement, the aim was to cut out two sections from the original image which could then be moved around and manipulated independently. Although the group-and-clone technique achieved this visually, it didn’t really “cut out” the sections at all. The final pieces were just clipped versions of the full-sized image – which becomes very obvious when you look at the bounding box when I select one. Obviously there’s at least one copy of the entire image embedded into the Inkscape document, even though the vast majority of the pixels don’t appear in the final output. All those invisible pixels still contribute to the file size. The most obvious way to avoid this is to edit the original image using a bitmap editor such as The GIMP or Krita, but that assumes you know how to use such programs to slice your image into individual parts, and save them as separate files. Wouldn’t it be nicer if Inkscape could take care of this for you, using the tools you already know? Well now it can.

Si l'on se réfère à la demande initiale, l'objectif était de découper deux sections de l'image originale, qui pourraient ensuite être déplacées et manipulées de manière indépendante. Bien que la technique du groupe et du clone ait permis d'atteindre cet objectif sur le plan visuel, elle n'a pas vraiment « découpé » les sections. Les morceaux finaux n'étaient que des versions coupées de l'image en taille réelle - ce qui devient très évident lorsque vous regardez la boîte de délimitation lorsque j'en sélectionne une.

Il est évident qu'il y a au moins une copie de l'image entière incorporée dans le document Inkscape, même si la grande majorité des pixels n'apparaissent pas dans le résultat final. Tous ces pixels invisibles contribuent toujours à la taille du fichier.

La façon la plus évidente d'éviter cela est de modifier l'image originale à l'aide d'un éditeur de bitmap tel que GIMP ou Krita, mais cela suppose que vous sachiez comment utiliser ces programmes pour découper votre image en parties individuelles et les enregistrer en tant que fichiers distincts. Ne serait-ce pas plus agréable si Inkscape pouvait s'en charger pour vous, en utilisant les outils que vous connaissez déjà ? Et bien maintenant, c'est possible.

To demonstrate I’m going to drag and drop my image into the Inkscape window. By default, you will be prompted as to whether you wish to link or embed the file, and I’ll choose to link it. If you don’t see that dialog then you likely clicked the “Don’t ask again” checkbox on a previous occasion. It doesn’t really matter too much whether the image is linked or embedded at this point (it will end up embedded by the end anyway), but I prefer to link it to avoid bloating the SVG file when I save incremental work-in-progress copies of the file. If you do want to reinstate this dialog, then open the Inkscape preferences (Edit > Preferences), select the “Imported Images” entry on the left, and ensure that you check the “Ask about linking and scaling when importing bitmap images” option. In this particular case, I want to use two sections of this image, but this technique is just as applicable to a single clipping path on a single image, should you want to remove the extraneous pixels that take up space in your SVG file. But, for two sections, I need two copies of the image: not clones this time, but real copies. Selecting my imported image and duplicating it (Ctrl-D) does the job. If you embedded the image, then saving at this point will result in a very large file, with the content of your image stored twice in the SVG file. If you linked the file there will be no such concerns, and your SVG file remains almost as svelte as ever.

Pour la démonstration, je vais glisser-déposer mon image dans la fenêtre d'Inkscape. Par défaut, vous serez invité à indiquer si vous souhaitez lier ou incorporer le fichier, et je choisirai de le lier.

Si vous ne voyez pas cette boîte de dialogue, c'est que vous avez probablement coché la case « Ne plus demander » à une autre occasion. Le fait que l'image soit liée ou incorporée n'a pas vraiment d'importance à ce stade (elle sera de toute façon incorporée à la fin), mais je préfère la lier pour éviter de gonfler le fichier SVG lorsque j'enregistre des copies incrémentielles du fichier en cours d'élaboration. Si vous souhaitez rétablir ce dialogue, ouvrez les préférences d'Inkscape (Edition > Préférences), sélectionnez l'entrée « Importation d'images » sur la gauche, et assurez-vous que vous cochez l'option « Demander pour le lien et la mise à l'échelle à chaque importation d'images matricielles ».

Dans ce cas particulier, je souhaite utiliser deux sections de cette image, mais cette technique est tout aussi applicable à un seul chemin de détourage sur une seule image, si vous souhaitez supprimer les pixels superflus qui prennent de la place dans votre fichier SVG. Mais pour deux sections, j'ai besoin de deux copies de l'image : pas des clones cette fois, mais de vraies copies. La sélection de mon image importée et sa duplication (Ctrl-D) font l'affaire. Si vous avez incorporé l'image, l'enregistrement à ce stade se traduira par un fichier très volumineux, le contenu de votre image étant stocké deux fois dans le fichier SVG. Si vous avez lié le fichier, il n'y aura pas de problème de ce genre, et votre fichier SVG restera presque aussi svelte que d'habitude.

Now I’ll create the clipping paths that mark out the sections of the images that I want to keep. The tip about converting any primitive objects to paths still applies. Here’s how my document looks so far with my clipping paths given a bright green stroke as is my usual preference. The next step is to select one image and its associated clipping path, and apply the clip. I usually right-click and select ‘Set Clip’ from the context menu, but Object > Clip > Set Clip does the same thing if right-clicking isn’t practical for you. Repeat for the other image and path. This is the time to get the shape, position and size of your clipping paths absolutely perfect. We didn’t group the image first, so the trick of double-clicking to move the focus won’t work here. But we can switch to the Node tool and move the entire clipping path if necessary – just select all the nodes (Ctrl-A will do the job) and you can drag the entire thing around. Of course you can also edit individual nodes to change the shape of the path. If you need to change its size, but not its shape, select all the nodes and use the ‘<’ and ‘>’ keys. ‘[‘ and ‘]’ will similarly rotate the path. Right, are you happy with the clipping? Make sure you are, because once you take the next step, Inkscape will throw away much of the original image, so there’s no turning back. (Okay, Ctrl-Z works to undo as usual, but what I mean is that this is a destructive change that can’t be undone once you’ve closed and reopened the file later).

Je vais maintenant créer les chemins de détourage qui délimitent les parties des images que je souhaite conserver. L'astuce consistant à convertir tous les objets primitifs en chemins s'applique toujours. Voici à quoi ressemble mon document jusqu'à présent, mes chemins de détourage étant marqués d'un trait vert vif, comme je le préfère habituellement.

L'étape suivante consiste à sélectionner une image et son chemin de détourage associé, et à appliquer le détourage. J'ai l'habitude de cliquer avec le bouton droit de la souris et de sélectionner « Définir une découpe » dans le menu contextuel, mais Objet > Découpe > Définir une découpe fait la même chose si vous ne pouvez pas cliquer avec le bouton droit de la souris. Répétez l'opération pour l'autre image et l'autre chemin.

C'est le moment de parfaire la forme, la position et la taille de vos chemins de détourage. Nous n'avons pas groupé l'image en premier, donc l'astuce consistant à double-cliquer pour déplacer le focus ne fonctionnera pas ici. Mais nous pouvons passer à l'outil Nœud et déplacer l'ensemble du chemin de détourage si nécessaire - il suffit de sélectionner tous les nœuds (Ctrl-A fait l'affaire) et de faire glisser l'ensemble. Bien entendu, vous pouvez également modifier des nœuds individuels pour changer la forme du chemin. Si vous souhaitez modifier sa taille, mais pas sa forme, sélectionnez tous les nœuds et utilisez les touches « < » et « > ». Les touches « [ » et « ] » permettent également de faire pivoter le chemin.

Vous êtes satisfait de la découpe ? Assurez-vous que c'est le cas, car lorsque vous passerez à l'étape suivante, Inkscape supprimera une grande partie de l'image originale, et il n'y aura pas de retour en arrière possible. (D'accord, Ctrl-Z fonctionne pour annuler comme d'habitude, mais ce que je veux dire, c'est qu'il s'agit d'un changement destructif qui ne peut pas être annulé une fois que vous avez fermé le fichier et que vous le rouvrez ensuite.)

Right-click on one of the clipped images and you should find a new entry in the context menu: “Crop Image to Clip”. Select that, and Inkscape will throw away the hidden pixels… sort of. The reason for that caveat is that there aren’t any widely used bitmap formats that support non-rectangular images, so in the case of a non-rectangular clipping path, you’ll still find that some hidden pixels remain (you can remove the clip to see them). But for all practical purposes, your image has been reduced to just the clipped area, even if a few extraneous pixels are technically still present in the corners. Now it would be a big problem if Inkscape clipped a linked image in this way. You wouldn’t want Inkscape to destructively modify your original image. What happens if that same image is linked into another document, perhaps in a completely different application? For that reason, Inkscape embeds the destructively edited image file if it was originally linked. In the case of our example document, therefore, this means we’ve embedded two small images – one of the head and one of the hands – but the combined size of those two pictures is still likely to be significantly less than our single embedded file using the previous approach.

Cliquez avec le bouton droit de la souris sur l'une des images découpées et vous devriez trouver une nouvelle entrée dans le menu contextuel : « Découper l'image ». Sélectionnez cette option et Inkscape éliminera les pixels cachés… en quelque sorte. La raison de cette mise en garde est qu'il n'existe pas de format bitmap largement utilisé qui prenne en charge les images non rectangulaires, de sorte que, dans le cas d'un chemin de découpage non rectangulaire, vous constaterez toujours que certains pixels cachés subsistent (vous pouvez supprimer le détourage pour les voir). Mais à toutes fins utiles, votre image a été réduite à la seule zone découpée, même si, techniquement, quelques pixels superflus sont encore présents dans les coins.

Ce serait un gros problème si Inkscape coupait une image liée de cette manière. Vous ne voudriez pas qu'Inkscape modifie votre image originale de manière destructive. Que se passerait-il si cette même image était liée à un autre document, peut-être dans une application complètement différente ? Pour cette raison, Inkscape incorpore le fichier image modifié de manière destructive s'il a été lié à l'origine. Dans le cas de notre document d'exemple, cela signifie que nous avons incorporé deux petites images - l'une de la tête et l'autre des mains - mais la taille combinée de ces deux images sera probablement bien inférieure à celle de notre fichier unique incorporé en utilisant l'approche précédente.

Our final cropped and clipped images can now be positioned and manipulated as normal, with the advantage that the bounding boxes look a lot more sensible. This new feature will be useful in a lot of cases where users want to use Inkscape to clip or crop bitmap images, but it’s not a panacea, and needs to be used with consideration for its merits and its drawbacks. Where your clipping path encompasses most of the image – just removing a small amount from around the edges – it’s probably not worth using this technique. The savings in file size will be minimal, and the destructive nature of the editing means you’ll lose some ability to tweak and refine your clipping path or image position later on. The example I used here does make sense… but if we’d wanted larger areas, or boxes that overlap the same part of the original image, the file size might not actually get much smaller. Each embedded cropped image carries some overhead, so it’s even possible that taking multiple views in this way could result in a larger SVG file than if the entire original image was just embedded once. The feature itself is not very discoverable. You have to have already applied a clip to an image directly (not an image in a group), and only then does it appear in the context menu. Why can’t we have a “Crop and clip” context menu entry that does both steps as one?

Nos images finales rognées et coupées peuvent maintenant être positionnées et manipulées normalement, avec l'avantage que les boîtes de délimitation ont l'air beaucoup plus raisonnables.

Cette nouvelle fonctionnalité sera utile dans de nombreux cas où les utilisateurs souhaitent utiliser Inkscape pour découper ou recadrer des images bitmap, mais elle n'est pas une panacée et doit être utilisée en tenant compte de ses mérites et de ses inconvénients. Lorsque votre chemin de détourage englobe la majeure partie de l'image - en supprimant juste une petite partie des bords - il n'est probablement pas utile d'utiliser cette technique. Les économies réalisées en termes de taille de fichier seront minimes, et la nature destructive de l'édition signifie que vous perdrez la possibilité d'ajuster et d'affiner votre chemin de détourage ou la position de l'image par la suite.

L'exemple que j'ai utilisé ici a du sens… mais si nous avions voulu des zones plus grandes, ou des boîtes qui chevauchent la même partie de l'image originale, la taille du fichier ne serait pas beaucoup plus petite. Chaque image recadrée incorporée entraîne une certaine surcharge, de sorte qu'il est même possible que le fait de prendre plusieurs vues de cette manière aboutisse à un fichier SVG plus volumineux que si l'ensemble de l'image originale était incorporée une seule fois.

La fonction elle-même n'est pas très facile à découvrir. Il faut avoir déjà appliqué un détourage à une image directement (pas à une image dans un groupe), et ce n'est qu'alors qu'elle apparaît dans le menu contextuel. Pourquoi ne pas avoir une entrée de menu contextuel « Recadrer et découper » qui effectue les deux étapes en une seule ?

It’s also worth noting that this applies to only bitmap images. For simple vector shapes, the equivalent method is to use the Boolean operations, but for complex groups of objects, there is no easy equivalent that will cut away the parts of objects that are not visible due to clipping. While the file size argument is less pressing with vector objects, there are times when it would be nice to be able to ‘tidy up’ an image in a similar way. I suspect there are too many edge cases for that to be an easy thing for the developers to achieve, though. Overall I think this is a very useful addition to Inkscape’s arsenal. It’s just a shame that the lack of discoverability means that the people who will most benefit from it – the new users who also aren’t comfortable with bitmap editors – are those most likely to miss it. If you know someone like that, point them in the direction of this article. Image Credits “La Gioconda” (aka “Mona Lisa”) by Leonardo da Vinci http://en.wikipedia.org/wiki/File:Mona_Lisa,_by_Leonardo_da_Vinci,_from_C2RMF_retouched.jpg

Il convient également de noter que cela ne s'applique qu'aux images bitmap. Pour les formes vectorielles simples, la méthode équivalente consiste à utiliser les opérations booléennes, mais pour les groupes d'objets complexes, il n'existe pas d'équivalent simple qui permette de couper les parties d'objets qui ne sont pas visibles en raison du détourage. Bien que l'argument de la taille du fichier soit moins pressant avec les objets vectoriels, il y a des moments où il serait agréable de pouvoir « mettre de l'ordre » dans une image d'une manière similaire. Je pense qu'il y a trop de cas particuliers pour que cela soit facile à réaliser pour les développeurs.

Dans l'ensemble, je pense qu'il s'agit d'un ajout très utile à l'arsenal d'Inkscape. Il est juste dommage que le manque de visibilité signifie que les personnes qui en bénéficieront le plus - les nouveaux utilisateurs qui ne sont pas à l'aise avec les éditeurs bitmap - sont celles qui risquent le plus de passer à côté. Si vous connaissez quelqu'un dans ce cas, indiquez-lui la direction de cet article.

Crédits d'image

« La Gioconda » (alias “Mona Lisa”) de Léonard de Vinci http://en.wikipedia.org/wiki/File:Mona_Lisa,_by_Leonardo_da_Vinci,_from_C2RMF_retouched.jpg