当前位置: 首页 > news >正文

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

相关文章:

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

本代码需要最新版 godking.conn 库&#xff0c;请自行下载&#xff01; 如果没有安装 odbc for sqlite 驱动&#xff0c;可以使用 godking.conn.driver.sqlite3.install() 安装。 也可以在此下载自行安装&#xff1a;http://www.chengxu.online/show.asp?softid267 1、将js…...

数据结构学习笔记 双向链表

……接上文 6. 双向链表 6.1 特性 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式结构 操作&#xff1a;增删改查 建立双向链表结构体&#xff1a; //双向链表的节点定义 typedef int datatype;typedef struct node_t{datatype data;//数据域 struct node_t *next;//…...

深度学习作业十 BPTT

目录 习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度&#xff0e; 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时&#xff0c; 分析其可能存在梯度爆炸的原因并给出解决方法&#xff0e; 习题6-2P 设计简单RNN模型&#xff0…...

html+css+JavaScript实现轮播图

html+css+JavaScript实现轮播图 实现思路 要实现一个轮播图功能,我们需要HTML来构建结构,CSS来设计样式,以及JavaScript来添加交互功能。下面我将分别分析这三个部分是如何协同工作来实现轮播图的。 HTML - 结构 HTML部分定义了轮播图的基本结构,包括图片列表、指示器和…...

Python+onlyoffice 实现在线word编辑

onlyoffice部署 version: "3" services:onlyoffice:image: onlyoffice/documentserver:7.5.1container_name: onlyofficerestart: alwaysenvironment:- JWT_ENABLEDfalse#- USE_UNAUTHORIZED_STORAGEtrue#- ONLYOFFICE_HTTPS_HSTS_ENABLEDfalseports:- "8080:8…...

PostgreSQLt二进制安装-contos7

1、安装依赖 yum install -y gcc readline readline-devel zlib-devel net-tools perl wget numactl libicu-devel bison flex openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel openldap openldap-devel 2、创建目录 mkdir -p /data/postgresql/{…...

Neo4j启动时指定JDK版本

项目使用jdk1.8&#xff0c;同时需要安装neo4j5.15版本&#xff0c;使用jdk17. 1.mac或者liunx&#xff0c;找到neo4j目录bin的下neo4j文件 设置JAVA_HOME: 2.windows,找到bin下面的neo4j.bat文件 set "JAVA_HOME{JDK文件目录}" 重启后生效。...

kanzi3.6.10 窗口插件-美化绑定内容

文章目录 1. 创建kanzi窗口插件2. 业务逻辑3. 关键代码3.1 获取绑定信息3.2 解析绑定3.3 动态生成富文本控件 4. 安装 背景&#xff1a;kanzi的节点绑定信息是黑色的&#xff0c;看起来非常费劲&#xff0c;如果能代码高亮显示&#xff0c;对开发会很有帮助。 美化前 美化后 …...

利用tablesaw库简化表格数据分析

tableaw是处理表格数据的优秀工具。它提供了一组强大而灵活的功能&#xff0c;使操作、分析和可视化数据表变得容易。在这篇博文中&#xff0c;我们将介绍tableaw的主要特性、如何使用这些特性&#xff0c;以及如何使用tableaw处理表格数据的一些示例。 tablesaw简介 tableaw…...

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…...

【JavaWeb后端学习笔记】MySQL的数据查询语言(Data Query Language,DQL)

MySQL DQL 1、DQL语法与数据准备1.1 DQL语法1.2 数据准备 2、基础查询2.1 查询指定字段2.2 查询返回所有字段2.3 给查询结果起别名2.4 去除重复记录 3、条件查询3.1 条件查询语法3.2 条件查询案例分析 4、分组查询4.1 分组查询语法4.2 分组查询案例分析 5、排序查询5.1 排序查询…...

360 最新Android面试题及参考答案

一个 activity 只能有一个进程么【对进程的理解】 在 Android 中,一个 Activity 并不只能有一个进程。进程是操作系统进行资源分配和调度的一个独立单位。 从原理上来说,Android 系统允许开发者通过在 AndroidManifest.xml 文件中的<activity>标签设置 android:process…...

《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)

文章目录 1. 最近最久未使用算法的工作原理2. 最近最久未使用算法示例3.LRU算法实现3.1 LRU的页面链表实现3.2 LRU的活动页面栈实现3.3 链表实现 VS 堆栈实现 1. 最近最久未使用算法的工作原理 最近最久未使用页面置换算法&#xff0c;简称 LRU&#xff0c; 算法思路&#xff…...

ES6新增了哪些特性(待更新)

1.let&#xff0c;const 1.1.var&#xff0c;let&#xff0c;const的区别 1.1.1 var存在变量提升&#xff0c;let和const不存在。 1.1.2 let和const只能在块作用域里访问。 1.1.3 同一作用域下let和const不能声明同名变量&#xff0c;而var可以。 1.1.4 const定义常量&am…...

剖析一下自己的简历第二条

剖析一下自己的简历第二条 背景前置说明可能会被问到的问题 背景 剖析一下自己简历, 增加对一些专业知识的掌握. 我的简历第二条是这样写的: “2. 熟悉JVM、JMM&#xff0c;包括内存模型&#xff0c;垃圾回收机制&#xff0c;了解其基本调优技巧并具备线上调优经验。”. 前置…...

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…...

性能测试基础知识jmeter使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 性能指标 1. 并发数 (Con…...

Ceph文件存储

Ceph文件存储1.概念:数据以文件的形式存储在存储介质上&#xff0c;每个文件都有一个唯一的文件名并存储在一个目录结构中。提供方便的文件访问接口&#xff0c;支持多种文件操作&#xff0c;如创建、删除、读取、写入、复制等。用于存储和管理个人文件&#xff0c;如文档、图片…...

Hive分区表新增字段并指定位置

Hive分区表新增字段并指定位置 1、Hive分区表新增字段2、CASCADE关键字3、历史分区新增列为NULL问题 1、Hive分区表新增字段 Hive分区表新增字段并指定位置主要分为两步&#xff1a;新增字段和移动字段 1&#xff09;新增字段 ALTER TABLE table_name ADD COLUMNS (col_name …...

关系型数据库(RDBMS)与非关系型数据库(NoSQL)应用场景

关系型数据库适用于事务性、强一致性和结构化数据场景&#xff1b;非关系型数据库则在高并发、大数据、非结构化数据场景中表现更优&#xff1b;数据量和并发量增加时&#xff0c;应通过分库分表、缓存、集群扩展等手段进行优化。 1. 在什么样的业务场景下&#xff0c;你会优先…...

Kindle Comic Converter:漫画爱好者的终极电子阅读器优化工具

Kindle Comic Converter&#xff1a;漫画爱好者的终极电子阅读器优化工具 【免费下载链接】kcc KCC (a.k.a. Kindle Comic Converter) is a comic and manga converter for ebook readers. 项目地址: https://gitcode.com/gh_mirrors/kc/kcc 你是否曾经尝试在Kindle或其…...

AI大模型Agent面试,超详细(附答案)!

AI大模型Agent面试&#xff0c;超详细&#xff08;➕答案&#xff09;&#xff01;假如你从2026年开始学大模型&#xff0c;按这个步骤走准能稳步进阶。 接下来告诉你一条最快的邪修路线&#xff0c; 3个月即可成为模型大师&#xff0c;薪资直接起飞。阶段1:大模型基础阶段2:RA…...

Vue3最佳实践:编写高质量代码的指南

Vue3最佳实践&#xff1a;编写高质量代码的指南 前言 各位前端小伙伴&#xff0c;不知道你们有没有遇到过这种情况&#xff1a;项目越来越大&#xff0c;代码越来越难维护&#xff01; 我曾经加入过一个Vue3项目&#xff0c;代码混乱不堪&#xff0c;维护成本极高。后来我引入了…...

Escrcpy终极指南:简单高效的Android图形化投屏完整方案

Escrcpy终极指南&#xff1a;简单高效的Android图形化投屏完整方案 【免费下载链接】escrcpy &#x1f4f1; Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否厌倦了复杂的命令行操…...

c++生产者消费者者模式笔记-1阻塞问题

生产者消费者模式是并发编程的核心模式之一&#xff0c;核心是想要提高程序的运行效率。 这里记录一下自己的思考&#xff0c;使用通俗易懂的语言&#xff0c;和以日志记录为例&#xff0c;解读生产者消费者模式&#xff0c;并实现生产者消费者模式。 将生产者消费者模式的核心…...

Android Studio中文界面完整汉化指南:三步打造母语开发环境

Android Studio中文界面完整汉化指南&#xff1a;三步打造母语开发环境 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为And…...

AI行业的“伦理困境”:隐私保护、算法偏见与失业问题

在人工智能技术飞速发展的今天&#xff0c;软件测试行业正经历着前所未有的变革。AI测试工具的广泛应用&#xff0c;极大提升了测试效率&#xff0c;改变了传统测试流程。然而&#xff0c;技术进步的同时&#xff0c;一系列伦理困境也随之而来&#xff0c;隐私保护、算法偏见与…...

从芯片接口时序谈起:手把手教你用set_input_delay给FPGA/ASIC的输入端口‘建模’

从芯片接口到时序约束&#xff1a;系统级视角下的set_input_delay实战解析 在数字芯片设计中&#xff0c;接口时序约束是连接芯片内部逻辑与外部物理世界的关键桥梁。当我们面对一个DDR内存控制器或高速SPI传感器接口时&#xff0c;如何确保芯片能够准确捕获来自外部器件的数据…...

智慧零售技术架构解析:从智能终端到边缘计算,如何重塑购物体验

1. 智慧零售的“科技感”从何而来&#xff1f;最近&#xff0c;一段关于智能购物车的视频火了。视频里&#xff0c;消费者推着一辆看似普通&#xff0c;实则“暗藏玄机”的购物车在超市里穿梭&#xff0c;无需排队&#xff0c;扫码即走&#xff0c;最后在出口处轻松完成支付。这…...

TLV320AIC3254音频编解码器:从DSP算法到低功耗设计的嵌入式开发全解析

1. 项目概述&#xff1a;从一颗音频编解码器芯片说起最近在做一个需要高保真音频采集与播放的项目&#xff0c;选型时又一次把目光投向了德州仪器&#xff08;TI&#xff09;的音频编解码器产品线。这次的主角是TLV320AIC3254&#xff0c;一颗在专业音频、消费电子和工业领域都…...