Как закодировать/декодировать строку в Base64 с помощью JavaScript?

Привет всем! У меня есть скрипт на PHP, который умеет кодировать PNG-картинки в строку Base64. Теперь хочу сделать то же самое на JavaScript, но не знаю как.

С открытием файлов проблем нет, а вот с кодированием затык. Не привык работать с бинарными данными. Может кто-нибудь подсказать, как это сделать?

Буду благодарен за любую помощь или примеры кода. Заранее спасибо!

в js это делается довольно просто. для кодирования в base64 используй функцию btoa(), а для декодирования - atob(). например:

let encoded = btoa(‘привет мир’);
console.log(encoded); // выведет закодированную строку

let decoded = atob(encoded);
console.log(decoded); // выведет ‘привет мир’

только учти что эти функции работают только с ascii символами. для юникода нужно использовать encodeURIComponent() перед кодированием. удачи с проектом!

Для картинок можно использовать canvas. Вот как это сделать:

  1. Создаешь canvas элемент
  2. Рисуешь на нем изображение
  3. Вызываешь toDataURL() у canvas

Получишь base64 строку. Удобно, что работает прямо в браузере. Можно даже настроить качество сжатия, если нужно уменьшить размер. Попробуй, должно сработать!

для работы с base64 и бинарными данными в js советую посмотреть на FileReader api. вот пример как прочитать файл и закодировать в base64:

const file = input.files[0];
const reader = new FileReader();
reader.onload = () => {
const base64 = reader.result.split(‘,’)[1];
console.log(base64);
};
reader.readAsDataURL(file);

это работает для любых типов файлов, не только png. декодировать можно через atob(), как уже сказали.