It seems like these are python indexing/slicing mistakes!
Your line
train_image_paths = folder_data[:int(len_data*train_size)]

will take all the items in folder_data up to (not including) int(len_data*train_size). This is a valid approach.
However, the valid and test splits, achieved with folder_data[int(len_data*val/test_size)], will return you the item at position int(len_data*val_size). When you get the len of a single item, which is of type str, it will return the length of this object, in this case, the length of the path to the file.
I recommend that you look up Python indexing and slicing behaviour on google to achieve what you want!