本帖最后由 dcl1214 于 2025-12-9 08:54 编辑
很多ocr服务器接受图片的时候需要base64的数据,例如: Umi-ocr ,如何将图片转换为base64呢,请看下文
 - (defun $tu-pian-base64$ (imagePath / adoStream xmlDoc node result)
- ;调用示例:(setq base64-data ($tu-pian-base64$ "C:/123.png"))
- (setq adoStream (vl-catch-all-apply
- 'vlax-create-object
- (list "ADODB.Stream")
- )
- )
- (setq xmlDoc (vl-catch-all-apply
- 'vlax-create-object
- (list "MSXML2.DOMDocument")
- )
- )
- (if (vl-catch-all-error-p adoStream)
- (progn (princ "无法创建ADODB.Stream对象")
- (setq adoStream nil)
- )
- )
- (if (vl-catch-all-error-p xmlDoc)
- (progn (princ "无法创建XML文档对象") (setq xmlDoc nil))
- )
- (if (and adoStream xmlDoc)
- (progn
- (vl-catch-all-apply
- 'vlax-put-property
- (list adoStream "Type" 1)
- )
- (vl-catch-all-apply 'vlax-invoke (list adoStream "Open"))
- (vl-catch-all-apply
- 'vlax-invoke
- (list adoStream "LoadFromFile" imagePath)
- )
- (setq node (vl-catch-all-apply
- 'vlax-invoke-method
- (list xmlDoc "createElement" "temp")
- )
- )
- ; 将二进制数据写入XML节点
- (vl-catch-all-apply
- 'vlax-put-property
- (list node "dataType" "bin.base64")
- )
- (vl-catch-all-apply
- 'vlax-put-property
- (list
- node
- "nodeTypedValue"
- (vlax-invoke-method adoStream "Read" -1)
- )
- )
- (setq result (vl-catch-all-apply
- 'vlax-get-property
- (list node "text")
- )
- ) ; 获取Base64字符串
- (vl-catch-all-apply
- 'vlax-invoke-method
- (list adoStream "Close")
- ) ; 清理对象
- (vl-catch-all-apply 'vlax-release-object (list adoStream))
- (vl-catch-all-apply 'vlax-release-object (list xmlDoc))
- result
- )
- )
- result
- )
|