I want to turn a photo in a engraving style picture, like for example this one using GIMP and, if possible, then make an SVG out of it with Inkscape.
Can you recommend any filters/tools/plugins/tutorials for this?
Your example image has also a grey background pattern, which is not a part of the engraved hat. Obviously the hat is the interesting part.
I assume you are not going to engrave onscreen (=draw black lines one by one until the image is ready). Also I assume that you do not want to trace BW images altough sometimes the result could be good enough. I assume you want to transfer semi-automatically BW photos and other greyscale images to line drawings, where
The engravers seem to have four major line usage principles:
the outlines of the shapes - often drawed, but they can be also left out if the forms are otherwise well recognizable
hatches where the varying line densities simulates the greyshades. A variant exists: The line spacing can stay comfortably large, if a part of the lines have different direction (=crosshatching)
hatches where the line density is constant, but the varying line widths simulate the greyshades. A variant of this is to use dashed lines
Geodetic lines (not common engraver's word, used here because there's no better available jus now) which make a greyshade and in addition try to show the curvature of the surface
Here the line usage forms are 1,3, and 4. Obviously drawing plenty of geodetic lines has been a good alternative to having much more simulated greyshades. There are so few greyshades that without geodetic lines the surface forms couldnt be recognized.
Here the line densities vary and several areas also have crosshatches. Dashed lines are used to give lighter appearance for quite wide lines. Geodetic lines are used. Many shapes have no outline. Making this definitely has been much more work than example 1.
How to make fake engravings from photos using only GIMP and Inkscape, no Photoshop nor Illustrator?
The easy answer: "Adjust your photo to have a good contrast. Then at first try to trace your photo to BW and if the result is not good enough, get a fake engraving plugin"
The interesting way: "Adjust your photo and create halftoning with line patterns"
The number of available greyshades is much less than the normal 256. This is because the halftoning hatches must be quite dense to appear as halftones. There are only limited amount of different possible line widths or line spacings. For example if we have one pixel wide black lines and we vary the space between the lines 0...7 pixels, we have only 8 greyshades + full white - Not very much variation + the step from full black to the next shade 50% grey is quite large.
If we vary the line width 0...8 pixels, we have more flat distribution of possible greyshades.
Using plenty of different crosshatches or dashed lines we get more possible greyshades, but we also approach the normal raster halftoning used in printing. That's not any more like an engraving.
So, we must have an image which is recognizable having only few greyshades. One can test, how good his image is for fake engravings by posterizing it to few greyshades.
An example (done in Photoshop, but is as possible in GIMP):
The left image is an adjusted photo, the right one is the same posterized to 8 levels. The parts are well separated in the posterized version and even the roundness is obvious, so this photo can stay well recognizable when halftoned with hatches that allow 8 greyshades or more evenly distributed from black to white.
The same image posterized to 4 greyshades including black and white:
This shows that having only 4 greyshades from black to white, the fake engraving would need outlines and geodetic lines.
The outlines are possible to be made in 3 ways
Edge detecting and tracing easily generate much unwanted outlines, too. They must be deleted manually. Drawing the outlines with the pen tool can sound unpleasant, but if the pen is familiar, drawing can be less work than deleting the unwanted outlines.
Here's an example of traced outlines. The background was removed in GIMP by manually drawing a clipping path (=actually defined the main outline). The image got heavy selective (=high contrast edge saving) blur to reduce the details. Image was traced to 7 greyshades and the path nodes were reduced by Path > Simplify. Here's two versions of the result: One without fills and the other with the black fill remaining
This is radically simpler than what one would get without removing the background, filtering and reducing the path nodes. It's still a mess and doesn't have apparent curvature. A good drawer could (after deleting all small clutter) add geodetic lines - maybe leaving the full black areas filled - and transform this to a good fake engraving. Probably he needs only 2 greyshade hatches + full black and white. Unfortunately this is impossible to do automatically - so where he would need a computer at all?
Geodetic lines are difficult. One must know the 3D surface to be able to draw them.Inkscape and GIMP are both too dumb to see the 3D form from an image automatically. Without going to 3D the only option is to draw them manually. That needs very good drawing skills. In some easy cases the geodetic lines can be made with copying or using the Subpath Interpolating filter (Inkscape).
In sophisticated 3D software one probably can generate those lines onto the properly modelled surface and render them as seen in a 2D projection. I have not such software and no knowledge how to do it, if I had one. What they are in maths? Probably good visualization is possible with something simpler than the literal geodetic lines of the mathematical surface theory. I bet they can be cutting lines with a bunch of parallel planes. This is only guessing, because the math this complex exceeds my capablities.
Shading with hatch patterns can be made using 2 different principles:
The image is posterized or traced to greyshades. Different shades are separated. In addition there are prepared hatches for the different greyshades. The prepared hatch patterns are masked with the separated shaded areas. In inkscape greyshade tracing can be put to stack the different shades. Only ungrouping is needed to get them for masking. In GIMP one can make selection by color in the posterized image.
Simulating the old process used to make image printing surfaces in the film camera era. The original camera or repro copying machine had a raster in front of the film. The raster did not touch the film, so its shadow was blurred in the image. Very sharp development process generated different sized dots according the brightness. To apply this in fake engraving one needs an engraved looking line pattern. Blurring it and multiplying (= a layer blending mode) with the image the result is just like there had been a line raster in front of the film. Sharp development is replaced by tresholding.
Method 1 is probably the one used in fake engraving filters. The basic GIMP installation also has one (=Filter > Distortions > Engrave). The hatch patterns in GIMP are straight lines. One can select how many greyshades he wants (=black pixel line spacing in pixels). Our perry comes out from GIMP's "Engrave" like this:
Actually not at all bad. Unfortunately horizontal lines is the only hatch pattern available. They can interfere with the lines of the computer display. Lowering the resolution make the lines more sparse.
I have tested a very slight bending of the image before applying the fake engraving with lines. Then I bended the image back to get curved hatch lines. To do this succefully the "engraved" image should be resampled to much higher resolution because the one pixel accurate hatch lines otherwise suffer. I have not found an easily repeatable way to get curved engraving using GIMP's in-built filter.
There's also another hitch. Noise and too fine details in the image generates very dense width changes to the engraved lines. I would call it halftoning in halftoning or dithering. That's not realistic at all. One should filter the image smoother (but saving the sharp edges of the big forms) to reduce the details. The following image shows the effect of the simplifying:
The basic installation of GIMP actually hasn't a good form simplifier. The right image is treated in GIMP with Selective Blur and cycled via Inkscape where it was traced to 8 grey levels and the amount of path nodes was reduced applying Path > Simplify. Inkscape has fast bitmap renderer in Edit menu (=Make a Bitmap Copy). The result can be saved as PNG for GIMP.
Engraving the simplified version in GIMP gives a little surprising result. The fact that simplified image gave cleaner hatch lines is less obvious than the shift of the greyshades when doing the simplification. I am still unsure, what caused the slight (=not serious) level shift:
Only a high zoom shows the difference of the "engraved" lines:
Next I tried to do the fake engraving in Inkscape as "all vector". I already had a traced image where the number of greyshades = 8 and all greys are separate combined paths. The idea is to use those shapes as clipping masks for different hatch patterns. I drawed a curve that resembled a sinewave and tiled them with 1,6 millimeters vertical distances:
I had seven copies of the hatch pattern. The stroke widths were 0,2mm, 0,4mm , 0,6mm, 0,8mm, 1mm, 1,2mm and 1,4mm. Full white and full black do not need hatch patterns. I had made some tests and found large full black areas look out odd. So 1,4mm wide lines were used instead of black.
Setting the clipping masks for the hatches is straightforward. All hatches were combined paths and appeared as single objects in the Objects panel. The grayshade areas (after ungrouping) also were combined objects; one object/grayshade. They were selected onscreen with the mouse. The hatch patterns were aligned at the same place. They were easily selectable only in the Objects panel. I had renemed the hatches for easy selection as soon as they were prepared. This is the result:
Curved engraved lines look out fine when printed onto paper, but they interfere in an obscure way with the screen. The following high zoom image shows the lines, which are even a little cleaner than those made by GIMP's fake engraver from the same simplified image.
Simulation of photo printing plates. The hatch pattern was nearly the same curved lines as in the full vector example in Inkscape. To get a palatable halftoning, the pattern must have right brightness distribution. As non-programmer and poor in maths I cannot input the optimal blurred engraving line raster. I must search by trial and error proper alternating white and black line widths which, when blurred, give a coarse approximation of the right distribution. Here is, what I got:
Cyan lines are actually white, they are colored here only to see them. White lines are 0,6mm wide, black lines are 0,4mm wide. There's 0,1mm empty space around the black lines, so one line pair is 1,2mm wide.
I tried to halftone gradiendts from black to white and these lines gave nearly right results (= fake engraved gradients).
Inkscape has incredibly difficult unit for the amount for blurring. A wide bunch of narrow lines will have very coarsely adjusted blur, if one tries to blur the whole bunch at the same time. I found 0,3% blur setting usable for the lines. 0,2% and 0,4% gave very false results and there's no more decimals allowed. The percentage obviously is taken of the width of the whole line bunch (=224mm wide, 177mm high)
The non-smoothed perry image (=raster photo) looks through the blurred line pattern like this:
The blurred line pattern has blending mode multiply.
A raster copy was made of this and it was traced to BW having the Brightness Cut-off treshold = 0,66. No path smoothing was used.
The resulted fake engraving by fake printing plate process:
It's better than a hopeless mess. Using simplified photo (=filtered and traced to 8 greyshades) gave a little cleaner engraved lines, but the result was not better when looked as whole.
Using Gimp's Filters > Distorts > Newsprint filter with the Line Spot function is another way to do a fake engraving effect. I enlarged the pear in the above answer by 400% to get a 2724x1744 image. Set the Image > Mode to Grayscale. I used the Newsprint filter with the default Input SPI of 72 and a Cell size of 15 (Output LPI of 4.8) and a Screen Angle of 30 to get this: