欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > aardio - 汉字笔顺处理 - json转sqlite转png

aardio - 汉字笔顺处理 - json转sqlite转png

2024/12/26 20:58:45 来源:https://blog.csdn.net/sdlgq/article/details/144259989  浏览:    关键词:aardio - 汉字笔顺处理 - json转sqlite转png

本代码需要最新版 godking.conn 库,请自行下载!

如果没有安装 odbc for sqlite 驱动,可以使用 godking.conn.driver.sqlite3.install() 安装。

也可以在此下载自行安装:http://www.chengxu.online/show.asp?softid=267

1、将json数据转为sqlite数据库,以后可以抛弃json文件。用数据库搜索汉字非常方便。

2、从数据库中搜索某个汉字的笔顺信息,进行绘图,如下图。

演示代码:

import console;
import godking.conn;
import godking.paint;
import web.json;
import brotli;
var bro = brotli();// 将json文件内容写入数据库
var conn,err = godking.conn.openSqlite3("\hanzi.db");
if !conn {console.dump("打开数据库失败!pos:1",err);console.pause();return ; 
}
if !conn.existsTable("stroke"){conn.exec("CREATE TABLE [hanzi](hanzi TEXT,data BLOB);");
}
import fsys.file;
var f = fsys.file("\all.json");
var num,ok = 0,0;
var rs = conn.rs("hanzi")
do{ //共9574个汉字var t = f.readTo("}")ok = #t;if #t {num++;//提取汉字信息t += "}";t = ..string.trimleft(t,", {");t = web.json.parse("{"+t+"}")var hanzi  = table.keys(t)[1]var strokes = table.tostring(t[hanzi]):"";strokes = ..string.replace(strokes,'\n','');var data = ..raw.buffer(bro.compress(strokes,11));//加入数据库rs.AddNew();rs.setValue(1,hanzi);rs.setValue(2,data);rs.UpDate();//验证写入结果var bbb = rs.getValue(2);console.dump(num,"压缩数据大小:"++#data,"写入数据大小:"++#bbb,"写入结果:"++(#bbb===#data?"成功":"失败"))}if num===100 {console.print("仅写入前100个用作演示...")break;}
} while (ok);
//关闭文件、记录集、数据库连接
rs.close();
conn.close();
f.close();// 定义生成汉字笔顺图片的函数
var savePic = function(hanzi,strokes){import godking.paint;var p = godking.paint(1024,1024/*高度*/,/*背景颜色*/,/*背景图像*/);p.scale(1 /*宽度缩放比例*/,-1/*高度缩放比例*/,/*选项*/);p.translate(0 /*水平偏移像素*/,-1024*7/8/*垂直偏移像素*/,/*选项*/);for(i=1;#strokes;1){var path = p.path( 1 /*0 交叉填充 1 全填充*/);var x,y = 0,0;var s = string.split(strokes[i]," ");for(n=1;#s;1){select(s[n]) {case "M" {x,y = tonumber(s[n+1]),tonumber(s[n+2]);}case "L" {var x1,y1 = tonumber(s[n+1]),tonumber(s[n+2]);path.addLine(x,y,x1,y1);x,y = x1,y1;}case "Z" {path.closeFigure();}case "Q" {var cx,cy,x1,y1 =tonumber(s[n+1]),tonumber(s[n+2]),tonumber(s[n+3]),tonumber(s[n+4]);path.addBezier(x,y,cx,cy,x1,y1,x1,y1);x,y = x1,y1;}case "C" {var cx1,cy1,cx2,cy2,x1,y1 =tonumber(s[n+1]),tonumber(s[n+2]),tonumber(s[n+3]),tonumber(s[n+4]),tonumber(s[n+5]),tonumber(s[n+6]);path.addBezier(x,y,cx1,cy1,x1,y1,cx2,cy2);x,y = x1,y1;}}}p.fillPath(path,0xFFFF0000/*填充颜色或brush对象*/);p.saveToFlie("\"+hanzi+"笔顺"+i+".png");if i<#strokes p.fillPath(path,0xFF000000/*填充颜色或brush对象*/);path.delete();}p.close();
}// 从数据库读取汉字笔顺信息并绘制图片
var conn,err = godking.conn.openSqlite3("\hanzi.db");
if !conn {console.dump("打开数据库失败!!pos:2",err);console.pause();return ; 
}
var t = conn.getTable("select * from [hanzi] where hanzi='䠀'",false/*数组*/,/*开始行*/,/*总行数*/,/*格式化参数*/);
if t[[1]] {var hanzi = t[1]["hanzi"];var data = eval(bro.decompress(t[1]["data"]));strokes = data["strokes"]radStrokes = data["radStrokes"]medians = data["medians"]console.dump(hanzi,#strokes,#medians,#radStrokes)savePic(hanzi,strokes)console.dump("已生成笔顺图片,请查看。")
}
conn.close();
console.pause(,"全部演示完毕,请查看代码文件目录内生成的笔顺图片。");

all.json 文件可以从下面附件中下载:

https://aardio.online/attach-download-357.htm

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com