[英]node.js: gm throws spawn E2BIG error when passed too much data
以下代碼引發錯誤:
const COUNT = 2528; // 2527 works, 2528 errors
const gm = require('gm').subClass({ imageMagick: true });
const brokenData = [];
for (let i = 0; i < COUNT; i++) {
brokenData.push([
Math.random() * 500, Math.random() * 500
]);
}
const tile = gm('./blank-tile.png')
.resize(500, 500)
.fill("red");
brokenData.forEach((point) => {
tile.drawCircle(point[0], point[1], point[0] + 4, point[1]);
});
tile.write(__dirname + '/test.png', (err) => {
if (err) {
throw err;
}
console.log('success');
});
根據評論,繪制2527個圓是可以的,但會在2528個圓上引發錯誤。 每次至少在我的機器上都是一樣的。
這是錯誤:
Error: spawn E2BIG
at ChildProcess.spawn (internal/child_process.js:358:11)
at Object.spawn (child_process.js:533:9)
at spawn (/Users/callumacrae/Sites/testing-gm/node_modules/cross-spawn/index.js:17:18)
at gm._spawn (/Users/callumacrae/Sites/testing-gm/node_modules/gm/lib/command.js:224:14)
at /Users/callumacrae/Sites/testing-gm/node_modules/gm/lib/command.js:101:12
at series (/Users/callumacrae/Sites/testing-gm/node_modules/array-series/index.js:11:36)
at gm._preprocess (/Users/callumacrae/Sites/testing-gm/node_modules/gm/lib/command.js:177:5)
at gm.write (/Users/callumacrae/Sites/testing-gm/node_modules/gm/lib/command.js:99:10)
at Object.<anonymous> (/Users/callumacrae/Sites/testing-gm/test.js:21:6)
at Module._compile (internal/modules/cjs/loader.js:688:30)
我假設它來自gm內的某個地方,因為我沒有提供任何長參數列表!
無論我使用imagemagick還是graphicsmagick,都會發生相同的事情。 節點版本10.13.0。
有任何想法嗎?
我對node-gm並不是很熟悉,但是我有一種感覺.drawCircle(x1, y1, x2, y2)
方法只是附加了一個命令行參數-draw "circle x1,y1 x2,y2"
。 因此,在2527年之后繪制命令將超出參數緩沖區。
使用ImageMagick,如果您有大量繪制命令,則可以寫入文件並告訴繪制命令從文件中讀取。
該文件看起來像...
# circles.txt
circle x1,y1 x2,y2
circle x1,y1 x2,y2
circle x1,y1 x2,y2
circle x1,y1 x2,y2
並使用符號( @
)前綴引用文件。
convert ... -draw @cicles.txt ...
因此,您也可以創建一個臨時文件,編寫繪圖命令,然后調用。
const tile = gm('./blank-tile.png')
.resize(500, 500)
.fill("red")
.draw("@circles.txt");
但是我不確定node-gm是否支持此功能,和/或許多現代系統使用默認的安全協議禁用了MVG
和TXT
。 值得調查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.