我想使用 sharp 来生成一个扫雷的地图,大小是由用户输入的,生成后这样:
我是先生成背景图再向上面合成数字和方块
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
);
})
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.