Or maybe try masks for this purpose. Let's make a mask out of the circle and through it we will look at the substrate. In the first version, I have a red square substrate, and in the second one a bitmap image.
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" viewBox="0 0 200 200"> <defs> <mask id="mask"> <g stroke="gray" stroke-width="4" fill="white"> <circle cx="50%" cy="50%" r="45%" /> </g> </mask> </defs> <g mask="url(#mask)"> <rect width="100%" height="100%" fill="red" /> </g> </svg>
Now the flowers. Photo Yoksel and her ideas on the use of masks
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300" viewBox="0 0 300 300"> <defs> <mask id="mask"> <g stroke="gray" stroke-width="12" fill="white"> <circle cx="50%" cy="50%" r="25%" /> </g> </mask> </defs> <g mask="url(#mask)"> <image xlink:href="http://img-fotki.yandex.ru/get/6208/5091629.73/0_63193_9ffa75d7_L" width="100%" height="100%"></image> </g> </svg>
Here's a hexagon mask
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300" viewBox="0 0 300 300"> <defs> <mask id="mask"> <g transform="scale(2.95) translate(18 0)" stroke="gray" stroke-width="4" fill="white"> <path d="M48.9 60.9 16.9 60.9 1.2 33.4 17.1 6.1 48.7 6.2 64.4 33.6z" /> </g> </mask> </defs> <g mask="url(#mask)"> <image xlink:href="https://img-fotki.yandex.ru/get/5106/yoksel.5a/0_44b5e_4da2ba62_orig" width="100%" height="100%"></image> </g> </svg>
Great article on masks from Yoksel
divwith a background of any complexity - br3t