Zoph/使用命令列工具(0.8.2 之前)
| 這個太舊了。任何人都不應該再使用 0.8.1 或更早的版本 |
如果您使用的是 Zoph 0.8.2 或更高版本,Perl 指令碼已被 PHP 指令碼取代。請閱讀 CLI in 0.8.2 及更高版本。
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 不喜歡檔案中的最後一個賦值為負值。
或您 PATH 中的另一個目錄。
zophImport.pl 的手冊頁位於 man/ 目錄中。將其複製到您的 manpath 中的某個位置,例如 /usr/local/man/man1。
本節描述命令列 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 標題中提取以下欄位,則將自動設定這些欄位。如果您願意,也可以使用 --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
Zoph 是一種動態應用程式,與資料庫緊密相連。但有時您需要靜態 HTML 檔案的圖片刻錄到 CD 上或其他用途。Zoph 包含一個 Perl 指令碼 zophExport.pl,它允許您輕鬆建立靜態畫廊。
有許多程式專注於生成此類靜態照片相簿。雖然我包含了一個非常簡單的內建靜態相簿生成器,但 zophExport.pl 主要用於與其他指令碼一起使用。目前支援兩個這樣的程式
- album (http://marginalhacks.com/Hacks/album/)
- BINS (http://bins.sautret.org/)
這兩者都易於使用,並提供可定製的介面。
在執行匯出器之前,請確保將其配置為使用您的資料庫設定和影像目錄,如安裝文件中所述。
以下命令建立用於 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 由 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(預設使用小影像)很有用。