f-spot升級後無法開啟之前匯入的照片問題

在linux環境下的照片管理上,本身是f-spot的愛好者,前陣子把f-spot的最新版本編譯出來後(一口氣從0.4升到0.8),發現使用新版本的f-spot有一個很大的問題,就是開啟f-spot之後無法開啟之前舊版本匯入的照片。只要一點開舊版本匯入的照片時就會crash掉,f-spot自己就整個關掉了。


昨天抽時間看了錯誤訊息主要看到的錯誤訊息是

“Unhandled ExceptionGLib.GException: Value for PNG text chunk Thumb::URI cannot be converted to ISO-8859-1 encoding.”

到官網的論壇看了一些其他使用者的說明後發現,舊版本的f-spot在存照片路徑是用iso-9501編碼的,而新版本是用UTF8編碼的。舉個例子來說,如果你的照片存放路徑是 /home/mich/photo/假日出遊,舊版本在資料庫中存放的記錄就是 files:///home/mich/photo/假日出遊 ,而新版本存放的卻是 files:///home/mich/photo/%E5%81%87%E6%97%A5%E5%87%BA%E9%81%8A 


也就是這個差別導致了新版本開不了舊版本的照片,所以根本的解決方法就是把資料庫中的路徑資料轉換成UTF8編號。這個解決方法在官網上有人指出了要修正那一個Table的欄位,也因此省下了追查的時間。


在要開始修改之前請務將資料庫檔案備份一份,萬一改壞或玩掛了才能回復。

在gnome的環境下f-spot的資料庫檔案是在 "~/.config/f-spot"資料夾下的photos.db,因為f-spot是用sqlite來做資料庫,所以直接用sqlite3 photos.db開啟即可以開始對資料庫進行操作。

找出table photos和table photo_versions中的base_uri欄位中有中文的欄位做修正即可。sql的語法如下:


update photos set base_uri = replace(base_uri,'file:///home/kkion/photo/台北兒童樂園員山分園/','file:///home/kkion/photo/%E5%8F%B0%E5%8C%97%E5%85%92%E7%AB%A5%E6%A8%82%E5%9C%92/');


update photo_versions set base_uri = replace(base_uri,'file:///home/kkion/photo/台北兒童樂園員山分園/','file:///home/kkion/photo/%E5%8F%B0%E5%8C%97%E5%85%92%E7%AB%A5%E6%A8%82%E5%9C%92/');


不過以我的例子,照片上萬張,路徑幾千個,是無法一個個下指令的,所以是另外寫個小工具把資料全撈出來改好後再存回去的。在試改的過程中發現似乎符號是不變的,例如上述中的冒號和斜線都沒有變更為UTF8編碼,而 ` 符號也不需轉換,目錄名稱中的空白要改為%20而不是 +    ,都是要特別注意的規則。


其實若是在匯入照片時是按照f-spot本身的規則來存照片根本不會有這個問題,主要是我大都仍把資料夾名稱用中文命名才造成的。


所以自己造業還是得自己收尾,把經驗和各位分享,若有其他f-spot的愛好者也有同樣的問題,可以少走一些冤枉路。


因為工具在f-spot命名規則還不確定(其實是懶得去看source code)的情況下,做好的工具也就不便分享,若是有朋友需要可以來信,但使用上風險極高而且沒有任何保證的哦!呵。。。。




沒有留言:

張貼留言

dnf upgrade fails with Error: GPG check FAILED

 OS: Fedora 36 今天在做  dnf  更新的時候,突然有很多 package 都出現簽章問題無法更新。類似如下的錯誤訊息 .... is not signed. ...... is not signed. ......... is not...