असल में मैं दो अलग छवि एक टेम्पलेट छवि "पृष्ठभूमि" और 2 है के साथ एक पोस्टर बनाकर किया गया था कुछ पाठ के साथ शीर्ष छवि है। मैंने gm
के साथ प्रयास किया लेकिन मैंने छवि की गुणवत्ता खो दी। कोई मुझे छवि गुणवत्ता में सुधार के लिए इनपुट के रूप में बफर डेटा का उपयोग करने के लिए मार्गदर्शन करता है। मैंने कोशिश की लेकिन बफर डेटा को इनपुट के रूप में कैसे पास किया जाए, यह नहीं पता। तो अंततः मैंने कमांड स्ट्रिंग के साथ नोड बाल प्रक्रिया का उपयोग करने का निर्णय लिया। यहां नमूना कोड है जो मैं आपके साथ साझा कर रहा हूं।
var fs = require('fs');
var gm = require("gm");
var exec = require('child_process').exec;
var IMAGEFILEPATH = "/images";
var gmcreateImage = function() {
var imageConfig = {"topimage":{"density":"300x300","startx":925,"starty":650,"width":575,"height":825},
"offers": [
{"startx": 75, "starty": 850, "msg": "SAVE 5$", "textcolor": "#4f61ac", "font": "Arial Bold", "fontsize":34,"stroke":{"color":"#4f61ac","width":4}},
{"startx": 75, "starty": 970, "msg": "per gallon", "textcolor": "#4f61ac", "font": "Arial Bold", "fontsize":34,"stroke":{"color":"#4f61ac","width":4}},
{"startx": 75, "starty": 1150, "msg": "With the purchase of", "textcolor": "black", "font": "Arial", "fontsize":18,"stroke":{"color":"black","width":1}},
{"startx": 75, "starty": 1260, "msg": "any Pepsi Z0 S2", "textcolor": "black", "font": "Arial", "fontsize":16,"stroke":{"color":"black","width":1}},
{"startx": 75, "starty": 1370, "msg": "on all flavours", "textcolor": "black", "font": "Arial", "fontsize":16,"stroke":{"color":"black","width":1}},
{"startx": 75, "starty": 1480, "msg": "Ask for details.", "textcolor": "black", "font": "Arial", "fontsize":18,"stroke":{"color":"black","width":1}}
]};
var addLast=imageConfig.topimage.last;
var commandStr = "gm convert '-page' '+0+0' '-units' 'PixelsPerInch' '-density' '" + imageConfig.topimage.density + "' '" + IMAGEFILEPATH+ "/template.jpg' ";
var imageActualPosition={};
imageActualPosition["x"] = imageConfig.topimage.startx;
imageActualPosition["y"] = imageConfig.topimage.starty;
if (!addLast) {
commandStr += " '-page' '+" + imageActualPosition["x"] + "+" + imageActualPosition["y"] + "' '" + IMAGEFILEPATH + "/top.jpg' ";
}
var offers = imageConfig.offers;
for (var i in offers) {
var color = offers[i].textcolor;
var startX = offers[i].startx;
var startY = offers[i].starty;
var font = offers[i].font;
var fontSize = offers[i].fontsize;
var msg = offers[i].msg;
var offerStr = "";
if (offers[i].stroke) {
offerStr += " '-stroke' '" + offers[i].stroke.color + "' '-strokewidth' '" + offers[i].stroke.width + "'";
}
offerStr += " '-fill' '" + color + "' '-pointsize' '" + fontSize + "' '-draw' 'text " + startX + " " + startY + " \"" + msg + "\"'";
commandStr += offerStr;
}
if (addLast) {
commandStr += " '-page' '+" + imageActualPosition["x"] + "+" + imageActualPosition["y"] + "' '" + IMAGEFILEPATH + "/top.jpg' ";
}
var finalImage="done.jpg";
commandStr += " '-mosaic' '-quality' '100' '" + IMAGEFILEPATH + finalImage + "'";
exec(commandStr, function(err, stdout, stderr) {
if (err) {
console.log("Error while executing gm commands" + err);
return;
} else {
console.log("Done See your image");
}
})
};
gmcreateImage();
वही काम करने की कोशिश कर रहा है, मैं aws lambda पर समग्र उपयोग करना चाहता हूं इसलिए मुझे पूरी तरह से स्ट्रीम के साथ काम करना है। मैं सोच रहा था कि आप धाराओं का नाम दे सकते हैं और उनका पुन: उपयोग कर सकते हैं लेकिन अब तक कोई सफलता नहीं है। – jgeerts
'gm' पर भी 'पृष्ठ' फ़ंक्शन है - इसलिए 'in (" - page ")' का उपयोग करने के बजाय, बफर को' पेज' फ़ंक्शन पर सीधे पास करें। मुझे लगता है कि काम करना चाहिए। – treecoder