顯示具有 epub 標籤的文章。 顯示所有文章
顯示具有 epub 標籤的文章。 顯示所有文章

星期三, 9月 07, 2011

Android上的電子書

昨天想起介紹 Kobo eBooks 的那篇文章說 Kobo eBooks 可以吃 epub 格式的電子書,可是一直都忘記試,今天早上上班時,就試了一下,發現閱讀的效果真的比 FBReader 好很多。fbreader用來對付一般的小說是綽綽有餘,但遇到有程式碼的epub,整個就爛給你看,而且是爛的可怕。Kobo eBooks 的處理就好很多,網站上有提供免費電子書可下載,也有像類似 foursquare 的打怪機制,讓你讀書跟打怪一樣,讀的愈多,拿的勳章愈多。
Kobo eBooksKindle 比的話,在記憶體少的機器上運行ok。每次開 Kindle,就常讓我的Asus A50重開機,重開機之後再去開啟程式才能正常進入,常常讓我不知道該不該賭一下,我想這應該是Linux Kernel 發現記憶體不足而砍應用程式的關係。
要說 Kobo eBooks 缺點的話,大概就是沒辦法查字典,Kindle是可以查的。Kindle 在長按單字時,他會自動去查英英字典,第一次查的時候,程式會告訴你要額外送你一本英英字典,下載以後,就可以有自動查單字的功能,畫面是以 pop window 的方式呈現,再點選,會進到英英字典,顯示更多資訊。
如果沒意外的話,我想我以後都會拿 Kobo eBooks 來讀 epub。
除了上面的3個電子書以外,我還有試過 iReader,是同事推薦我的,Market 裡的評價不錯,但iReader網站上的書太多,一時不知道要下載什麼,大多都是簡體中文,又考慮到翻譯品質良莠不齊,所以乾脆就移除掉了。
我還有額外下載獨立電子書的 app:明朝的那些事儿-全集黄河鬼棺-全集,這兩個也不錯,作者是同一個,作者有在積極改版,可是我覺得最早用的那版還不錯用,不太需要改。目前明朝的那些事儿-全集還沒看完,才看到第五集,等看完才會看黄河鬼棺-全集。這兩本雖說是免費,但實際上應該算是盜版吧~

星期三, 3月 02, 2011

AlbiteReader後續修正

J2ME裡的英文字型寬度不是固定的,所以顯示英文字的時候會怪怪的。利用 HashTable 去存英文字的寬度,至於中文字型還是固定,這樣英文顯示就比較漂亮一點了。

大致上就這樣,更新以後的檔案放在同一個地方,需要的人自己下載。

另記用 Sigil 的心得,儘量使用 p、blockquote 來做編排,段落的呈獻會比較漂亮,避免使用 br 來做斷行。簡單說,大致的編排就是儘量使用 html 搭配 css,而不要用硬幹的方式。

星期五, 2月 11, 2011

AlbiteReader的字型處理

org.albite.font.AlbiteFont
  1. ctor 開啟字型檔以後,就開始處理 (這邊是開 .alf)
  2. 格式
    • byte 1: line spacing
    • byte 2: line height
    • byte 3-6: glyphs (character range)
    • byte 7-8: maxium width
    • byte 9-12: character count
    • 接下來就是循序讀出各字元的 x, y, w, h, xo, yo, xa
      • byte 1-2: character
      • byte 3-4: x
      • byte 5-6: y
      • byte 7-8: width
      • byte 9-10: height
      • byte 11-12: xoffset
      • byte 13-14: yoffset
      • byte 15-16: xadvance 下一個字元跟目前字元的間隔
    • 再放到對應 character 的 glyphs 陣列裡 (glyphs[character]=new Glyph(x, y, w, h, xo, yo, xa)
  3. 讀完 .alf(字型資訊),接著開啟 .ali,這邊是真正的字型資料,先把整個 .ali 讀取到記憶體裡 (由 AlbiteImageMono 處理,同樣也有檔頭,但較簡單,前4個bytes是magic number,接著的兩個bytes是width,然後再來的兩個bytes是height)
  4. 把必要的字元先處理起來,像是 ' ', '?', '-'
  5. 其他的字元都是畫的時候,依據 glyphs 資訊去存取記憶體裡的 buffer


照這樣看起來,如果要依樣畫葫蘆,將中文字型製作成 .ali 的話,會遇到的問題是記憶體問題。AlbiteFont 會將整個 .ali 載入到記憶體裡,製作出來的 .ali 會有多大呢? 假設字的大小是12x12,要完整收文泉驛的20932個字,那大約是3MB左右。依照 SE T700 的規格,內部記憶體只有 25MB。未知的是可用記憶體,所以必須考慮最壞的情況,記憶體會不足!!

會使用自己的字型,我想應該是考慮到平台相容的問題。

星期四, 2月 10, 2011

epub二三事

今天剛好看到這個百年千書計劃,裏面提供了一堆epub,於是就想說,可不可以放到我的手機SE T700上看呢?

就上getjar上找,就找到了Albite Reader。很高興地下載程式跟epub下來放到手機上,可以執行,但是結果卻都是一堆 ?

這到底怎麼回事,首先我試了軟體的編碼設置功能,沒有用。我懷疑 epub 裡的編碼是big5,而軟體的編碼選項裡卻沒有 big5,所以就上網找了一下,看要怎麼編輯 epub。看到這篇:Edit ePub eBooks with Your Favorite HTML Editor,才知道原來 epub 其實是個 zip 檔案,將副檔名更名為 zip 以後,就可以解開去看了。然後也發現了不錯的編輯工具:sigil。不過都沒有用,epub 裡的編碼是正確的。

那麼問題就出在軟體本身了,幸好軟體有開放原始碼而官方網站也有說明。大致看了官方網站的說明以後,才明白,問題出在字型上。軟體本身沒有包中文字!!!!這就麻煩了。官方網站也有說怎麼製作字型,不過他所使用的 Bitmap font generator 卻沒有支援中文字,因此無法產生出必要的 .png 跟 .xml 檔案,也沒辦法繼續後面的步驟,將 .png, .xml 轉成 .alf, .ali 了。

傷腦筋,看來如果要能用,一個方法就是寫程式去做出 Bitmap font generator 的功能,將字型轉成 .png, .xml,另外一個方法就是改寫 Reader 裡處理字型的部份了。

我想寫工具來轉字型應該是比較快的方法,在 AlbiteFontBuilder網頁裡有提到 .xml 的格式,看起來是將字型都顯示在 .png 以後,.xml 則是描述字(glyph)在 .png 裡的位置跟寬高。得到這個以後,應該就可以接著用 AlbiteFontBuilder 做出 .alf 與 .ali 了。