My customizer’s setting doesn’t set to the default and needed to click the control’s “Default” button before it’ll be set

As what I’ve commented, the rawurlencode() function is the reason because WordPress have a lot of restrictions. I found that, that kind of problem will exist if you have a % percent sign (in my case, produced by the rawurlencode()) in your 'default' => $value.

One of the solutions, encode some or the whole part of your path with base64_encode():

$encode = get_template_directory_uri().'/images/'.get_bloginfo('name').'.gif';
...
    'default' => $encode,
...

And later decode it with base64_decode() before you use it:

$decode = base64_decode(get_theme_mod('themename_img'));