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?\tfrac{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("下載取消");
            }
        });

最后來看看效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM