请教各位大神一个关于 sharp .composite 的问题
資深大佬 : xiyuesaves 2
我想使用 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 ); }) }
大佬有話說 (0)