NodeJS и Sharp, ошибка BMP в PNG: входной файл содержит неподдерживаемый формат изображения - PullRequest
0 голосов
/ 24 мая 2019

Я использую четкую серверную сторону для подготовки фотографий к веб-приложению.В настоящее время цель состоит в том, чтобы загрузить изображение (формат BMP), загрузить его в острие nodejs, преобразовать в PNG, изменить его размер (уменьшить) и сохранить обратно на диск.Код следующий:

  if(resize_pictures){

      (...)

      console.log('Reducing image size ... ');
      fs.readdirSync(input_folder).forEach(file => {
            tmp_input_path = path.join(input_folder, file)
            tmp_output_path = path.join(tmp_folder_reduced, file)

            //Resize
            sharp(tmp_input_path)
                .png() // Convert to png
                .resize(target_width,null)
                .flatten()
                .toFile(tmp_output_path,
                function(err){
                    if(err){
                    console.log("Error at reducing size / converting picture : ")
                    console.log(err)
                    console.log(tmp_input_path);
                    console.log(tmp_output_path);
                    return;
                    }
                })
    })
    console.log('Image reduction completed.');

enter image description here

Я получаю эту ошибку:

Reducing image size ... 
Image reduction completed.
Error at reducing size / converting picture : 
[Error: Input file contains unsupported image format]
/home/user/<folder>/16c93ac9f297376b1b44eeeecff141b1f59a239d.bmp
/home/user/<folder>/TMP/16c93ac9f297376b1b44eeeecff141b1f59a239d.bmp

Выходная папка остается пустой.

На самом деле я не понимаю, почему: пути правильные, и поэтому к ним можно получить доступ.Изображения хранятся на диске, пути напрямую рассчитываются на стороне сервера (поэтому проблем с кодированием нет, как я мог бы где-то видеть в этой проблеме).

У кого-нибудь есть идея или решение?

1 Ответ

0 голосов
/ 24 мая 2019

Кажется, что резкий не может обрабатывать изображения BMP.(См .: https://github.com/lovell/sharp/issues/1255)

Поэтому я переключаюсь на Jimp (См .: https://www.npmjs.com/package/jimp):

  console.log('Reducing image size ... ');
  fs.readdirSync(input_folder).forEach(file => {
        let tmp_input_path = path.join(input_folder, file)
        let tmp_file = file.substr(0, file.lastIndexOf(".")) + ".png";
        let tmp_output_path = path.join(tmp_folder_reduced, tmp_file)

        if(fs.existsSync(tmp_input_path)){
            console.log("File exist ! ")
        }

        //Resize
        Jimp.read(tmp_input_path)
            .then(image => {
                image
                .resize(target_width, Jimp.AUTO)
                .write(tmp_output_path)
            })
            .catch(err => {
                console.log("Error at reducing size / converting picture : ")
                console.log(err)
                console.log(tmp_input_path);
                console.log(tmp_output_path);
            });
...