跳轉到內容

Zoph/使用命令列工具(0.8.2 之前)

來自華夏公益教科書

安裝指令碼

[編輯 | 編輯原始碼]

安裝 Perl 指令碼

[編輯 | 編輯原始碼]

如果您使用的是 Zoph 0.8.2 或更高版本,Perl 指令碼已被 PHP 指令碼取代。請閱讀 CLI in 0.8.2 及更高版本

檢查 Perl 直譯器的路徑

[編輯 | 編輯原始碼]

Perl 指令碼指向 /usr/bin/perl。如果您的 Perl 位於其他位置,請編輯指令碼的第一行。

配置資料庫變數

[編輯 | 編輯原始碼]

編輯zophrc.sample(在binZoph tar.gz 的目錄中),以便以下變數與您在 config.inc.php 中設定的值匹配

$db_host = 'localhost';
$db_name = 'zoph';
$db_user = 'zoph_rw';
$db_pass = 'pass';
$db_prefix = 'zoph_';
$image_dir = '/data/images/';

然後將此檔案移動到您計劃用於匯入照片的使用者的主目錄。可能是您自己的主目錄。將其儲存在名為.zophrc.

您也可以在這個檔案中設定一些預設值,這樣您就不需要總是提供這些命令列引數

$datedDirs = 0;
$copy = 0;
$hierarchical = 0;
$verbose = 0;
$resolveSymlinks = 0;

確保檔案以

1;

結尾,因為 Perl 不喜歡檔案中的最後一個賦值為負值。

將 bin/zophImport.pl 和 bin/zophExport.pl 複製到 /usr/local/bin

[編輯 | 編輯原始碼]

或您 PATH 中的另一個目錄。

安裝手冊頁

[編輯 | 編輯原始碼]

zophImport.pl 的手冊頁位於 man/ 目錄中。將其複製到您的 manpath 中的某個位置,例如 /usr/local/man/man1。


ZophImport.pl

[編輯 | 編輯原始碼]

載入圖片

[編輯 | 編輯原始碼]

本節描述命令列 Perl 匯入器。下一節討論基於 Web 的匯入器。

首先獲取一些要載入的圖片。Zoph 是為了管理數碼相機拍攝的照片而建立的(這些照片在 Exif 頭部包含資訊),但您可以使用任何東西。

您應該在安裝過程中在 config.inc.php 中定義了一個 IMAGE_DIR 變數。在這個示例中,我已經停用了圖片服務,並將我的 IMAGE_DIR 設定為我主目錄中的一個照片目錄。我已經從 zoph/photos(位於 web 伺服器的文件根目錄之外)建立了一個符號連結到這個目錄

> ln -s $HOME/photos /var/www/zoph/photos

您可以根據自己的選擇以任何方式將照片組織到這個目錄下。我將提供兩個可能的系統示例。在實際載入照片之前,請仔細閱讀這些最小示例。

最小示例

[編輯 | 編輯原始碼]

在我的圖片目錄中,我按相機和日期對它們進行分類。我有一個柯達 DC280,所以我建立了一個 dc280 目錄

> pwd
/home/jgeiger/photos
> ls
dc280

以下是一種匯入照片的方法。我將要匯入的照片儲存在我的主目錄中的一個傳入目錄中。

> ls ~/incoming
DCP_0155.JPG
> zophImport.pl --path dc280 --datedDirs ~/incoming/*.JPG

--path 標誌告訴匯入器我希望將照片放到 dc280 目錄中。--datedDirs 標誌意味著照片應該根據照片 Exif 頭部中找到的日期欄位放到一個子目錄中。執行完指令碼後

> ls dc280
2002.03.14
> ls dc280/2002.03.14
DCP_0155.JPG mid thumb

mid/ 和 thumb/ 目錄分別包含縮放到 120 畫素和 480 畫素的圖片。如果您想知道為什麼 zophImport.pl 匯入照片要花很長時間,那是因為它正在建立這兩個較小的圖片(使用 ImageMagick 的 convert 實用程式)。

如果您不想使用日期目錄來儲存您的圖片,這裡有一個替代方法

> pwd
/home/jgeiger/photos
> mkdir christmas_2001
> zophImport.pl --path christmas_2001 ~/incoming/*.JPG
> ls christmas_2001
DCP_0155.JPG mid thumb

相同的結果可以透過以下方式實現

> mkdir christmas_2001
> mv ~/incoming/*.JPG christmas_2001/
> zophImport.pl christmas_2001/*.JPG

透過不指定路徑,匯入器會使用照片當前所在的路徑。

無論您使用哪種方式匯入照片,請確保您從照片目錄(由 IMAGE_DIR 指定)中執行指令碼。匯入器需要能夠從這裡正確提取照片的相對路徑,以便將其儲存到資料庫中。

詳細示例

[編輯 | 編輯原始碼]

最好在匯入過程中設定儘可能多的照片資訊,這樣您就不必在 Zoph 中逐張照片地進行設定。我通常有一個要匯入的圖片目錄,這些圖片都是同時拍攝的,這使得操作變得很容易。

以下是我用於載入我為本教程拍攝的圖片的內容

> pwd
/home/jgeiger/photos
> zophImport.pl --path dc280 --datedDirs --photographer "Jason Geiger" --location "Jason's Apartment" --album "Zoph Tutorial" ~/incoming/*.JPG

要使用 --photographer、--location 和 --album 引數,必須在 Zoph 中事先建立相應的記錄。所以,首先使用 Web 介面建立一個人物/地點/相簿/類別,然後使用它們匯入。

如果您犯了錯誤,或者想新增一些您想新增的資訊,請傳遞 --update 引數,這樣照片就不會被再次插入

> zophImport.pl --update --field rating=5 --field description="This is part of the Zoph tutorial" dc280/2002.03.14/*.JPG

這將為我剛剛匯入的所有照片設定評分和描述。要設定 photos 表中找到的任何欄位(如評分、標題、描述等),請使用 --field NAME=VALUE 標誌。

有關匯入器的更多資訊和示例,請參見本文件末尾的部分。

損壞的圖片

[編輯 | 編輯原始碼]

在載入圖片時犯錯誤並不少見,因此當您檢視 ui 時,會看到一堆損壞的圖片。這很可能是由於路徑無效。要檢查,請在 Zoph 中編輯其中一張圖片,然後單擊底部的“顯示其他屬性”。然後您應該能夠看到路徑資訊。始終應該這樣:WEB_IMAGE_PATH(或 IMAGE_PATH)+ 照片的路徑欄位 + 照片的名稱反映了照片的位置。

您可以使用匯入器來更正損壞圖片的路徑

> zophImport.pl --update --path 'dc280/2002.03.14' dc280/2002.03.14/*.JPG

如果您仍然看到損壞的圖片,請檢查檔案和目錄的許可權。

命令列選項

[編輯 | 編輯原始碼]

以下列出了匯入時可設定的所有欄位

  • --datedDirs (將照片放在 YYYY.MM.DD 目錄中)
  • --hierarchical (將照片放在分層日期目錄中 (YYYY/MM/DD) (>v0.5) 您需要也指定 --datedDirs 引數,否則此選項將無效。
  • --update (更新現有照片)
  • --updateSize (更新照片的寬度、高度和大小。隱含 --update.)
  • --updateExif (重新解析並載入 Exif 標題。隱含 --update.)
  • --useIds (使用 photo_ids 而不是檔名來標識要更新的照片)
  • --noThumbnails (不生成縮圖)
  • --album ALBUM
  • --category CATEGORY
  • --photographer "FIRST_NAME LAST_NAME"
  • --location PLACE_TITLE
  • --people "FIRST_NAME LAST_NAME, FIRST_NAME LAST_NAME"
  • --path PATH (相對於 IMAGE_DIR)
  • --field NAME=VALUE (用於設定標題、檢視、描述、評分、級別等)
  • --verbose (提供有關正在進行操作的更多資訊) (>v0.5)
  • --copy (複製而不是移動照片) (>v0.5)
  • --resolveSymlinks (在匯入之前解析符號連結) (>=0.7)

照片可以出現在多個相簿和類別中,並且多個人可以出現在一張照片中。要處理這種情況,您可以傳遞一個逗號分隔的列表,也可以多次設定標誌。實際上,您可以對類別和人員使用逗號分隔的列表,但不能對相簿使用(因為我意識到我的許多相簿名稱中包含逗號,並且還沒有構建轉義機制)。

Exif 欄位

[編輯 | 編輯原始碼]

如果可以從 Exif 標題中提取以下欄位,則將自動設定這些欄位。如果您願意,也可以使用 --field NAME=VALUE 標誌手動設定這些欄位。這絕不是可能的 Exif 標題的詳盡列表,但這些是我使用過的相機設定的標題,或者是我收到報告的標題。解析度和大小欄位將被忽略,這些資訊將在匯入器中由 Image::Size 提取。

  • date
  • time
  • camera_make
  • camera_model
  • flash_used
  • focal_length
  • exposure (曝光和曝光時間標題)
  • compression (JPEG 過程和 JPG 質量標題)
  • aperture
  • iso_equiv
  • metering_mode
  • ccd_width
  • focus_dist
  • comment

更多示例

[編輯 | 編輯原始碼]

以下是一些示例。

向照片新增人員列表(如果人員很多,通常使用匯入器而不是透過 Web UI 來執行此操作更快)

> zophImport.pl --update --people "Jason Geiger, Virginia Wolfe" dc280/2002.03.14/DCP_0155.JPG

人員應從左到右、從前到後排列。這些人必須已存在於資料庫中。如果找不到其中一個姓名,匯入器會發出警告。

更新目錄中的所有照片

> find dc280/ -iname "*.jpg" -maxdepth 2 | xargs zophImport.pl --updateSize

如果您旋轉或調整了一批影像的大小,並且想要將正確的尺寸匯入 Zoph,您可能需要使用上面所示的 --updateSize 選項。指定 maxdepth 可以防止包含縮圖。

從匯入器的 0.3 版開始,您還可以根據照片的 photo_ids 而不是名稱來更新照片。假設您注意到您的照片中有一些序列的位置不正確。您可以在 URL 中看到照片的 photo_id,並且根據該 ID 更新可能比傳遞檔名更簡單。

> zophImport.pl --update --useIds --location "Yuka's House" 1562-1571 1580-1585

從 0.7 版開始,您可以影響 zophImport.pl 處理符號連結的方式。

例如,您有以下檔案 IMG_0001.JPG、IMG_0002.JPG(均拍攝於 2007-01-01)和 LNK_0002.JPG(它是 IMG_0002.JPG 的符號連結)。

如果您使用以下命令匯入這些檔案:

zophImport.pl --datedDirs IMG_0001.JPG LNK_0002.JPG

在 2007.01.01 目錄中,您將有兩個檔案:IMG_0001.JPG 和 LNK_0002.JPG - 它們都是“普通”檔案。您還將擁有 IMG_0002.JPG,它仍位於其原始位置。

如果您使用以下命令匯入這些檔案:

zophImport.pl --datedDirs --resolveSymlinks IMG_0001.JPG LNK_0002.JPG

在 2007.01.01 目錄中,您將有兩個檔案:IMG_0001.JPG 和 IMG_0002.JPG - 它們都是“普通”檔案。您還將擁有 IMG_0002.JPG,它仍位於其原始位置。

減小縮圖大小

[編輯 | 編輯原始碼]

根據 Alan Shutko 的建議,我在 zophImport.pl 的 0.3.1 版中添加了 +profile "*" 到 convert 的呼叫中。(在 0.3.3 中,我註釋掉了此功能,因為對於某些使用者來說,同一張影像生成了多個縮圖。我沒有遇到此問題,可能是 shell 擴充套件問題。對於大多數人來說,它可能有效,所以您可能希望重新啟用此功能。)

來自 http://www.imagemagick.org/www/convert.html

"'+profile "*"' 刪除輸入中可能存在的任何 ICM、Exif、IPTC 或其他配置檔案,這些配置檔案在縮圖中不需要。"

這會導致檔案大小顯著減小。如果您希望保留配置檔案,請從 convert 中刪除此引數。

此外,如果您希望在此更改後重新生成縮圖以節省空間,您可以從影像目錄執行以下命令:

> find . -iname "*.jpg" -a -not -name "mid_*" -a -not -name "thumb_*" | xargs zophImport.pl --update --thumbnails

ZophExport.pl

[編輯 | 編輯原始碼]

Zoph 是一種動態應用程式,與資料庫緊密相連。但有時您需要靜態 HTML 檔案的圖片刻錄到 CD 上或其他用途。Zoph 包含一個 Perl 指令碼 zophExport.pl,它允許您輕鬆建立靜態畫廊。

有許多程式專注於生成此類靜態照片相簿。雖然我包含了一個非常簡單的內建靜態相簿生成器,但 zophExport.pl 主要用於與其他指令碼一起使用。目前支援兩個這樣的程式

這兩者都易於使用,並提供可定製的介面。

在執行匯出器之前,請確保將其配置為使用您的資料庫設定和影像目錄,如安裝文件中所述。

一個快速示例

[編輯 | 編輯原始碼]

以下命令建立用於 album 程式的匯出

> zophExport.pl --dir "~/Winter Pics" --format album --category Snow

匯出器完成後,由您來執行 album。zophExport.pl 打印出執行 album 的示例命令,您可以複製並原樣執行,也可以使用您自己的選項進行更新。

在此簡單示例中,將所有放在“Snow”類別中的照片匯出。在“Winter Pics”目錄中,zophExport.pl 將建立與 Zoph 中所選照片的相簿結構相匹配的目錄結構。

只有兩個必需的引數:要匯出的目錄(--dir),如果不存在將建立此目錄,以及匯出的格式(--format),目前必須是“zoph”、“album”或“bins”。

選擇照片

[編輯 | 編輯原始碼]

要搜尋的欄位與 zophImport.pl 中的欄位相同。例如,您可以說

> zophExport.pl --dir "~/My Album" --format album --album "Boston Trip" --photographer "Jason Geiger" --field rating=5

僅匯出我在波士頓旅行期間拍攝的照片,這些照片的評分為 5 分或更高。預設情況下,相簿的子相簿會自動包含在內(因此,我的“Duck Tour”子相簿也會被匯出)。您可以透過傳遞 --nosubalbums 來停用此功能。類別也是如此(使用 --nosubcategories 來停用)。大多數字段使用等於運算子進行匹配。有兩個例外是評分(預設為 >=)和描述(預設為 like)。

您可能可以透過使用此係統來完成大多數您想做的事情,特別是由於您可以多次執行 zophExport.pl,使用不同的引數,甚至在執行 album 或 bins 生成畫廊之前手動編輯結果。

但是,如果您有一個特別複雜的查詢要執行,您可以使用 --sql 引數直接傳遞它。您的查詢必須從 photos 表中選擇 *,除此之外,它可以是任何內容。如果您傳遞一個 SQL 語句,任何其他約束引數都會被忽略。請確保只傳遞 select 語句,指令碼不會檢查以確保您沒有刪除所有資料。

以下提示:如果您在 Zoph 中執行一個複雜的搜尋,然後只想要匯出這些照片。在轉到結果頁面後,開啟 config.inc.php 並將 DEBUG 設定為 2。然後重新載入結果頁面,您應該在頁面頂部看到兩個 SQL 查詢。複製第一個(計數查詢),並將“count(distinct ph.photo_id)”替換為“ph.*”,附加“order by ph.date asc, ph.time asc”,並將此傳遞給 zophExport.pl,使用 --sql 引數。

選擇要顯示的內容

[編輯 | 編輯原始碼]

預設情況下,zophExport.pl 會匯出有關照片的所有資訊,除了最後修改時間、評分和照片所在的相簿或類別。

要阻止顯示特定欄位,請使用 --noshowFIELD 引數。例如:--noshowlocation 或 --noshowdescription。傳遞 --noshowexif 會阻止顯示任何 Exif 資訊。(但請注意,BINS 程式會自行提取 Exif 資訊)。

匯出器可以使用與 Zoph 相同的語言檔案來翻譯欄位標籤。傳遞 --lang /path/to/php/lang/file 可啟用此選項。

預設情況下,匯出器會建立目錄以反映照片所在的相簿結構。要停用此功能並使所有照片直接顯示在匯出目錄下,請使用 --noalbumdirs 標誌。

簡單匯出

[編輯 | 編輯原始碼]

匯出器包含生成非常簡單的靜態畫廊的功能。要使用簡單匯出器,請將 --format zoph 傳遞給 zophExport.pl。

此格式有兩個優點。首先,它不需要任何額外的軟體。其次是速度。簡單格式速度快得多,因為它使用 Zoph 已經生成的縮圖,而相簿和 BINS 則會生成自己的縮圖。有人可能可以修改相簿或 BINS,使它們能夠重複使用縮圖。

實際上,沒有真正優雅的方法可以更改此匯出器生成的畫廊的外觀。為此,您可能需要編輯 zophExport.pl。新增 CSS 支援並不太難,但我沒有這樣做。我只想花時間重造輪子。

匯出到相簿

[編輯 | 編輯原始碼]

album 由 David Ljung Madison 編寫。 http://marginalhacks.com/Hacks/album/

album 是一個單一的 Perl 指令碼,除了使用 Zoph 時已經擁有的 (ImageMagick 和 Image::Size) 之外,它不需要任何其他東西。有一個 Debian 軟體包可用。

要使用 album,請將 --format album 指定給 zophExport.pl。匯出器將在每個包含影像的目錄中建立一個 captions.txt 檔案。

Album 是可主題化的,網站上提供了一些主題。我建議您下載一個不同的主題,或者自己建立一個,因為預設主題會在縮圖頁面上顯示有關照片的所有資訊,如果您包含描述和 Exif 資料,這可能會相當多。您可以透過將 -theme /path/to/theme/dir 傳遞給 album 來指定主題。

匯出到 BINS

[編輯 | 編輯原始碼]

BINS 由 Jerome Sautret 編寫,基於 Brendan McMahan 編寫的 SWIGS,而 SWIGS 又基於 John Moose 編寫的 IDS。 http://bins.sautret.org/

BINS 由三個 Perl 指令碼組成:一個匯出器和兩個影像/相簿描述編輯器。有一個 Debian 軟體包可用。BINS 需要一些 Perl 模組,如果您需要這些模組,可以從 CPAN 獲取。

要使用 BINS,請將 --format bins 指定給 zophExport.pl。匯出器將為每張照片建立一個 image.jpg.xml 檔案,並在每個目錄中建立一個 album.xml 檔案。

BINS 需要一個源目錄和一個目標目錄。zophExport.pl 將根據您指定的 --dir 建立目標目錄。它還會將 ".tmp" 附加到目標目錄名稱,並建立一個另一個目錄,它將從 Zoph 複製影像到該目錄,並用作 BINS 的源目錄。您可以在 BINS 完成後刪除此臨時目錄。您可以在 BINS 中將源目錄和目標目錄設定為相同的目錄,但您只能對該目錄執行一次 BINS,之後它將開始建立縮圖的縮圖等。

您可以為 BINS 建立一個配置 XML 檔案以供使用。我發現將 defaultSize 引數設定為 0(預設使用小影像)很有用。

華夏公益教科書