Hairline-free rendering – accurate antialiasing of a composition

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Hairline-free rendering – accurate antialiasing of a composition

J. R. Haigh
Dear SVG standards editors and implementors,
        There are a number of situations in which I see ‘hairlines’ on drawings. As most of you are probably already familiar with, these are pixel-wide lines of translucency along 2 edges which are supposed to be meeting exactly. They are an artifact of inaccurate antialiasing (inaccurate in the context of signal aliasing of the drawing as a composited whole, regardless of how accurate the antialiasing is before each blend onto the canvas).They do not scale and are diminished by supersampling.
        I urge implementors to make the rendering of your implementation hairline-free. As the hairlines are resolution-dependent (always about 1–2.236px wide (1 to √5 pixels; depending on angle and alignment), so thicker at lower resolution and thinner at higher resolution), a rendering that is resolution-agnostic would also be hairline-free. What I mean by ‘resolution-agnostic rendering’ is rendering that behaves similarly to the hypothetical case of rendering at infinite resolution and then scaling down to the desired resolution – similarly enough as to not have additional unwanted artifacts such as hairlines.
        Hairlines do not only occur where the edges meet perfectly, the problem even happens when they are overlapping. At a zoom level such that the overlap is less than √2 pixels wide (about 1.414px), the artifact can begin to reveal itself (depending on angle and alignment). Zooming-out further actually enlarges the hairline relative to the rest of the drawing.
        I'm not entirely sure how antialiasing is implemented to be performant, but I know that supersampling can be used to implement antialiasing. If that is what's used then the downsampling of the supersampled aliased edges needs to be deferred until after all objects have been composited. If that is not what's used and not performant then I do not know what is the most performant way to achieve correct antialiasing and thus hairline-free rendering.

---- Demonstration of the hairline misrendering ----
The SVG document below consists of a black square and a white square each constructed with 2 perfectly interlocking combs of 64 fingers each. They should be entirely and uniformly black or white. If you see a grey diagonal band in each square, these are misrendering artifacts formed by 127 translucent hairlines caused by inaccurate antialiasing of the edges of the fingers. Notice how they are resolution-dependent; the hairlines don't scale, i.e. they are always hairlines no matter what the zoom. Zooming into the bands lessens the overall shade of the band and, after some moiré patterns, reveals the individual hairlines. As such, supersampling diminishes the hairlines – the higher the supersampling the less visible the bands are, and this highlights that it is a rendering issue.

<svg width="256" height="192">
  <path d="M72,8 24,56 24.5,56.5 56.5,24.5 57,25 25,57 25.5,57.5 57.5,25.5 58,26 26,58 26.5,58.5 58.5,26.5 59,27 27,59 27.5,59.5 59.5,27.5 60,28 28,60 28.5,60.5 60.5,28.5 61,29 29,61 29.5,61.5 61.5,29.5 62,30 30,62 30.5,62.5 62.5,30.5 63,31 31,63 31.5,63.5 63.5,31.5 64,32 32,64 32.5,64.5 64.5,32.5 65,33 33,65 33.5,65.5 65.5,33.5 66,34 34,66 34.5,66.5 66.5,34.5 67,35 35,67 35.5,67.5 67.5,35.5 68,36 36,68 36.5,68.5 68.5,36.5 69,37 37,69 37.5,69.5 69.5,37.5 70,38 38,70 38.5,70.5 70.5,38.5 71,39 39,71 39.5,71.5 71.5,39.5 72,40 40,72 40.5,72.5 72.5,40.5 73,41 41,73 41.5,73.5 73.5,41.5 74,42 42,74 42.5,74.5 74.5,42.5 75,43 43,75 43.5,75.5 75.5,43.5 76,44 44,76 44.5,76.5 76.5,44.5 77,45 45,77 45.5,77.5 77.5,45.5 78,46 46,78 46.5,78.5 78.5,46.5 79,47 47,79 47.5,79.5 79.5,47.5 80,48 48,80 48.5,80.5 80.5,48.5 81,49 49,81 49.5,81.5 81.5,49.5 82,50 50,82 50.5,82.5 82.5,50.5 83,51 51,83 51.5,83.5 83.5,51.5 84,52 52,84 52.5,84.5 84.5,52.5 85,53 53,85 53.5,85.5 85.5,53.5 86,54 54,86 54.5,86.5 86.5,54.5 87,55 55,87 55.5,87.5 87.5,55.5 88,56 56,88 56.5,88.5 88.5,56.5 89,57 57,89 57.5,89.5 89.5,57.5 90,58 58,90 58.5,90.5 90.5,58.5 91,59 59,91 59.5,91.5 91.5,59.5 92,60 60,92 60.5,92.5 92.5,60.5 93,61 61,93 61.5,93.5 93.5,61.5 94,62 62,94 62.5,94.5 94.5,62.5 95,63 63,95 63.5,95.5 95.5,63.5 96,64 64,96 64.5,96.5 96.5,64.5 97,65 65,97 65.5,97.5 97.5,65.5 98,66 66,98 66.5,98.5 98.5,66.5 99,67 67,99 67.5,99.5 99.5,67.5 100,68 68,100 68.5,100.5 100.5,68.5 101,69 69,101 69.5,101.5 101.5,69.5 102,70 70,102 70.5,102.5 102.5,70.5 103,71 71,103 71.5,103.5 103.5,71.5 104,72 72,104 72.5,104.5 104.5,72.5 105,73 73,105 73.5,105.5 105.5,73.5 106,74 74,106 74.5,106.5 106.5,74.5 107,75 75,107 75.5,107.5 107.5,75.5 108,76 76,108 76.5,108.5 108.5,76.5 109,77 77,109 77.5,109.5 109.5,77.5 110,78 78,110 78.5,110.5 110.5,78.5 111,79 79,111 79.5,111.5 111.5,79.5 112,80 80,112 80.5,112.5 112.5,80.5 113,81 81,113 81.5,113.5 113.5,81.5 114,82 82,114 82.5,114.5 114.5,82.5 115,83 83,115 83.5,115.5 115.5,83.5 116,84 84,116 84.5,116.5 116.5,84.5 117,85 85,117 85.5,117.5 117.5,85.5 118,86 86,118 86.5,118.5 118.5,86.5 119,87 87,119 87.5,119.5 119.5,87.5 120,88 136,72 Z" fill="black"/>
  <path d="M8,72 24,56 24.5,56.5 56.5,24.5 57,25 25,57 25.5,57.5 57.5,25.5 58,26 26,58 26.5,58.5 58.5,26.5 59,27 27,59 27.5,59.5 59.5,27.5 60,28 28,60 28.5,60.5 60.5,28.5 61,29 29,61 29.5,61.5 61.5,29.5 62,30 30,62 30.5,62.5 62.5,30.5 63,31 31,63 31.5,63.5 63.5,31.5 64,32 32,64 32.5,64.5 64.5,32.5 65,33 33,65 33.5,65.5 65.5,33.5 66,34 34,66 34.5,66.5 66.5,34.5 67,35 35,67 35.5,67.5 67.5,35.5 68,36 36,68 36.5,68.5 68.5,36.5 69,37 37,69 37.5,69.5 69.5,37.5 70,38 38,70 38.5,70.5 70.5,38.5 71,39 39,71 39.5,71.5 71.5,39.5 72,40 40,72 40.5,72.5 72.5,40.5 73,41 41,73 41.5,73.5 73.5,41.5 74,42 42,74 42.5,74.5 74.5,42.5 75,43 43,75 43.5,75.5 75.5,43.5 76,44 44,76 44.5,76.5 76.5,44.5 77,45 45,77 45.5,77.5 77.5,45.5 78,46 46,78 46.5,78.5 78.5,46.5 79,47 47,79 47.5,79.5 79.5,47.5 80,48 48,80 48.5,80.5 80.5,48.5 81,49 49,81 49.5,81.5 81.5,49.5 82,50 50,82 50.5,82.5 82.5,50.5 83,51 51,83 51.5,83.5 83.5,51.5 84,52 52,84 52.5,84.5 84.5,52.5 85,53 53,85 53.5,85.5 85.5,53.5 86,54 54,86 54.5,86.5 86.5,54.5 87,55 55,87 55.5,87.5 87.5,55.5 88,56 56,88 56.5,88.5 88.5,56.5 89,57 57,89 57.5,89.5 89.5,57.5 90,58 58,90 58.5,90.5 90.5,58.5 91,59 59,91 59.5,91.5 91.5,59.5 92,60 60,92 60.5,92.5 92.5,60.5 93,61 61,93 61.5,93.5 93.5,61.5 94,62 62,94 62.5,94.5 94.5,62.5 95,63 63,95 63.5,95.5 95.5,63.5 96,64 64,96 64.5,96.5 96.5,64.5 97,65 65,97 65.5,97.5 97.5,65.5 98,66 66,98 66.5,98.5 98.5,66.5 99,67 67,99 67.5,99.5 99.5,67.5 100,68 68,100 68.5,100.5 100.5,68.5 101,69 69,101 69.5,101.5 101.5,69.5 102,70 70,102 70.5,102.5 102.5,70.5 103,71 71,103 71.5,103.5 103.5,71.5 104,72 72,104 72.5,104.5 104.5,72.5 105,73 73,105 73.5,105.5 105.5,73.5 106,74 74,106 74.5,106.5 106.5,74.5 107,75 75,107 75.5,107.5 107.5,75.5 108,76 76,108 76.5,108.5 108.5,76.5 109,77 77,109 77.5,109.5 109.5,77.5 110,78 78,110 78.5,110.5 110.5,78.5 111,79 79,111 79.5,111.5 111.5,79.5 112,80 80,112 80.5,112.5 112.5,80.5 113,81 81,113 81.5,113.5 113.5,81.5 114,82 82,114 82.5,114.5 114.5,82.5 115,83 83,115 83.5,115.5 115.5,83.5 116,84 84,116 84.5,116.5 116.5,84.5 117,85 85,117 85.5,117.5 117.5,85.5 118,86 86,118 86.5,118.5 118.5,86.5 119,87 87,119 87.5,119.5 119.5,87.5 120,88 72,136 Z" fill="black"/>
  <path d="M224,0 256,0 256,192 32,192 Z" fill="black"/>
  <path d="M184,56 136,104 136.5,104.5 168.5,72.5 169,73 137,105 137.5,105.5 169.5,73.5 170,74 138,106 138.5,106.5 170.5,74.5 171,75 139,107 139.5,107.5 171.5,75.5 172,76 140,108 140.5,108.5 172.5,76.5 173,77 141,109 141.5,109.5 173.5,77.5 174,78 142,110 142.5,110.5 174.5,78.5 175,79 143,111 143.5,111.5 175.5,79.5 176,80 144,112 144.5,112.5 176.5,80.5 177,81 145,113 145.5,113.5 177.5,81.5 178,82 146,114 146.5,114.5 178.5,82.5 179,83 147,115 147.5,115.5 179.5,83.5 180,84 148,116 148.5,116.5 180.5,84.5 181,85 149,117 149.5,117.5 181.5,85.5 182,86 150,118 150.5,118.5 182.5,86.5 183,87 151,119 151.5,119.5 183.5,87.5 184,88 152,120 152.5,120.5 184.5,88.5 185,89 153,121 153.5,121.5 185.5,89.5 186,90 154,122 154.5,122.5 186.5,90.5 187,91 155,123 155.5,123.5 187.5,91.5 188,92 156,124 156.5,124.5 188.5,92.5 189,93 157,125 157.5,125.5 189.5,93.5 190,94 158,126 158.5,126.5 190.5,94.5 191,95 159,127 159.5,127.5 191.5,95.5 192,96 160,128 160.5,128.5 192.5,96.5 193,97 161,129 161.5,129.5 193.5,97.5 194,98 162,130 162.5,130.5 194.5,98.5 195,99 163,131 163.5,131.5 195.5,99.5 196,100 164,132 164.5,132.5 196.5,100.5 197,101 165,133 165.5,133.5 197.5,101.5 198,102 166,134 166.5,134.5 198.5,102.5 199,103 167,135 167.5,135.5 199.5,103.5 200,104 168,136 168.5,136.5 200.5,104.5 201,105 169,137 169.5,137.5 201.5,105.5 202,106 170,138 170.5,138.5 202.5,106.5 203,107 171,139 171.5,139.5 203.5,107.5 204,108 172,140 172.5,140.5 204.5,108.5 205,109 173,141 173.5,141.5 205.5,109.5 206,110 174,142 174.5,142.5 206.5,110.5 207,111 175,143 175.5,143.5 207.5,111.5 208,112 176,144 176.5,144.5 208.5,112.5 209,113 177,145 177.5,145.5 209.5,113.5 210,114 178,146 178.5,146.5 210.5,114.5 211,115 179,147 179.5,147.5 211.5,115.5 212,116 180,148 180.5,148.5 212.5,116.5 213,117 181,149 181.5,149.5 213.5,117.5 214,118 182,150 182.5,150.5 214.5,118.5 215,119 183,151 183.5,151.5 215.5,119.5 216,120 184,152 184.5,152.5 216.5,120.5 217,121 185,153 185.5,153.5 217.5,121.5 218,122 186,154 186.5,154.5 218.5,122.5 219,123 187,155 187.5,155.5 219.5,123.5 220,124 188,156 188.5,156.5 220.5,124.5 221,125 189,157 189.5,157.5 221.5,125.5 222,126 190,158 190.5,158.5 222.5,126.5 223,127 191,159 191.5,159.5 223.5,127.5 224,128 192,160 192.5,160.5 224.5,128.5 225,129 193,161 193.5,161.5 225.5,129.5 226,130 194,162 194.5,162.5 226.5,130.5 227,131 195,163 195.5,163.5 227.5,131.5 228,132 196,164 196.5,164.5 228.5,132.5 229,133 197,165 197.5,165.5 229.5,133.5 230,134 198,166 198.5,166.5 230.5,134.5 231,135 199,167 199.5,167.5 231.5,135.5 232,136 248,120 Z" fill="white"/>
  <path d="M120,120 136,104 136.5,104.5 168.5,72.5 169,73 137,105 137.5,105.5 169.5,73.5 170,74 138,106 138.5,106.5 170.5,74.5 171,75 139,107 139.5,107.5 171.5,75.5 172,76 140,108 140.5,108.5 172.5,76.5 173,77 141,109 141.5,109.5 173.5,77.5 174,78 142,110 142.5,110.5 174.5,78.5 175,79 143,111 143.5,111.5 175.5,79.5 176,80 144,112 144.5,112.5 176.5,80.5 177,81 145,113 145.5,113.5 177.5,81.5 178,82 146,114 146.5,114.5 178.5,82.5 179,83 147,115 147.5,115.5 179.5,83.5 180,84 148,116 148.5,116.5 180.5,84.5 181,85 149,117 149.5,117.5 181.5,85.5 182,86 150,118 150.5,118.5 182.5,86.5 183,87 151,119 151.5,119.5 183.5,87.5 184,88 152,120 152.5,120.5 184.5,88.5 185,89 153,121 153.5,121.5 185.5,89.5 186,90 154,122 154.5,122.5 186.5,90.5 187,91 155,123 155.5,123.5 187.5,91.5 188,92 156,124 156.5,124.5 188.5,92.5 189,93 157,125 157.5,125.5 189.5,93.5 190,94 158,126 158.5,126.5 190.5,94.5 191,95 159,127 159.5,127.5 191.5,95.5 192,96 160,128 160.5,128.5 192.5,96.5 193,97 161,129 161.5,129.5 193.5,97.5 194,98 162,130 162.5,130.5 194.5,98.5 195,99 163,131 163.5,131.5 195.5,99.5 196,100 164,132 164.5,132.5 196.5,100.5 197,101 165,133 165.5,133.5 197.5,101.5 198,102 166,134 166.5,134.5 198.5,102.5 199,103 167,135 167.5,135.5 199.5,103.5 200,104 168,136 168.5,136.5 200.5,104.5 201,105 169,137 169.5,137.5 201.5,105.5 202,106 170,138 170.5,138.5 202.5,106.5 203,107 171,139 171.5,139.5 203.5,107.5 204,108 172,140 172.5,140.5 204.5,108.5 205,109 173,141 173.5,141.5 205.5,109.5 206,110 174,142 174.5,142.5 206.5,110.5 207,111 175,143 175.5,143.5 207.5,111.5 208,112 176,144 176.5,144.5 208.5,112.5 209,113 177,145 177.5,145.5 209.5,113.5 210,114 178,146 178.5,146.5 210.5,114.5 211,115 179,147 179.5,147.5 211.5,115.5 212,116 180,148 180.5,148.5 212.5,116.5 213,117 181,149 181.5,149.5 213.5,117.5 214,118 182,150 182.5,150.5 214.5,118.5 215,119 183,151 183.5,151.5 215.5,119.5 216,120 184,152 184.5,152.5 216.5,120.5 217,121 185,153 185.5,153.5 217.5,121.5 218,122 186,154 186.5,154.5 218.5,122.5 219,123 187,155 187.5,155.5 219.5,123.5 220,124 188,156 188.5,156.5 220.5,124.5 221,125 189,157 189.5,157.5 221.5,125.5 222,126 190,158 190.5,158.5 222.5,126.5 223,127 191,159 191.5,159.5 223.5,127.5 224,128 192,160 192.5,160.5 224.5,128.5 225,129 193,161 193.5,161.5 225.5,129.5 226,130 194,162 194.5,162.5 226.5,130.5 227,131 195,163 195.5,163.5 227.5,131.5 228,132 196,164 196.5,164.5 228.5,132.5 229,133 197,165 197.5,165.5 229.5,133.5 230,134 198,166 198.5,166.5 230.5,134.5 231,135 199,167 199.5,167.5 231.5,135.5 232,136 184,184 Z" fill="white"/>
</svg>
(https://jsfiddle.net/xe92LLbm/ )

---- Demonstration that the hairlines are not an artifact of the shape ----
Contrast that with this, in which the combs of each square have been joined which causes the antialiasing to be processed on the pair of combs in each square as a whole:

<svg width="256" height="192">
  <path d="M72,8 24,56 24.5,56.5 56.5,24.5 57,25 25,57 25.5,57.5 57.5,25.5 58,26 26,58 26.5,58.5 58.5,26.5 59,27 27,59 27.5,59.5 59.5,27.5 60,28 28,60 28.5,60.5 60.5,28.5 61,29 29,61 29.5,61.5 61.5,29.5 62,30 30,62 30.5,62.5 62.5,30.5 63,31 31,63 31.5,63.5 63.5,31.5 64,32 32,64 32.5,64.5 64.5,32.5 65,33 33,65 33.5,65.5 65.5,33.5 66,34 34,66 34.5,66.5 66.5,34.5 67,35 35,67 35.5,67.5 67.5,35.5 68,36 36,68 36.5,68.5 68.5,36.5 69,37 37,69 37.5,69.5 69.5,37.5 70,38 38,70 38.5,70.5 70.5,38.5 71,39 39,71 39.5,71.5 71.5,39.5 72,40 40,72 40.5,72.5 72.5,40.5 73,41 41,73 41.5,73.5 73.5,41.5 74,42 42,74 42.5,74.5 74.5,42.5 75,43 43,75 43.5,75.5 75.5,43.5 76,44 44,76 44.5,76.5 76.5,44.5 77,45 45,77 45.5,77.5 77.5,45.5 78,46 46,78 46.5,78.5 78.5,46.5 79,47 47,79 47.5,79.5 79.5,47.5 80,48 48,80 48.5,80.5 80.5,48.5 81,49 49,81 49.5,81.5 81.5,49.5 82,50 50,82 50.5,82.5 82.5,50.5 83,51 51,83 51.5,83.5 83.5,51.5 84,52 52,84 52.5,84.5 84.5,52.5 85,53 53,85 53.5,85.5 85.5,53.5 86,54 54,86 54.5,86.5 86.5,54.5 87,55 55,87 55.5,87.5 87.5,55.5 88,56 56,88 56.5,88.5 88.5,56.5 89,57 57,89 57.5,89.5 89.5,57.5 90,58 58,90 58.5,90.5 90.5,58.5 91,59 59,91 59.5,91.5 91.5,59.5 92,60 60,92 60.5,92.5 92.5,60.5 93,61 61,93 61.5,93.5 93.5,61.5 94,62 62,94 62.5,94.5 94.5,62.5 95,63 63,95 63.5,95.5 95.5,63.5 96,64 64,96 64.5,96.5 96.5,64.5 97,65 65,97 65.5,97.5 97.5,65.5 98,66 66,98 66.5,98.5 98.5,66.5 99,67 67,99 67.5,99.5 99.5,67.5 100,68 68,100 68.5,100.5 100.5,68.5 101,69 69,101 69.5,101.5 101.5,69.5 102,70 70,102 70.5,102.5 102.5,70.5 103,71 71,103 71.5,103.5 103.5,71.5 104,72 72,104 72.5,104.5 104.5,72.5 105,73 73,105 73.5,105.5 105.5,73.5 106,74 74,106 74.5,106.5 106.5,74.5 107,75 75,107 75.5,107.5 107.5,75.5 108,76 76,108 76.5,108.5 108.5,76.5 109,77 77,109 77.5,109.5 109.5,77.5 110,78 78,110 78.5,110.5 110.5,78.5 111,79 79,111 79.5,111.5 111.5,79.5 112,80 80,112 80.5,112.5 112.5,80.5 113,81 81,113 81.5,113.5 113.5,81.5 114,82 82,114 82.5,114.5 114.5,82.5 115,83 83,115 83.5,115.5 115.5,83.5 116,84 84,116 84.5,116.5 116.5,84.5 117,85 85,117 85.5,117.5 117.5,85.5 118,86 86,118 86.5,118.5 118.5,86.5 119,87 87,119 87.5,119.5 119.5,87.5 120,88 136,72 Z
  M8,72 24,56 24.5,56.5 56.5,24.5 57,25 25,57 25.5,57.5 57.5,25.5 58,26 26,58 26.5,58.5 58.5,26.5 59,27 27,59 27.5,59.5 59.5,27.5 60,28 28,60 28.5,60.5 60.5,28.5 61,29 29,61 29.5,61.5 61.5,29.5 62,30 30,62 30.5,62.5 62.5,30.5 63,31 31,63 31.5,63.5 63.5,31.5 64,32 32,64 32.5,64.5 64.5,32.5 65,33 33,65 33.5,65.5 65.5,33.5 66,34 34,66 34.5,66.5 66.5,34.5 67,35 35,67 35.5,67.5 67.5,35.5 68,36 36,68 36.5,68.5 68.5,36.5 69,37 37,69 37.5,69.5 69.5,37.5 70,38 38,70 38.5,70.5 70.5,38.5 71,39 39,71 39.5,71.5 71.5,39.5 72,40 40,72 40.5,72.5 72.5,40.5 73,41 41,73 41.5,73.5 73.5,41.5 74,42 42,74 42.5,74.5 74.5,42.5 75,43 43,75 43.5,75.5 75.5,43.5 76,44 44,76 44.5,76.5 76.5,44.5 77,45 45,77 45.5,77.5 77.5,45.5 78,46 46,78 46.5,78.5 78.5,46.5 79,47 47,79 47.5,79.5 79.5,47.5 80,48 48,80 48.5,80.5 80.5,48.5 81,49 49,81 49.5,81.5 81.5,49.5 82,50 50,82 50.5,82.5 82.5,50.5 83,51 51,83 51.5,83.5 83.5,51.5 84,52 52,84 52.5,84.5 84.5,52.5 85,53 53,85 53.5,85.5 85.5,53.5 86,54 54,86 54.5,86.5 86.5,54.5 87,55 55,87 55.5,87.5 87.5,55.5 88,56 56,88 56.5,88.5 88.5,56.5 89,57 57,89 57.5,89.5 89.5,57.5 90,58 58,90 58.5,90.5 90.5,58.5 91,59 59,91 59.5,91.5 91.5,59.5 92,60 60,92 60.5,92.5 92.5,60.5 93,61 61,93 61.5,93.5 93.5,61.5 94,62 62,94 62.5,94.5 94.5,62.5 95,63 63,95 63.5,95.5 95.5,63.5 96,64 64,96 64.5,96.5 96.5,64.5 97,65 65,97 65.5,97.5 97.5,65.5 98,66 66,98 66.5,98.5 98.5,66.5 99,67 67,99 67.5,99.5 99.5,67.5 100,68 68,100 68.5,100.5 100.5,68.5 101,69 69,101 69.5,101.5 101.5,69.5 102,70 70,102 70.5,102.5 102.5,70.5 103,71 71,103 71.5,103.5 103.5,71.5 104,72 72,104 72.5,104.5 104.5,72.5 105,73 73,105 73.5,105.5 105.5,73.5 106,74 74,106 74.5,106.5 106.5,74.5 107,75 75,107 75.5,107.5 107.5,75.5 108,76 76,108 76.5,108.5 108.5,76.5 109,77 77,109 77.5,109.5 109.5,77.5 110,78 78,110 78.5,110.5 110.5,78.5 111,79 79,111 79.5,111.5 111.5,79.5 112,80 80,112 80.5,112.5 112.5,80.5 113,81 81,113 81.5,113.5 113.5,81.5 114,82 82,114 82.5,114.5 114.5,82.5 115,83 83,115 83.5,115.5 115.5,83.5 116,84 84,116 84.5,116.5 116.5,84.5 117,85 85,117 85.5,117.5 117.5,85.5 118,86 86,118 86.5,118.5 118.5,86.5 119,87 87,119 87.5,119.5 119.5,87.5 120,88 72,136 Z" fill="black"/>
  <path d="M224,0 256,0 256,192 32,192 Z" fill="black"/>
  <path d="M184,56 136,104 136.5,104.5 168.5,72.5 169,73 137,105 137.5,105.5 169.5,73.5 170,74 138,106 138.5,106.5 170.5,74.5 171,75 139,107 139.5,107.5 171.5,75.5 172,76 140,108 140.5,108.5 172.5,76.5 173,77 141,109 141.5,109.5 173.5,77.5 174,78 142,110 142.5,110.5 174.5,78.5 175,79 143,111 143.5,111.5 175.5,79.5 176,80 144,112 144.5,112.5 176.5,80.5 177,81 145,113 145.5,113.5 177.5,81.5 178,82 146,114 146.5,114.5 178.5,82.5 179,83 147,115 147.5,115.5 179.5,83.5 180,84 148,116 148.5,116.5 180.5,84.5 181,85 149,117 149.5,117.5 181.5,85.5 182,86 150,118 150.5,118.5 182.5,86.5 183,87 151,119 151.5,119.5 183.5,87.5 184,88 152,120 152.5,120.5 184.5,88.5 185,89 153,121 153.5,121.5 185.5,89.5 186,90 154,122 154.5,122.5 186.5,90.5 187,91 155,123 155.5,123.5 187.5,91.5 188,92 156,124 156.5,124.5 188.5,92.5 189,93 157,125 157.5,125.5 189.5,93.5 190,94 158,126 158.5,126.5 190.5,94.5 191,95 159,127 159.5,127.5 191.5,95.5 192,96 160,128 160.5,128.5 192.5,96.5 193,97 161,129 161.5,129.5 193.5,97.5 194,98 162,130 162.5,130.5 194.5,98.5 195,99 163,131 163.5,131.5 195.5,99.5 196,100 164,132 164.5,132.5 196.5,100.5 197,101 165,133 165.5,133.5 197.5,101.5 198,102 166,134 166.5,134.5 198.5,102.5 199,103 167,135 167.5,135.5 199.5,103.5 200,104 168,136 168.5,136.5 200.5,104.5 201,105 169,137 169.5,137.5 201.5,105.5 202,106 170,138 170.5,138.5 202.5,106.5 203,107 171,139 171.5,139.5 203.5,107.5 204,108 172,140 172.5,140.5 204.5,108.5 205,109 173,141 173.5,141.5 205.5,109.5 206,110 174,142 174.5,142.5 206.5,110.5 207,111 175,143 175.5,143.5 207.5,111.5 208,112 176,144 176.5,144.5 208.5,112.5 209,113 177,145 177.5,145.5 209.5,113.5 210,114 178,146 178.5,146.5 210.5,114.5 211,115 179,147 179.5,147.5 211.5,115.5 212,116 180,148 180.5,148.5 212.5,116.5 213,117 181,149 181.5,149.5 213.5,117.5 214,118 182,150 182.5,150.5 214.5,118.5 215,119 183,151 183.5,151.5 215.5,119.5 216,120 184,152 184.5,152.5 216.5,120.5 217,121 185,153 185.5,153.5 217.5,121.5 218,122 186,154 186.5,154.5 218.5,122.5 219,123 187,155 187.5,155.5 219.5,123.5 220,124 188,156 188.5,156.5 220.5,124.5 221,125 189,157 189.5,157.5 221.5,125.5 222,126 190,158 190.5,158.5 222.5,126.5 223,127 191,159 191.5,159.5 223.5,127.5 224,128 192,160 192.5,160.5 224.5,128.5 225,129 193,161 193.5,161.5 225.5,129.5 226,130 194,162 194.5,162.5 226.5,130.5 227,131 195,163 195.5,163.5 227.5,131.5 228,132 196,164 196.5,164.5 228.5,132.5 229,133 197,165 197.5,165.5 229.5,133.5 230,134 198,166 198.5,166.5 230.5,134.5 231,135 199,167 199.5,167.5 231.5,135.5 232,136 248,120 Z
  M120,120 136,104 136.5,104.5 168.5,72.5 169,73 137,105 137.5,105.5 169.5,73.5 170,74 138,106 138.5,106.5 170.5,74.5 171,75 139,107 139.5,107.5 171.5,75.5 172,76 140,108 140.5,108.5 172.5,76.5 173,77 141,109 141.5,109.5 173.5,77.5 174,78 142,110 142.5,110.5 174.5,78.5 175,79 143,111 143.5,111.5 175.5,79.5 176,80 144,112 144.5,112.5 176.5,80.5 177,81 145,113 145.5,113.5 177.5,81.5 178,82 146,114 146.5,114.5 178.5,82.5 179,83 147,115 147.5,115.5 179.5,83.5 180,84 148,116 148.5,116.5 180.5,84.5 181,85 149,117 149.5,117.5 181.5,85.5 182,86 150,118 150.5,118.5 182.5,86.5 183,87 151,119 151.5,119.5 183.5,87.5 184,88 152,120 152.5,120.5 184.5,88.5 185,89 153,121 153.5,121.5 185.5,89.5 186,90 154,122 154.5,122.5 186.5,90.5 187,91 155,123 155.5,123.5 187.5,91.5 188,92 156,124 156.5,124.5 188.5,92.5 189,93 157,125 157.5,125.5 189.5,93.5 190,94 158,126 158.5,126.5 190.5,94.5 191,95 159,127 159.5,127.5 191.5,95.5 192,96 160,128 160.5,128.5 192.5,96.5 193,97 161,129 161.5,129.5 193.5,97.5 194,98 162,130 162.5,130.5 194.5,98.5 195,99 163,131 163.5,131.5 195.5,99.5 196,100 164,132 164.5,132.5 196.5,100.5 197,101 165,133 165.5,133.5 197.5,101.5 198,102 166,134 166.5,134.5 198.5,102.5 199,103 167,135 167.5,135.5 199.5,103.5 200,104 168,136 168.5,136.5 200.5,104.5 201,105 169,137 169.5,137.5 201.5,105.5 202,106 170,138 170.5,138.5 202.5,106.5 203,107 171,139 171.5,139.5 203.5,107.5 204,108 172,140 172.5,140.5 204.5,108.5 205,109 173,141 173.5,141.5 205.5,109.5 206,110 174,142 174.5,142.5 206.5,110.5 207,111 175,143 175.5,143.5 207.5,111.5 208,112 176,144 176.5,144.5 208.5,112.5 209,113 177,145 177.5,145.5 209.5,113.5 210,114 178,146 178.5,146.5 210.5,114.5 211,115 179,147 179.5,147.5 211.5,115.5 212,116 180,148 180.5,148.5 212.5,116.5 213,117 181,149 181.5,149.5 213.5,117.5 214,118 182,150 182.5,150.5 214.5,118.5 215,119 183,151 183.5,151.5 215.5,119.5 216,120 184,152 184.5,152.5 216.5,120.5 217,121 185,153 185.5,153.5 217.5,121.5 218,122 186,154 186.5,154.5 218.5,122.5 219,123 187,155 187.5,155.5 219.5,123.5 220,124 188,156 188.5,156.5 220.5,124.5 221,125 189,157 189.5,157.5 221.5,125.5 222,126 190,158 190.5,158.5 222.5,126.5 223,127 191,159 191.5,159.5 223.5,127.5 224,128 192,160 192.5,160.5 224.5,128.5 225,129 193,161 193.5,161.5 225.5,129.5 226,130 194,162 194.5,162.5 226.5,130.5 227,131 195,163 195.5,163.5 227.5,131.5 228,132 196,164 196.5,164.5 228.5,132.5 229,133 197,165 197.5,165.5 229.5,133.5 230,134 198,166 198.5,166.5 230.5,134.5 231,135 199,167 199.5,167.5 231.5,135.5 232,136 184,184 Z" fill="white"/>
</svg>
(https://jsfiddle.net/xe92LLbm/1/ )

Yours faithfully,
J. R. Haigh.

--
Sent from Claws Mail on NixOS.