Вы не должны использовать base64 для изображения. Это связано с тем, что приложение будет зависать на старых устройствах при использовании слишком большого объема памяти.
Лучшее решение - сохранить его в файл.
Ваш лимит загрузки в 4 Мб не связан с плагином камеры.
Вам нужен другой плагин для изменения размера изображения.
Вы можете попробовать это:
Однако из нескольких поисков я не могу найти никаких плагинов, размер которых будет изменен до определенного целевого размера файла. Они обрабатывают только изменения размеров и качества изображения.
Изменить размер изображения довольно просто:
import { ImageResizer, ImageResizerOptions } from '@ionic-native/image-resizer/ngx';
constructor(private imageResizer: ImageResizer) { }
...
let options = {
uri: uri,
folderName: 'Protonet',
quality: 90,
width: 1280,
height: 1280
} as ImageResizerOptions;
this.imageResizer
.resize(options)
.then((filePath: string) => console.log('FilePath', filePath))
.catch(e => console.log(e));
Чтобы удовлетворить ваши требования к размеру файла, я бы сделал две дополнительные вещи:
- Поэкспериментируйте, чтобы увидеть, какие размеры / оценки качества дают изображения около 4 МБ
- Подумайте о добавлении проверки размера файла, которая будет зацикливаться и не будет опускать параметры изменения размера, которые снижают качество или еще больше сжимают его до тех пор, пока он не будет соответствовать вашим требованиям к размеру файла.
Дело в том, что размер выходного файла также зависит от типа изображения. Сложные изображения трудно сжать, поэтому одинаковые размеры + степень сжатия = разные размеры для разных изображений.
Так вот почему может потребоваться второй бит. Кроме того, вы можете просто установить изменение размера, которое обычно составляет около 3 МБ, чтобы дать вам достаточно буфера. Это, вероятно, было бы лучше, поскольку изменение размера изображения в 3-4 раза для достижения целевого размера файла может быть медленным для пользователя.