Zum besseren Verständnis:
Fakt ist daß btoa und atob für Binaries ungeeignet sind. Also für das was Base64 machen soll, nämlich aus Binaries Zeichenketten und umgekehrt und genau das können diese beiden builitinfunktionen nicht.
Ergo beschränkt sich der Nutzen dieser Funktionen darauf aus Zeichenketten Zeichenketten zu machen.
http://rolfrost.de/Base64.js ist dagegen eine Library die nicht nur mit Zeichenketten sondern mit richtigen Binaries funktioniert. D.h., die Methode Base46.encode() bekommt eine Binary als ArrayBuffer übergeben. Neben ArrayBuffer kennt JS noch den Blob bzw. File als eine weitere Möglichkeit für die JS interne Verarbeitung von Binaries.
Fazit: Binaries in JS liegen entweder als Blob oder als ArrayBuffer vor und nicht etwa als Strings oder gar Zeichenketten. btoa und atob hingegen kennen weder ArrayBuffer noch Blob. Und demzufolge auch keine Binaries!
MfG