从已在base64中编码的画布面板中提取文本

时间:2014-01-27 19:15:42

标签: javascript html5 canvas html5-canvas base64

我通过使用html画布并使用context.filltext存储经度和纬度以及context.drawimage来存储图像,从而对图像进行地理标记。然后我使用todataURL()函数对base64中的画布进行编码,我已将其保存到我的数据库中。我已经从我的数据库加载了这些数据,有没有办法解码数据并在javascript中提取经度和纬度?

2 个答案:

答案 0 :(得分:1)

不,你拥有的是一个简单的图像文件,就像任何其他图像文件一样。画布不会将您绘制的图形与其分开。文本(变为栅格化)。

您必须:

  • 将数据作为元数据提供给您的服务器
  • 在您的图片上运行OCR此元数据不是一个选项(与canvas或html5本身无关)。
  • 将原始图像发送到服务器并在那里提取EXIF数据并进行老化。

例如,您可以创建一个对象,其中包含来自toDataURL()和long / lat数据的数据uri:

var geoImage = {
    image: canvas.toDataURL(),
    longitude: "xxxx",
    latitude: "yyyy"
}

然后将其编码为JSON并将其发送到服务器:

var serverString = JSON.stringify(geoImage);

如果您无法访问原始的长/纬数据,我只会建议使用OCR作为另一种选择。凭借在该领域的一些经验,我知道你面临着相当多的挑战,但它并不稳定。一个非常好的OCR模块需要花费很多钱,而便宜的OCR模块会给你带来很多错误。如果背景清晰,字体易于分析等等,还取决于您在图像上绘制文本的方式。

显而易见的第三种选择可能因质量原因而更好。当您将图像绘制到画布上然后提取它时,您将失去质量。由于大多数相机仅以JPEG或RAW格式存储图像,因此只有一个选项可以使用canvas,JPEG,这意味着它需要通过“有损”压缩进行重新压缩。您当然可以提取为PNG,但在大多数情况下会增加文件大小。

您也可以在服务器端提取EXIF数据。然后,您可以将原始图像与老化版本一起存储。

答案 1 :(得分:1)

不使用光学字符识别软件。

当您将文本绘制到画布时,它将停止为文本,并开始成为以人类观察者将其识别为字符的形状排列的像素集合。

解释如何实现光学字符识别的算法将远远超出这个答案的范围。我建议你:

  • 找一个可以在命令行中使用的光学字符识别软件
  • 将数据库中的所有图像转储到图像文件
  • 写一个脚本
    • 为每张图片运行OCR软件
    • 查看它是否识别看起来像地理坐标的文本(注意误报)
    • 使用您找到的坐标更新数据库中的条目。

我只希望你在简单的背景和图像中的固定位置上显示文本,否则OCR软件在查找和识别它时会遇到问题。