【发布时间】:2021-08-06 02:00:10
【问题描述】:
我正在使用 Node.Js 并尝试在条件成立时在图像的某些部分周围画线。我实际上是在尝试从 API 的图像响应中勾勒对象。我有一个来自 API 的响应,每当该响应包含“WORD”时,我想画两条线来包裹图像的一部分。最后,我想保存所有绘制的线条并导出图像,现在绘制线条。
我已经设法从 API 获取响应,遍历响应中的对象,并检查对象是否符合过滤条件。然后我设法画了一组线,但我无法确定每次满足条件时如何画线并保存所有生成的图纸。生成的图像上仅绘制了一组线条。我正在使用 Images 包以及 Canvas。
// get image
var ImageDATA = await getImage()
// Get the height, width of the image
const dimensions = sizeOf(ImageDATA.Body)
const width = dimensions.width
const height = dimensions.height
console.log(ImageDATA.Body)
console.log(width, height)
try{
// Call API and log response
const res = await client.detectDocumentText(params).promise();
// set the response as an image and get width and height
var image = images(ImageDATA.Body).size(width, height)
//console.log(res)
res.Blocks.forEach(block => {
if (block.BlockType.indexOf('WORD') > -1)
{
//console.log("Word Geometry Found.");
console.log("FOUND POLYGONS")
ctx.strokeStyle = 'rgba(0,0,0,0.5)';
console.log(block.Geometry.Polygon[0].X)
ctx.beginPath();
ctx.lineTo(width * block.Geometry.Polygon[3].X, height * block.Geometry.Polygon[3].Y);
ctx.moveTo(width * block.Geometry.Polygon[1].X, height * block.Geometry.Polygon[1].Y);
ctx.lineTo(width * block.Geometry.Polygon[2].X, height * block.Geometry.Polygon[2].Y);
ctx.stroke();
}
console.log("-----")
})
// render image
// convert canvas to buffer
var buffer = canvas.toBuffer("image/png");
// draw the buffer onto the image
image.draw(images(buffer), 10, 10)
// save image
image.save("output.jpg");
} catch (err){
console.error(err);}
下面是 Polygon 数组的示例:
[
{ X: 0.9775164723396301, Y: 0.985478401184082 },
{ X: 0.9951508641242981, Y: 0.985478401184082 },
{ X: 0.9951508641242981, Y: 0.9966437816619873 },
{ X: 0.9775164723396301, Y: 0.9966437816619873 }
]
它定义了从左上角开始顺时针移动的边界。
如果有人知道如何实现这一点,我将非常感激。非常感谢您。
【问题讨论】:
-
你能分享
block.Geometry.Polygon数组之一的内容吗,API返回的顶点是顺时针还是逆时针或根本不排序......大多数对象识别API都有的最后一件事这类操作的一些实用方法之王(绘制轮廓)检查文档看看是否有 -
我没有看到绘制边界框的便捷方法,但我已经用多边形数组和顺时针格式更新了我的问题。
标签: javascript node.js canvas