请教各位大神一个关于 Nodejs sharp .composite 的问题
请教各位大神一个关于 Nodejs sharp .composite 的问题
我想使用 sharp 来生成一个扫雷的地图,大小是由用户输入的,生成后这样:
我是先生成背景图再向上面合成数字和方块 但是如果遇到用户输入的值过大(我测试是超过 12*12)就会报错
Exception code=0xc00000fd flags=0x0 at 0x0000000067F19628
在网上搜了下也没找到类似的错误,请问下还有更适合做这个操作的方式吗?下面是有问题的源码
function create_map(x,y) {
return new Promise((resolve, reject) => {
var map_list = [],coordinate_list = [],buffer_svg = []
var in_x = x * 15 + 15
var in_y = y * 15 + 15
var k_x = 15,k_y = 15
var img_data = fs.readFileSync("static_img/l_b.png")
var max_num = y
//生成 svg 文本配置
var attributes = {fill: 'black', stroke: ''};
var options = {x: 0, y: 2,letterSpacing:0, fontSize: 12, anchor: 'left top', attributes: attributes};
//按照最大边来生成 svg 数字
if (x > y) {
max_num = x
}
//生成 svg 文本图片并转换为 Buffer 格式
for(var i = 0; i < max_num; i++){
let svg = textToSVG.getSVG((" "+i).substr(-2), options);
buffer_svg.push(Buffer.from(svg))
}
// x 轴定位数字
for(var i = 0; i < x;i++){
coordinate_list.push("{input:buffer_svg["+i+"],left:"+(i*15+15)+",top:0}")
}
// y 轴定位数字
for(var i = 0; i < y;i++){
coordinate_list.push("{input:buffer_svg["+i+"],left:0,top:"+(i*15+15)+"}")
}
for(var i = 0; i < y; i++){
k_x = 15
for(var k = 0; k < x; k++){
map_list.push("{input:img_data,left:"+k_x+",top:"+k_y+"}")
k_x += 15
}
k_y += 15
}
var temp_script = `function (sharp,img_data,resolve,buffer_svg) {
sharp({
create: {
width: ${in_x},
height: ${in_y},
channels: 4,
background: { r: 192, g: 192, b: 192, alpha: 1 }
}
})
.composite(
[${map_list}]
)
.png()
.toBuffer()
.then(data => {
sharp(data)
.composite(
[${coordinate_list}]
)
.toFile('./temp_image/tp_.jpg', (err, info) => {
if (err) {
console.log(err)
resolve(false)
}else{
resolve(true)
}
})
})
}`
return Function('"use strict";return (' + temp_script + ')')()(
sharp,img_data,resolve,buffer_svg
);
})
}
1 回复
当然,我很乐意帮你解决关于 Node.js 中 sharp
库的 .composite
方法的问题。sharp
是一个高性能的 Node.js 模块,用于图像处理,支持多种操作,包括图像的合成(.composite
)。
以下是一个简单的例子,展示了如何使用 sharp
的 .composite
方法将一个图像合成到另一个图像上:
const sharp = require('sharp');
// 读取背景图像
sharp('background.png')
.composite([{ input: 'overlay.png', top: 10, left: 10 }]) // 合成 overlay.png 到背景图像上,位置为 (10, 10)
.toFile('output.png') // 保存结果到 output.png
.then(info => {
console.log('Image composition completed:', info);
})
.catch(err => {
console.error('Error during image composition:', err);
});
在这个例子中,background.png
是背景图像,overlay.png
是将要合成的图像。我们通过 .composite
方法指定了 overlay.png
的位置(top
和 left
),并将其合成到背景图像上。
请注意,.composite
方法接受一个数组,每个元素都是一个对象,这些对象包含有关要合成的图像的信息,如 input
(输入图像路径)、top
(顶部位置)、left
(左侧位置)等。
确保你已经安装了 sharp
库,可以通过运行 npm install sharp
来安装。如果你遇到任何问题或需要更详细的帮助,请随时提问!