try this code:
add_filter ( 'wp_tag_cloud', 'tag_cloud_font_size_class' );
function tag_cloud_font_size_class( $taglinks ) {
$tags = explode('</a>', $taglinks);
$regex1 = "#(.*style='font-size:)(.*)((pt|px|em|pc|%);'.*)#e";
$regex2 = "#(style='font-size:)(.*)((pt|px|em|pc|%);')#e";
$regex3 = "#(.*class=')(.*)(' title.*)#e";
foreach( $tags as $tag ) {
$size = preg_replace($regex1, "(''.round($2).'')", $tag ); //get the rounded font size
$tag = preg_replace($regex2, "('')", $tag ); //remove the inline font-size style
$tag = preg_replace($regex3, "('$1tag-size-'.($size).' $2$3')", $tag ); //add .tag-size-{nr} class
$tagn[] = $tag;
}
$taglinks = implode('</a>', $tagn);
return $taglinks;
}
there might be more effective solutions, or a way to put it all into one regex; however it works (I am no expert in preg_replace()). can be used at the same time as the slug classslug class filter.