分類
软件

简单使用影音管理軟件 digiKam

digiKam 是 KDE 家族的一款影音管理軟件,支持 Linux、Windows 和 Mac 平台。其主要特點有開源、輕鬆處理大量(大於十萬張)照片、高效的處理 raw 和 JPEG并發佈至社交媒體、查看和編輯媒體的元數據等。基於我的使用體驗,我認為 digiKam 確實是一款非常好用又功能強大的媒體管理編輯器。我目前主要使用了給照片和影片添加地理位置信息和批量縮放壓縮圖片這兩個功能,但是其媒體管理功能是操作系統自帶的文件管理器所不具備的,也很好用。自帶的人臉識別功能也挺好玩的。我是在 Windows 平台使用的 7.0.0 版本,繁體中文翻譯的有些問題,但我還是按照軟件里的顯示來記錄吧。

使用 digiKam 爲媒體添加地理位置信息

使用 GPX 文件自動爲媒體添加地理位置信息

首先選中要添加地理位置的媒體,然後在菜單欄選擇 Item > Edit Geolocation(或者按下快捷鍵 Ctrl + Shift + G),之後 Geolocation 編輯器會打開。在地理位置編輯器中,地圖的左下方有一個地球的圖示,在這裏可以選擇地圖爲開放街圖。挨著的兩個圖標是拉近或推遠地圖。GPX 檔案通過最右邊的「 GPS 相關器」中的「載入 GPX 檔」載入。選擇相機時區(如 +8 ),最大時間間隔用默認記得即可(越小越精確,但是可能會匹配不到),然後按下右下角的「關聯」,程序就會自動將地理位置信息關聯到照片中了。左下角的媒體列表可供檢查,沒有問題的話的就按右下角的「 Apply 」將位置信息保存到媒體。如果沒有關聯到則有兩個辦法處理,一是調教關聯的參數,參考官方幫助文檔 The Correlator ,二是手動給文件指定地理位置。

手動爲媒體添加地理位置信息

選擇媒體并按下快捷鍵 Ctrl + Shift + G 打開 Geolocation 編輯器后,放大地圖,將地圖中心設置到目標位置,然後右鍵選擇「複製坐標」,最後在左下角的照片上右鍵,選擇「貼上坐標」。重複上面步驟待所有照片都添加位置信息后就可以按右下角的「 Apply 」將信息寫入文件了。

給媒體添加反向地理定位信息

所謂反向地理定位是指把經緯度轉化為日常使用的城市街道名等。還是在 Geolocation 編輯器中,右側選擇「反向地理定位」,服務的話建議選擇「Open Street Map」,因為 Geonames 沒有開放街圖准。如果是第一次添加反向地理定位,需要為其增加一個根標籤:在標籤樹空白處右鍵,按「新增標籤」,取個名字比如叫「 Location 」,然後在「 Location 」上右鍵,選擇「新增所有地址元素」。然後按下右下角的「Process reverse geocoding」,成功後就可以看到標籤列表中增加了包含國家城市等地名的標籤。當然也可以自定義地理標籤,比如只保留國家和城市。最後不要忘記按下「 Apply 」把信息寫入媒體。

GPS 僅出現在 digiKam 中而沒有保存到文件中?

先選擇要保存地理位置信息的圖片,然後在菜單欄選擇 Item > Write Metadata to file 即可。為什麼要有這麼一步呢,那是因為第一次打開 digiKam 的時候按照推薦,當問及是否要將 digiKam 保存的元數據寫入文件中時,選擇了「什麼也不做(Do nothing)」。如果選擇了「Add infomation to files」應該就無需這一步了,但是 digiKam 提醒說這樣回減慢照片的操作速度,所以我還是每次手動寫入下文件。另外值得一提的是 digiKam 不支持往視頻文件寫入地理位置信息。

執行了 Write Metadata to file 後照片中仍然沒有位置信息?可以檢查下 Settings > Configure digiKam > 左邊 Metadata > Behavior 標籤頁 > Write This Information to the Metadata 中勾上 Geolocaton information (GPS)。

批量自動調整顏色和縮放照片

Emanon 看書的時候用手機拍攝了很多書頁,但是手機拍出來的照片尺寸和文件大小都很大,有些甚至超過 10 MB,對於書頁來說是不必要的。經過 digiKam 自帶的影像編輯器將尺寸縮放 50% 後文件大小能縮小到 1 MB 以內,節省了很多空間,畫質也幾乎看不到變化(畢竟主要是白紙黑字)。但是一共有快兩千張這樣的文件,於是就要用到批處理了。

先選擇要進行批處理的照片,可以從「相簿」頁面直接選取,也可以從「搜尋」頁面搜尋後選取。由於 Emanon 的書頁都是手機拍攝的,我就可以只搜索「讀書筆記」相簿中,相機製造商為「 Sony 」的照片。選中照片後,按下菜單欄 Tools > 批次佇列管理器(或按下快捷鍵 Shift + B)打開批次佇列管理器窗口。需要對照片進行的操作可以通過雙擊右下角的「基本工具」中的對應工具,將其選擇到「指定的工具」中。然後在「指定的工具」中單擊後,就可以在「工具設定值」中調教工具的參數。比如我的這個操作用到兩個動作:顏色自動矯正>標準化和調整大小>使用自訂長度> Use Percentage > 50% 。設置好操作步驟,就可以在左下角的「佇列設定值」中設置保存文件相關的參數。由於我是要覆蓋保存,所以「目標」選擇「使用原始專輯」,「檔案重新命名」選擇「使用原始檔名」,行為中「如果目標檔案已存在」選擇「自動覆寫」並取消勾選「 Save image as a newly created branch 」。「儲存影像」標籤頁可以設置圖片的品質,我在默認值的基礎上將其調高了,JPEG 品質改為 85% 仍然獲得很好的壓縮效果。這些做完後就可以按工具欄的「執行」來處理佇列了。如果想要復用剛才設定的工作流,可以按菜單欄的 Queues > 儲存工作流,下次只需要在「工作流」標籤頁選擇就可以用了。

digiKam 其他小撇步

添加新的文件夾到 digiKam

菜單欄 Settings > 設定 digiKam > 收藏。點擊「本機收藏」後面的「加入收藏」按鈕。

Fedora 使用 AppImage 版 digiKam 提示沒有 libnsl.so.1

190909 直接從 dnf 安裝是 7.1.0 版本,安裝大小接近 1GB,但是 AppImage 是最新版 7.3.0 才只有 215 MB。下載 AppImage 後,在文件屬性裏勾選「可執行」,正常雙擊即可啓動。但是卻沒反應,於是用命令行直接運行 ./digiKam-7.3.0-x86-64.appimage 就提示「digikam: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory」。只需要安裝 libnsl 就可以了——sudo dnf install libnsl。

本文更新於 2024/11/10。

分類
软件

Linux 使用 Python 操作剪切板

還是那個簡繁轉換的需求, zhconv 似乎不能直接給它傳一段文字來轉換,只能轉換文件或者在 Python 中調用。

Fedora

先安裝 xclip 依賴,再安裝 pyperclip:

sudo dnf install xclip
sudo pip3 install pyperclip

然後新建一個 Python 腳本 /home/[YOURNAME]/scripts/s2t.py:

import pyperclip
from zhconv import convert

clipString = pyperclip.paste()
clipStringTC = convert(clipString, 'zh-hant')
pyperclip.copy(clipStringTC)

最後為了方便使用,給腳本設置一個別名

alias t='python3 /home/[YOURNAME]/scripts/s2t.py'

但是如果想讓別名保存下來,以後每次都能用,Fedora 需要把別名加到家目錄的 .bashrc 文件裏:

nano ~/.bashrc
alias t='python3 /home/[YOURNAME]/scripts/s2t.py'

Termux

Termux 無法使用 pyperclip 來操作剪切板,但是可以通過 Termux API 來操作。對應的 Python 這樣:

import subprocess
from zhconv import convert

clipString = subprocess.getoutput("termux-clipboard-get")
clipStringTC = convert(clipString, 'zh-hant')
subprocess.getoutput("termux-clipboard-set \'"+clipStringTC+"\'")

本文更新於 2022/07/29。

分類
软件

安卓手機把短信導出成 JSON 文本

本來打算用 Termux API 中的讀取短信功能,結果官方說谷歌不允許,所以後來找到了 hydrargyrum 開發的 Epistolaire。 Epistolaire 可以把本機的短信和彩信全部導出到 JSON 文本中,使用非常簡單。

本文更新於 2020/08/09。

分類
软件

[18+] Hendroid 同人與變態漫畫瀏覽器

發現一個令人墮落的應用( ͡° ͜ʖ ͡°) Hendroid:Doujinshi & Hentai-Manga archiving and viewing app.

分類
软件

安卓手機使用 dnscrypt proxy

目的:未 root 的安卓 8 手機在 WiFi 和 4G 下使用 dnscrypt-proxy 2 避免 DNS 污染。

跑起來

使用 Termux 來運行 dnscrypt-proxy 2,配置方法參考Fedora使用DNSCrypt。由於手機未 root ,所以無法監聽 53 端口,可以用 5353 替代。配置成功後 dig ft.wupo.info -p 5353 @127.0.0.1 應該可以能正確返回 DNS 查詢。

使用 personalDNSfilter去 F-droid 下載)實現的本地 VPN 來修改系統的DNS查詢,它同時還能攔截廣告。配置非常簡單,只需要在DNS配置欄選中禁用 DNS 服務器查找,並在輸入框中輸入下面一行即可。

127.0.0.1::5050::UDP

日常使用

新建文件 /data/data/com.termux/files/home/scripts/dns.sh 並給予執行權限。

startDns(){
  nohup /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy -config /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy.toml&
  echo "starting dns"
  sleep 10
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 2
}
stopDns(){
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 8
  pkill dnscrypt-proxy
  echo "killed dns"
}

status(){
  vt1="$(ps -ef | grep dnscrypt-proxy | wc -l)"
  vt2=" "
  if [[ $vt1 = "2" ]]; then
    dnsproxyStatus="1"
    vt2="$(dig -p 5353 +short www.v2ex.com @127.0.0.1)"
  else
    dnsproxyStatus="0"
  fi  
}
if [[ $1 = "1" ]]; then
  echo "start"          
  startDns
elif [[ $1 = "2" ]]; then
  echo "restart"  
  stopDns         
  sleep 3           
  startDns  
elif [[ $1 = "0" ]]; then
  echo "stop"
  stopDns
elif [[ $1 = "s" ]]; then
  status
  echo "dns: $dnsproxyStatus | $vt2"   
fi

在 ~/.bash_profile 中增加快捷命令

alias d1='/data/data/com.termux/files/home/scripts/dns.sh 1'
alias d0='/data/data/com.termux/files/home/scripts/dns.sh 0'
alias dt='/data/data/com.termux/files/home/scripts/dns.sh s'

使用的時候,運行 d1 即可啟動 dnscrypt-proxy 服務,並且拉起 personalDNSfilter。運行 d0 則會先拉起 personalDNSfilter,此時需要手動點下 Close 退出 APP,然後會關閉 dnscrypt-proxy 服務。

本文更新於 2021/11/22。

分類
软件

簡易中文簡繁轉換 Python 庫 zhconv

zhconv 提供基于 MediaWiki 和 OpenCC 词汇表的最大正向匹配简繁转换,支持地区词转换:zh-cn, zh-tw, zh-hk, zh-sg, zh-hans, zh-hant。Python 2、3通用。

若要求高精确度,参见 OpenCCopencc-python

用起來方便準確,轉換模式若是 zh-tw 會進行地區詞轉換,如將「软件」轉換為「軟體」。而使用 zh-hant 則只轉換簡繁,如將「软件」轉換為「軟件」。

pip install zhconv
from zhconv import convert
print(convert('他說「我幹什麼不干你事。」', 'zh-cn'))
#他说“我干什么不干你事。”
print(convert('计算机软件', 'zh-tw'))
#計算機軟體
print(convert('计算机软件', 'zh-hant'))
#計算機軟件

命令行工具

python -mzhconv [-w] {zh-cn|zh-tw|zh-hk|zh-sg|zh-hans|zh-hant|zh} < input > output
#如
python -mzhconv zh-hant <山东合村并居的真实情况.txt> 山東合村並居的真實情況.txt

歡迎大家使用我在 Heroku 上部署的在線中文轉換工具

本文更新於 2020/12/31。

分類
软件

火狐开启 DoH 和 ESNI

DNS over HTTPS

DNS (Domain Name Server) 查詢是指將域名轉換成 IP 地址的過程。比如將你要訪問 www.douban.com,DNS查詢後,會告訴瀏覽器豆瓣的服務器IP是162.14.6.67。

普通的 DNS 查詢是明文傳輸的,這意味着你的互聯網服務提供商或者其他監聽網絡的人可以知道你正在訪問什麼網站。

火狐瀏覽器支持加密的 DNS 請求,但這不是默認的開啟的。(比如英國政府就要求它是禁用的,因為它會削弱他們屏蔽一些網站的能力)。

有兩種方法在火狐中啟用DoH,第一種是在 偏好設定 > 一般 > 網路設定 > 開啟 DNS over HTTPS ,開啟即可。第二種是在地址欄輸入

about:config

搜索「trr.mode」,雙擊修改數值為 2:如果 DoH 失敗則用普通 DNS 查詢;或 3:全部使用 DoH 查詢。

network.trr.mode    2

除了默認的 Cloudflare DNS,也可以嘗試使用 OpenDNS 的 DoH 服務,其網址是:https://doh.opendns.com/dns-query 。友情提示:OpenDNS 現在是 Cisco 旗下的了。

Encrypted SNI

當瀏覽器在發起一個 TLS 請求的時候(比如 HTTPS 請求), Server Name Indication (SNI) 會暴露你要連接到域名。你可以通過啟用火狐中的 encrypted SNI 來避免這一點。

在地址欄輸入

about:config

搜索「esni」,雙擊修改數值為 true 。

network.security.esni.enabled    true

可以在 Cloudflare ESNI Checker 進行檢測。如果設置成功,不僅能提升隱私保護,還可以解決由 DNS 污染導致的網絡問題。比如 Medium 和 一些啟用了 Cloudflare CDN 的站點就可以直連了。

本文更新於 2020/08/23。