Нашел способ с использованием canvas, говорят здорого увеличивает (более 1/3) размер
Ну как бы... это не потому что через canvas а потому что base64. Зато быстро и просто.
Чисто теоритически вы можете загрузить файл в Blob и там уже заэнкодить в base64, гуглите, готовые функции есть.
чтобы потом использовать на странице
А вот это я не рекомендую. Это годный способ только для маленьких картинок, иконки например, и то для иконок есть более удобные подходы (svg, icon fonts). Большие картинки, если вам надо как-то их оффлай держать в кэше, лучше держать в локальном file storage (есть библиотеки, например
image cache для хрома). Base64 картинки довольно много жрут ресурсов.