• android 的数学公式图片转换


         在应用中的数学公式是不能直接以文本显示和输入的,包括在一些学习类网站上看到的公式,他们都是以gif图片的形式展示出来的。而怎么样生成各种各样的gif图片形式的数学公式呢,此处未作深入研究,我所知道的是

    输入一些具有一定的规则的latex文本,然后再通过图片生成工具去解析latex字串并生成一个对应的gif公式文件。 

         本次Demo用到的转换服务的网站就是  http://www.codecogs.com/latex/about.php, 如果你胶转换图片的源代码(C++),那你就可以在本地完成这一工作了。

         可以通过这个网站上提供的公式编辑器进行公式编辑获取到gif公式图片, 也可以通过http请求的方式去获取gif图片.

         1、网站上的公式编辑 地址 http://latex.codecogs.com/eqneditor/editor-api.php, 就像这样

         左边框框里的是latex文本, 右边会同时生成的gif图片,这个编辑器能让你很快的知道公式对应的latex文本写法,比较好用啊。

         也可以去latex公式库里查找,根据各个字符的latex文本再拼接出来,这里给出一个链接,http://www.mohu.org/info/symbols/symbols.htm,在里面基本上可以找到你想要的公式的latex写法。

         2、现在来开始我们的demo, 让android 客户端从服务器上取gif图片。

         公式图片转换的请求很简单, 只要在http://latex.codecogs.com/gif.latex?后面跟上latex文本就可以了。比如 http://latex.codecogs.com/gif.latex? frac{a} {ab}就能得到上述a/ab的图片了

    在写url的时候一定要注意,RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。因此url不允许{}空格等字符出现,只要出现肯定报错,而在网页里

    可以出现这些字符,那是因为浏览器自动将它们进行了编码,相信你们之前也应该注意到了浏览器地址栏里出现一些类似于%20%7d这样的符号吧,那就是编码后的16进制码。所以上述url必须要进行本地编码了。

    demo的关键代码如下,像xml, activity那些平常的代码就不贴出来了,这个Demo也不复杂。

    private final String host = "http://latex.codecogs.com/gif.latex?";
    //此处进行16进制编码,这里只做了 {}这4个符号编码
    private String encode(String url){
            url = url.replace("\", "%5c").replace(" ", "%20")
            .replace("{", "%7b").replace("}", "%7d");
            return url;
        }
    // 加载图片
            //etLatex是输入latex文本的edittext
            String latexstr = etLatex.getText().toString().trim();
            String url = host + latexstr; 
            //http请求用的是xutils3, ivMath是显示公式图片的imageview
            x.image().bind(ivMath, encode(url), options, new RequestDataCallback<Drawable>() {
    
                @Override
                protected void success(Drawable drawable) {
                    LogUtil.e("下载成功");
                }
    
                @Override
                protected void fail() {
                    LogUtil.e("下载出错," );
                }
    
                @Override
                protected void finish() {
                    LogUtil.e("下载完成");
                }
    
                @Override
                public void onCancelled(CancelledException arg0) {
                    LogUtil.e("下载取消");
                }
            });

    最后来看看效果

  • 相关阅读:
    找出一个字符串中最长重复次数的子字符串,并计算其重复次数
    p2p 打洞技术
    vmvare centos 7.0 root密码忘记后重置及总结
    Hyperledger Fabric 本地运行的简单示例
    基于docker的 Hyperledger Fabric 多机环境搭建(下)
    基于docker的 Hyperledger Fabric 多机环境搭建(上)
    docker疑难解答 -- 设置远程服务监听
    C#中internal关键字
    SqlParameter.Value = NULL 引发的数据库异常
    Razor语法大全
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/5614769.html
Copyright © 2020-2023  润新知