NodeJS - 使用 pdf-image、bluebird、hi-base64、gm 和 image-magic 进行 base 64 图像转换结果反转颜色

问题描述

我有这个代码,它接收一个base64 pdf并在base64中转换为jpg图像......它在主环境中运行,但在开发中生成图片带有倒色(如负片)。 package.json 库在两个分支中是相同的:

"appdynamics": "^4.4.3","axios": "^0.18.0","bluebird": "3.3.4","body-parser": "1.10.2","express": "^4.11.1","fs-extra": "4.0.0","gm": "1.23.0","goo.gl": "0.1.4","hi-base64": "0.2.1","package.json": "^2.0.1","pdf-image": "1.1.0","pdf2json": "1.1.7","request": "^2.88.0","request-promise": "^4.2.2","simple-node-logger": "^0.93.37","uuid-v4": "0.1.0"
const fs = require('fs');
var PDFImage = require("pdf-image").PDFImage;
var bluebird = require('bluebird');
var base64 = require('hi-base64');
var gm = require('gm').subClass({imageMagick: true});

function writeFile(base64data,uuid) {
    return new bluebird.Promise(function(resolve,reject) {
        var pdfFile = __dirname + "/" + uuid + ".pdf";
        var bytes = base64.decode.bytes(base64data.toString());

        var buffer = new Buffer(bytes.length);
        for (var i = 0;i < bytes.length; i++) {
            buffer[i] = bytes[i];
        }

        fs.createWriteStream(pdfFile).write(buffer);
        fs.close;
        resolve({
            "pdfFile": pdfFile,"uuid": uuid
        });
    });
}

function convertToJpg(file,reject) {
        var pdfImage = new PDFImage(file);
        pdfImage.setConvertOptions({
            '-density': '300','-depth': '8','-background': 'white','-flatten': '','-quality': '70','-resize': '50%'
        });
        pdfImage.setConvertExtension("jpg");
        pdfImage.convertPage(0).then(function(imagePath) {
            resolve({
                jpgFile: imagePath,uuid: uuid
            });
        }).catch(function(error) {
            reject(error);
        });
    });
}

function readFile(file,reject) {
        fs.readFile(file,function(err,data) {
            if(err) {
                reject(err);
            } else {
                resolve({
                    data: data,uuid: uuid
                });
            }
        });
    });
}

function deleteFiles(data,reject) {
        fs.unlink(__dirname + "/" + uuid + ".pdf",function(err) {
            reject(err);
        });
        fs.unlink(__dirname + "/" + uuid + "-0.jpg",function(err) {
            reject(err);
        });
        resolve({
            data: data,uuid: uuid
        });
    });
}

var api = {
    getJpg: function(req,res,next) {
        log.info("[getJpgService] URL requested.: " + req.headers.host); 
        var uuidv4 = require('uuid-v4');
        
        log.info("[getJpgService] Getting base64 data ...");       
        var base64data = req.body.bytesBoleto;
        var uuid = uuidv4();

        log.info("[getJpgService] Writing PDF file");
        writeFile(base64data,uuid).then(function(writeResult) {
            log.info("[getJpgService] Converting to Jpg");
            convertToJpg(writeResult.pdfFile,writeResult.uuid).then(function(convertResult) {
                log.info("[getJpgService] Reading Jpg file");
                readFile(convertResult.jpgFile,convertResult.uuid).then(function(readResult) {
                    log.info("[getJpgService] Deleting temp file");
                    deleteFiles(readResult.data,readResult.uuid).then(function(deleteResult) {
                        res.contentType("image/jpg");
                        res.status(200).send(deleteResult.data);
                    });
                    log.info("[getJpgService] Boleto Jpg generated.");
                });
            }).catch(function(error) {
                res.status(500).send(error);
            });
        });
    }
};

module.exports = api;

1- 我试过在运行此命令行的 docker 文件中安装 ghostscript:

RUN yum install -y gcc ImageMagick ImageMagick-devel ghostscript

2- 并更改某些版本的库,但产生相同的效果

我不太了解 node,但我必须解决这个问题……有人知道吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)