如何解决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 举报,一经查实,本站将立刻删除。