跳转到内容

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 扩展问题。对于大多数人来说,它可能有效,所以您可能希望重新启用此功能。)

来自 https://imagemagick.org.cn/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(默认使用小图像)很有用。

华夏公益教科书