You can store the data in an array, then save the entire array in the options table by using update_option().
One issue you will run into is backgrounds are normally the realm of themes and CSS. Your plugin will have difficulty dealing with the variety of how things are handled in various themes. One way to get around this is to enqueue javascript that changes the background style for single pages. You can pass PHP values to javascript functions with wp_localize_script().
You normally localize scripts in the action 'wp_enqueue_scripts', but I'm unsure if this is late enough to know if the query is for a single post. Some testing will be required.