Как сжать BMP без потери MIME TYPE и всех заголовков?
У меня есть BMP-файл, в нём есть только чёрный и белый цвета, разрешение 1200 x 500, - обычный текст и баркод.
Как уменьшить размер файла хотя бы до 200кб, без потери MIME TYPE и всех заголовков? Есть какие либо работающие варианты или библиотеки?
Ответы (1 шт):
Предлагаю воспользоваться библиотекой node-gd
GD graphics library, libgd, C++ bindings for Node.js. With node-gd you can easily create, manipulate, open and save paletted and true color images from and to a variety of image formats including JPEG, PNG, GIF and BMP.
Для демонстрации работы программы я сгенерировал bmp-файл со штрихкодом, его размер равен 2,3M.
const path = require('path');
const gd = require('node-gd');
const filesrc = path.join(__dirname, './EAN13code.bmp');
const filedest = path.join(__dirname, './EAN13code.gd.bmp');
(async () => {
const img = await gd.openBmp(filesrc);
img.grayscale();
img.trueColorToPalette(0, 4);
await img.saveBmp(filedest, 1);
img.destroy();
})();
Получился файл размером 60K.
Вся суть сводится к трансформации "широкой" палитры применяемой в файле в "узкую" палитру методом trueColorToPalette и сохранении с компрессией методом saveBmp. Кстати, colorsWanted можно установить значение 2 и тогда картинка получается размером 53K.