I wanted to add a logo to a PCB but it took me a bit of googling and trial-and-error before I got it right so I decided to share my findings. KiCAD already includes a tool called bitmap2components which can convert an image to an eeschema symbol or a pcbnew module. I was trying to add a logo to my bottom layer but it seemed you could just add a logo to the silkscreen layer through the bitmap2components tool.
How to convert a logo to a logo on a copper layer
After you have a black and white logo, you need to convert it to a .mod file with the bitmap2components tool. If you want the logo on the bottom layer you want to flip your logo (so it’s “the wrong way around” when you look at it). Then press “export to pcbnew” and name the file (make sure you put a .mod extension to the file). After you have saved the .mod file you need to modify the file with a text editor.
Open the .mod file with a text editor and find all the lines starting with “DP” such as “DP 0 0 0 0 26 1 21“. The last number ie. 21 specifies the layer where that graphic is located and 21 is the top layer silkscreen. Change the number 21 to 15 on every line which starts with “DP“. Gedits search and replace is a handy tool for this. This changes the silkscreen graphics to be located on the top layer.
After you have modified the .mod file you can just import that library to pcbnew and add a new module which is your logo. You can change the layer from edit module to bottom if you want to.
The only problem is that a ground fill does not avoid your logo so it will cover it. I worked around this by making the ground fill polygon go around the logo. Let me know if you know a way how to make the ground fill to avoid the logo so it shows up!