标签 照片 下的文章

点击打开了很多相似的相片?同样的相片保存在不同文件夹里?我理解这种感受。

在相机里点击相片,通过 WhatsApp 发送。然后又备份相片,于是在 WhatsApp 和系统相册里就会存下同样的拷贝。这个很烦人,很乱而且额外占用不必要的存储空间。

我是在翻看我岳父的相片收藏时遇到这个问题的。下面是我如何找出重复相片并删除的做法。

使用 digiKam 来找出和删除重复相片

digiKam 是一个 用来管理和收集相片的自由开源应用。它主要是方便摄影师,但并不是说一定要专业玩相机的人才能用。

我可以演示如何使用这个工具来查找重复相片,然后根据需要删除重复内容。

第一步

首先是安装 digiKam。它是一个很流行的应用程序,应该可以在软件中心里直接安装,或者通过你的发行版的包管理器安装。

通过软件中心安装 digikam

第二步

在第一次运行 digiKam 时,它会要求你选择相片保存的位置。然后会创建一个 SQLite 数据库并开始导入图片。

第三步

在相片导入完成以后,在文件菜单里选择工具->查找重复图片

在文件菜单里,选择工具->查找重复图片

第四步

根据你所收集的图片数量,会需要一些时间。之后,你应该可以在左侧边栏里看到有重复的所有相片。在选中图片后,重复的相片会在右侧边栏里显示出来。

digiKam 找到的重复图片

在上面的截图里,我在左侧选中的图片有四张一样的。其中有一张图片标记了“ 参考图片 Reference image ”,不过还是由你来确定哪张是原始的,哪张是复制的。

重复的相片默认会按保存位置(比如文件夹)来分组。可以在文件菜单里选择视图->分类显示选择其他方式。

要删除重复相片的话,选中有侧边栏里的相片并按下删除键。

可以重复这个操作,选择左侧边栏里的图片,一个个删除重复图片。会花太长时间?有个方法可以一次删除多个重复内容。

在 digiKam 里删除多个重复图片

如果想一次把所有重复相片全删掉的话,可以在左侧边栏里选中所有相片。

然后,打开文件菜单->视图->排序,然后选择按相似程度。

删除多个重复相片

之后会在底部显示所有参考图片。然后可以在右侧边栏里选中所有没有标记重复的相片,并按下删除按钮。

额外提示:可以在垃圾桶里恢复已删除的相片

意外总是有的。人们经常会不小心误删了相片。这也是为什么 digiKam 不会立刻彻底删除图片。而是选择在保存相片的文件夹下创建隐藏的 .dtrash 文件夹,然后将“已删除”的相片移动到里面。

在应用程序界面上,你也可以看到这个垃圾桶文件夹。在里面可以找到你“删除”的相片,然后根据需要可以选择恢复。

digiKam 的垃圾桶文件夹

希望你能喜欢这个关于在 Linux 上查找和删除重复图片的简短教程。类似的,你可能会想了解 使用 GUI 工具在 Linux 系统里搜索重复文件

有任何问题和建议,请在下方留评。


via: https://itsfoss.com/find-remove-duplicate-photos-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:zpl1025 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

  • 更新 2014-05-14:增加了一些具体实例
  • 更新 2015-03-16:根据照片的 GPS 坐标过滤图片
  • 更新 2016-08-29:以新的 filetags --filter 替换已经过时的 show-sel.sh 脚本
  • 更新 2017-08-28: geeqier 视频缩略图的邮件评论
  • 更新 2018-03-06:增加了 Julian Kahnert 的链接
  • 更新 2018-05-06:增加了作者在 2018 Linuxtage Graz 大会上 45 分钟演讲的视频
  • 更新 2018-06-05:关于 metadata 的邮件回复
  • 更新 2018-07-22:移动文件夹结构的解释到一篇它自己的文章中
  • 更新 2019-07-09:关于在文件名中避免使用系谱和字符的邮件回复

每当度假或去哪游玩时我就会化身为一个富有激情的摄影师。所以,过去的几年中我积累了许多的 JPEG 文件。这篇文章中我会介绍我是如何避免 供应商锁定(LCTT 译注: 供应商锁定 vendor lock-in ,原为经济学术语,这里引申为避免过于依赖某一服务平台)造成受限于那些临时性的解决方案及数据丢失。相反,我更倾向于使用那些可以让我投入时间和精力打理,并能长久使用的解决方案。

这一(相当长的)攻略 并不仅仅适用于图像文件:我将进一步阐述像是文件夹结构、文件的命名规则等等许多领域的事情。因此,这些规范适用于我所能接触到的所有类型的文件。

在我开始传授我的方法之前,我们应该先就我将要介绍方法的达成一个共识,那就是我们是否有相同的需求。如果你对 raw 图像格式十分推崇,将照片存储在云端或其他你信赖的地方(对我而言可能不会),那么你可能不会认同这篇文章将要描述的方式了。请根据你的情况来灵活做出选择。

我的需求

对于 将照片(或视频)从我的数码相机中导出到电脑里,我只需要将 SD 卡插到我的电脑里并调用 fetch-workflow 软件。这一步也完成了图像软件的预处理以适用于我的文件命名规范(下文会具体论述),同时也可以将图片旋转至正常的方向(而不是横着)。

这些文件将会被存入到我的摄影收藏文件夹 $HOME/tmp/digicam/。在这一文件夹中我希望能遍历我的图像和视频文件,以便于整理/删除、重命名、添加/移除标签,以及将一系列相关的文件移动到相应的文件夹中

在完成这些以后,我将会浏览包含图像/电影文件集的文件夹。在极少数情况下,我希望在独立的图像处理工具(比如 GIMP)中打开一个图像文件。如果仅是为了旋转 JPEG 文件,我想找到一个快速的方法,不需要图像处理工具,并且是以无损的方式旋转 JPEG 图像。

我的数码相机支持用 GPS 坐标标记图像。因此,我需要一个方法来对单个文件或一组文件可视化 GPS 坐标来显示我走过的路径。

我想拥有的另一个好功能是:假设你在威尼斯度假时拍了几百张照片。每一个都很漂亮,所以你每张都舍不得删除。另一方面,你可能想把一组更少的照片送给家里的朋友。而且,在他们嫉妒的爆炸之前,他们可能只希望看到 20 多张照片。因此,我希望能够定义并显示一组特定的照片子集

就独立性和避免锁定效应而言,我不想使用那种一旦公司停止产品或服务就无法使用的工具。出于同样的原因,由于我是一个注重隐私的人,我不想使用任何基于云的服务。为了让自己对新的可能性保持开放的心态,我不希望只在一个特定的操作系统平台才可行的方案上倾注全部的精力。基本的东西必须在任何平台上可用(查看、导航、……),而全套需求必须可以在 GNU/Linux 上运行,对我而言,我选择 Debian GNU/Linux。

在我传授当前针对上述大量需求的解决方案之前,我必须解释一下我的一般文件夹结构和文件命名约定,我也使用它来命名数码照片。但首先,你必须认清一个重要的事实:

iPhoto、Picasa,诸如此类应被认为是有害的

管理照片集的软件工具确实提供了相当酷的功能。它们提供了一个良好的用户界面,并试图为你提供满足各种需求的舒适的工作流程。

对它们我确实遇到了很多大问题。它们几乎对所有东西都使用专有的存储格式:图像文件、元数据等等。当你打算在几年内换一个不同的软件,这是一个大问题。相信我:总有一天你会因为多种原因而更换软件

如果你现在正打算更换相应的工具,你会意识到 iPhoto 或 Picasa 是分别存储原始图像文件和你对它们所做的所有操作的(旋转图像、向图像文件添加描述/标签、裁剪等等)。如果你不能导出并重新导入到新工具,那么所有的东西都将永远丢失。而无损的进行转换和迁移几乎是不可能的。

我不想在一个会锁住我工作的工具上投入任何精力。我也拒绝把自己绑定在任何专有工具上。我是一个过来人,希望你们吸取我的经验。

这就是我在文件名中保留时间戳、图像描述或标记的原因。文件名是永久性的,除非我手动更改它们。当我把照片备份或复制到 U 盘或其他操作系统时,它们不会丢失。每个人都能读懂。任何未来的系统都能够处理它们。

我的文件命名规范

这里有一个我在 2018 Linuxtage Graz 大会上做的演讲,其中详细阐述了我的在本文中提到的想法和工作流程。

我所有的文件都与一个特定的日期或时间有关,根据所采用的 ISO 8601 规范,我采用的是日期戳时间戳

带有日期戳和两个标签的示例文件名:2014-05-09 Budget export for project 42 -- finance company.csv

带有时间戳(甚至包括可选秒)和两个标签的示例文件名:2014-05-09T22.19.58 Susan presenting her new shoes -- family clothing.jpg

由于我使用的 ISO 时间戳冒号不适用于 Windows NTFS 文件系统,因此,我用点代替冒号,以便将小时与分钟(以及可选的秒)区别开来。

如果是持续的一段日期或时间,我会将两个日期戳或时间戳用两个减号分开:2014-05-09--2014-05-13 Jazz festival Graz -- folder tourism music.pdf

文件名中的时间/日期戳的优点是,除非我手动更改它们,否则它们保持不变。当通过某些不处理这些元数据的软件进行处理时,包含在文件内容本身中的元数据(如 Exif)往往会丢失。此外,使用这样的日期/时间戳开始的文件名可以确保文件按时间顺序显示,而不是按字母顺序显示。字母表是一种完全人工的排序顺序,对于用户定位文件通常不太实用。

当我想将标签关联到文件名时,我将它们放在原始文件名和文件名扩展名之间,中间用空格、两个减号和两端额外的空格分隔 --。我的标签是小写的英文单词,不包含空格或特殊字符。有时,我可能会使用 quantifiedselfusergenerated 这样的连接词。我倾向于选择一般类别,而不是太过具体的描述标签。我在 Twitter hashtags、文件名、文件夹名、书签、诸如此类的博文等诸如此类地地方重用这些标签。

标签作为文件名的一部分有几个优点。通过使用常用的桌面搜索引擎,你可以在标签的帮助下定位文件。文件名称中的标签不会因为复制到不同的存储介质上而丢失。当系统使用与文件名之外的存储位置(如:元数据数据库、点文件备用数据流等)存储元信息通常会发生丢失。

当然,通常在文件和文件夹名称中,请避免使用特殊字符、变音符、冒号等。尤其是在不同操作系统平台之间同步文件时。

我的文件夹名命名约定与文件的相应规范相同。

注意:由于 Memacsfilenametimestamp 模块的聪明之处,所有带有日期/时间戳的文件和文件夹都出现在我的 Org 模式的日历(日程)上的同一天/同一时间。这样,我就能很好地了解当天发生了什么,包括我拍的所有照片。

我的一般文件夹结构

在本节中,我将描述我的主文件夹中最重要的文件夹。注意:这可能在将来的被移动到一个独立的页面。或许不是。让我们等着瞧 :-) (LCTT 译注:后来这一节已被作者扩展并移动到另外一篇文章。)

很多东西只有在一定的时间内才会引起人们的兴趣。这些内容包括快速浏览其内容的下载、解压缩文件以检查包含的文件、一些有趣的小内容等等。对于临时的东西,我有 $HOME/tmp/ 子层次结构。新照片放在 $HOME/tmp/digicam/ 中。我从 CD、DVD 或 USB 记忆棒临时复制的东西放在 $HOME/tmp/fromcd/ 中。每当软件工具需要用户文件夹层次结构中的临时数据时,我就使用 $HOME/tmp/Tools/作为起点。我经常使用的文件夹是 $HOME/tmp/2del/2del 的意思是“随时可以删除”。例如,我所有的浏览器都使用这个文件夹作为默认的下载文件夹。如果我需要在机器上腾出空间,我首先查看这个 2del 文件夹,用于删除内容。

与上面描述的临时文件相比,我当然也想将文件保存更长的时间。这些文件被移动到我的 $HOME/archive/ 子层次结构中。它有几个子文件夹用于备份、我想保留的 web 下载类、我要存档的二进制文件、可移动媒体(CD、DVD、记忆棒、外部硬盘驱动器)的索引文件,和一个稍后(寻找一个合适的的目标文件夹)存档的文件夹。有时,我太忙或没有耐心的时候将文件妥善整理。是的,那就是我,我甚至有一个名为“现在不要烦我”的文件夹。这对你而言是否很怪?:-)

我的归档中最重要的子层次结构是 $HOME/archive/events_memories/ 及其子文件夹 2014/2013/2012/ 等等。正如你可能已经猜到的,每个年份有一个子文件夹。其中每个文件中都有单个文件和文件夹。这些文件是根据我在前一节中描述的文件名约定命名的。文件夹名称以 ISO 8601 日期标签 “YYYY-MM-DD” 开头,后面跟着一个具有描述性的名称,如 $HOME/archive/events_memories/2014/2014-05-08 Business marathon with/。在这些与日期相关的文件夹中,我保存着各种与特定事件相关的文件:照片、(扫描的)pdf 文件、文本文件等等。

对于共享数据,我设置一个 $HOME/share/ 子层次结构。这是我的 Dropbox 文件夹,我用各种各样的方法(比如 unison)来分享数据。我也在我的设备之间共享数据:家里的 Mac Mini、家里的 GNU/Linux 笔记本、Android 手机,root-server(我的个人云),工作用的 Windows 笔记本。我不想在这里详细说明我的同步设置。如果你想了解相关的设置,可以参考另一篇相关的文章。:-)

在我的 $HOME/templates_tags/ 子层次结构中,我保存了各种模板文件LaTeX、脚本、…),插图和徽标,等等。

我的 Org 模式 文件,主要是保存在 $HOME/org/。我练习记忆力,不会解释我有多喜欢 Emacs/Org 模式 以及我从中获益多少。你可能读过或听过我详细描述我用它做的很棒的事情。具体可以在我的博客上查找 我的 Emacs 标签,在 Twitter 上查找 hashtag #orgmode

以上就是我最重要的文件夹子层次结构设置方式。

我的工作流程

哒哒哒,在你了解了我的文件夹结构和文件名约定之后,下面是我当前的工作流程和工具,我使用它们来满足我前面描述的需求。

请注意,你必须知道你在做什么。我这里的示例及文件夹路径和更多只适用我的机器或我的环境你必须采用相应的路径、文件名等来满足你的需求!

工作流程:将文件从 SD 卡移动到笔记本电脑、旋转人像图像,并重命名文件

当我想把数据从我的数码相机移到我的 GNU/Linux 笔记本上时,我拿出它的 mini SD 存储卡,把它放在我的笔记本上。然后它会自动挂载在 /media/digicam 上。

然后,调用 getdigicamdata。它做了如下几件事:它将文件从 SD 卡移动到一个临时文件夹中进行处理。原始文件名会转换为小写字符。所有的人像照片会使用 jhead 旋转。同样使用 jhead,我从 Exif 头的时间戳中生成文件名称中的时间戳。使用 date2name,我也将时间戳添加到电影文件中。处理完所有这些文件后,它们将被移动到新的数码相机文件的目标文件夹: $HOME/tmp/digicam/tmp/

工作流程:文件夹索引、查看、重命名、删除图像文件

为了快速浏览我的图像和电影文件,我喜欢使用 GNU/Linux 上的 geeqie。这是一个相当轻量级的图像浏览器,它具有其他文件浏览器所缺少的一大优势:我可以添加通过键盘快捷方式调用的外部脚本/工具。通过这种方式,我可以通过任意外部命令扩展这个图像浏览器的特性。

基本的图像管理功能是内置在 geeqie:浏览我的文件夹层次结构、以窗口模式或全屏查看图像(快捷键 f)、重命名文件名、删除文件、显示 Exif 元数据(快捷键 Ctrl-e)。

在 OS X 上,我使用 Xee。与 geeqie 不同,它不能通过外部命令进行扩展。不过,基本的浏览、查看和重命名功能也是可用的。

工作流程:添加和删除标签

我创建了一个名为 filetags 的 Python 脚本,用于向单个文件以及一组文件添加和删除标记。

对于数码照片,我使用标签,例如,specialL 用于我认为适合桌面背景的风景图片,specialP 用于我想展示给其他人的人像照片,sel 用于筛选,等等。

使用 geeqie 初始设置 filetags

向 geeqie 添加 filetags 是一个手动步骤:“Edit > Preferences > Configure Editors …”,然后创建一个附加条目 New。在这里,你可以定义一个新的桌面文件,如下所示:

[Desktop Entry]
Name=filetags
GenericName=filetags
Comment=
Exec=/home/vk/src/misc/vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;

add-tags.desktop

封装脚本 vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh 是必须的,因为我想要弹出一个新的终端,以便添加标签到我的文件:

#!/bin/sh

/usr/bin/gnome-terminal \
 --geometry=85x15+330+5 \
 --tab-with-profile=big \
 --hide-menubar \
 -x /home/vk/src/filetags/filetags.py --interactive "${@}"

#end

vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh

在 geeqie 中,你可以在 “Edit > Preferences > Preferences … > Keyboard”。我将 tfiletags 命令相关联。

这个 filetags 脚本还能够从单个文件或一组文件中删除标记。它基本上使用与上面相同的方法。唯一的区别是 filetags 脚本额外的 --remove 参数:

[Desktop Entry]
Name=filetags-remove
GenericName=filetags-remove
Comment=
Exec=/home/vk/src/misc/vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;

remove-tags.desktop

#!/bin/sh

/usr/bin/gnome-terminal \
 --geometry=85x15+330+5 \
 --tab-with-profile=big \
 --hide-menubar \
 -x /home/vk/src/filetags/filetags.py --interactive --remove "${@}"

#end

vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh

为了删除标签,我创建了一个键盘快捷方式 T

在 geeqie 中使用 filetags

当我在 geeqie 文件浏览器中浏览图像文件时,我选择要标记的文件(一到多个)并按 t。然后,一个小窗口弹出,要求我提供一个或多个标签。用回车确认后,这些标签被添加到文件名中。

删除标签也是一样:选择多个文件,按下 T,输入要删除的标签,然后按回车确认。就是这样。几乎没有给文件添加或删除标签的更简单的方法了

工作流程:改进的使用 appendfilename 重命名文件

不使用 appendfilename

重命名一组大型文件可能是一个冗长乏味的过程。对于 2014-04-20T17.09.11_p1100386.jpg 这样的原始文件名,在文件名中添加描述的过程相当烦人。你将按 Ctrl-r (重命名)在 geeqie 中打开文件重命名对话框。默认情况下,原始名称(没有文件扩展名的文件名称)被标记。因此,如果不希望删除/覆盖文件名(但要追加),则必须按下光标键 。然后,光标放在基本名称和扩展名之间。输入你的描述(不要忘记以空格字符开始),并用回车进行确认。

在 geeqie 使中用 appendfilename

使用 appendfilename,我的过程得到了简化,可以获得将文本附加到文件名的最佳用户体验:当我在 geeqie 中按下 a(附加)时,会弹出一个对话框窗口,询问文本。在回车确认后,输入的文本将放置在时间戳和可选标记之间。

例如,当我在 2014-04-20T17.09.11_p1100386.jpg 上按下 a,然后键入Pick-nick in Graz 时,文件名变为 2014-04-20T17.09.11_p1100386 Pick-nick in Graz.jpg。当我再次按下 a 并输入 with Susan 时,文件名变为 2014-04-20T17.09.11_p1100386 Pick-nick in Graz with Susan.jpg。当文件名添加标记时,附加的文本前将附加标记分隔符。

这样,我就不必担心覆盖时间戳或标记。重命名的过程对我来说变得更加有趣!

最好的部分是:当我想要将相同的文本添加到多个选定的文件中时,也可以使用 appendfilename

在 geeqie 中初始设置 appendfilename

添加一个额外的编辑器到 geeqie: “Edit > Preferences > Configure Editors … > New”。然后输入桌面文件定义:

[Desktop Entry]
Name=appendfilename
GenericName=appendfilename
Comment=
Exec=/home/vk/src/misc/vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;

appendfilename.desktop

同样,我也使用了一个封装脚本,它将为我打开一个新的终端:

#!/bin/sh

/usr/bin/gnome-terminal \
 --geometry=90x5+330+5 \
 --tab-with-profile=big \
 --hide-menubar \
 -x /home/vk/src/appendfilename/appendfilename.py "${@}"

#end

vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh

工作流程:播放电影文件

在 GNU/Linux 上,我使用 mplayer 回放视频文件。由于 geeqie 本身不播放电影文件,所以我必须创建一个设置,以便在 mplayer 中打开电影文件。

在 geeqie 中初始设置 mplayer

我已经使用 xdg-open 将电影文件扩展名关联到 mplayer。因此,我只需要为 geeqie 创建一个通用的“open”命令,让它使用 xdg-open 打开任何文件及其关联的应用程序。

在 geeqie 中,再次访问 “Edit > Preferences > Configure Editors …” 添加“open”的条目:

[Desktop Entry]
Name=open
GenericName=open
Comment=
Exec=/usr/bin/xdg-open %F
Icon=
Terminal=true
Type=Application
hidden=false
NOMimeType=*;
MimeType=image/*;video/*
Categories=X-Geeqie;

open.desktop

当你也将快捷方式 o (见上文)与 geeqie 关联时,你就能够打开与其关联的应用程序的视频文件(和其他文件)。

使用 xdg-open 打开电影文件(和其他文件)

在上面的设置过程之后,当你的 geeqie 光标位于文件上方时,你只需按下 o 即可。就是如此简洁。

工作流程:在外部图像编辑器中打开

我不太希望能够在 GIMP 中快速编辑图像文件。因此,我添加了一个快捷方式 g,并将其与外部编辑器 “GNU Image Manipulation Program (GIMP)” 关联起来,geeqie 已经默认创建了该外部编辑器。

这样,只需按下 g 就可以在 GIMP 中打开当前图像。

工作流程:移动到存档文件夹

现在我已经在我的文件名中添加了注释,我想将单个文件移动到 $HOME/archive/events_memories/2014/,或者将一组文件移动到这个文件夹中的新文件夹中,如 $HOME/archive/events_memories/2014/2014-05-08 business marathon after show - party

通常的方法是选择一个或多个文件,并用快捷方式 Ctrl-m 将它们移动到文件夹中。

何等繁复无趣之至!

因此,我(再次)编写了一个 Python 脚本,它为我完成了这项工作:move2archive(简写为:m2a),需要一个或多个文件作为命令行参数。然后,出现一个对话框,我可以在其中输入一个可选文件夹名。当我不输入任何东西而是按回车,文件被移动到相应年份的文件夹。当我输入一个类似 Business-Marathon After-Show-Party 的文件夹名称时,第一个图像文件的日期戳被附加到该文件夹($HOME/archive/events_memories/2014/2014-05-08 Business-Marathon After-Show-Party),然后创建该文件夹,并移动文件。

再一次,我在 geeqie 中选择一个或多个文件,按 m(移动),或者只按回车(没有特殊的子文件夹),或者输入一个描述性文本,这是要创建的子文件夹的名称(可选不带日期戳)。

没有一个图像管理工具像我的带有 appendfilename 和 move2archive 的 geeqie 一样可以通过快捷键快速且有趣的完成工作。

在 geeqie 里初始化 m2a 的相关设置

同样,向 geeqie 添加 m2a 是一个手动步骤:“Edit > Preferences > Configure Editors …”,然后创建一个附加条目“New”。在这里,你可以定义一个新的桌面文件,如下所示:

[Desktop Entry]
Name=move2archive
GenericName=move2archive
Comment=Moving one or more files to my archive folder
Exec=/home/vk/src/misc/vk-m2a-interactive-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;

m2a.desktop

封装脚本 vk-m2a-interactive-wrapper-with-gnome-terminal.sh 是必要的,因为我想要弹出一个新的终端窗口,以便我的文件进入我指定的目标文件夹:

#!/bin/sh

/usr/bin/gnome-terminal \
 --geometry=157x56+330+5 \
 --tab-with-profile=big \
 --hide-menubar \
 -x /home/vk/src/m2a/m2a.py --pauseonexit "${@}"

#end

vk-m2a-interactive-wrapper-with-gnome-terminal.sh

在 geeqie 中,你可以在 “Edit > Preferences > Preferences … > Keyboard” 将 mm2a 命令相关联。

工作流程:旋转图像(无损)

通常,我的数码相机会自动将人像照片标记为人像照片。然而,在某些特定的情况下(比如从装饰图案上方拍照),我的相机会出错。在那些罕见的情况下,我必须手动修正方向。

你必须知道,JPEG 文件格式是一种有损格式,应该只用于照片,而不是计算机生成的东西,如屏幕截图或图表。以傻瓜方式旋转 JPEG 图像文件通常会解压/可视化图像文件、旋转生成新的图像,然后重新编码结果。这将导致生成的图像比原始图像质量差得多

因此,你应该使用无损方法来旋转 JPEG 图像文件。

再一次,我添加了一个“外部编辑器”到 geeqie:“Edit > Preferences > Configure Editors … > New”。在这里,我添加了两个条目:使用 exiftran,一个用于旋转 270 度(即逆时针旋转 90 度),另一个用于旋转 90 度(顺时针旋转 90 度):

[Desktop Entry]
Version=1.0
Type=Application
Name=Losslessly rotate JPEG image counterclockwise

# call the helper script
TryExec=exiftran
Exec=exiftran -p -2 -i -g %f

# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;

# Show in menu "Edit/Orientation"
X-Geeqie-Menu-Path=EditMenu/OrientationMenu

MimeType=image/jpeg;

rotate-270.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=Losslessly rotate JPEG image clockwise

# call the helper script
TryExec=exiftran
Exec=exiftran -p -9 -i -g %f

# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;

# Show in menu "Edit/Orientation"
X-Geeqie-Menu-Path=EditMenu/OrientationMenu

# It can be made verbose
# X-Geeqie-Verbose=true

MimeType=image/jpeg;

rotate-90.desktop

我创建了 geeqie 快捷键 [(逆时针方向)和 ](顺时针方向)。

工作流程:可视化 GPS 坐标

我的数码相机有一个 GPS 传感器,它在 JPEG 文件的 Exif 元数据中存储当前的地理位置。位置数据以 WGS 84 格式存储,如 47, 58, 26.73; 16, 23, 55.51(纬度;经度)。这一方式可读性较差,我期望:要么是地图,要么是位置名称。因此,我向 geeqie 添加了一些功能,这样我就可以在 OpenStreetMap 上看到单个图像文件的位置: Edit > Preferences > Configure Editors ... > New

[Desktop Entry]
Name=vkphotolocation
GenericName=vkphotolocation
Comment=
Exec=/home/vk/src/misc/vkphotolocation.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/svg+xml;image/svg+xml-compressed;image/vnd.wap.wbmp;

photolocation.desktop

这调用了我的名为 vkphotolocation.sh 的封装脚本,它使用 ExifToolMarble 能够读取和可视化的适当格式提取该坐标:

#!/bin/sh

IMAGEFILE="${1}"
IMAGEFILEBASENAME=`basename ${IMAGEFILE}`

COORDINATES=`exiftool -c %.6f "${IMAGEFILE}" | awk '/GPS Position/ { print $4 " " $6 }'`

if [ "x${COORDINATES}" = "x" ]; then
 zenity --info --title="${IMAGEFILEBASENAME}" --text="No GPS-location found in the image file."
else
 /usr/bin/marble --latlon "${COORDINATES}" --distance 0.5
fi

#end

vkphotolocation.sh

映射到键盘快捷键 G,我可以快速地得到单个图像文件的位置的地图定位

当我想将多个 JPEG 图像文件的位置可视化为路径时,我使用 GpsPrune。我无法挖掘出 GpsPrune 将一组文件作为命令行参数的方法。正因为如此,我必须手动启动 GpsPrune,用 “File > Add photos”选择一组文件或一个文件夹。

通过这种方式,我可以为每个 JPEG 位置在 OpenStreetMap 地图上获得一个点(如果配置为这样)。通过单击这样一个点,我可以得到相应图像的详细信息。

如果你恰好在国外拍摄照片,可视化 GPS 位置对在文件名中添加描述大有帮助!

工作流程:根据 GPS 坐标过滤照片

这并非我的工作流程。为了完整起见,我列出该工作流对应工具的特性。我想做的就是从一大堆图片中寻找那些在一定区域内(范围或点 + 距离)的照片。

到目前为止,我只找到了 DigiKam,它能够根据矩形区域进行过滤。如果你知道其他工具,请将其添加到下面的评论或给我写一封电子邮件。

工作流程:显示给定集合的子集

如上面的需求所述,我希望能够对一个文件夹中的文件定义一个子集,以便将这个小集合呈现给其他人。

工作流程非常简单:我向选择的文件添加一个标记(通过 t/filetags)。为此,我使用标记 sel,它是 “selection” 的缩写。在标记了一组文件之后,我可以按下 s,它与一个脚本相关联,该脚本只显示标记为 sel 的文件。

当然,这也适用于任何标签或标签组合。因此,用同样的方法,你可以得到一个适当的概述,你的婚礼上的所有照片都标记着“教堂”和“戒指”。

很棒的功能,不是吗?:-)

初始设置 filetags 以根据标签和 geeqie 过滤

你必须定义一个额外的“外部编辑器”,“ Edit > Preferences > Configure Editors … > New”:

[Desktop Entry]
Name=filetag-filter
GenericName=filetag-filter
Comment=
Exec=/home/vk/src/misc/vk-filetag-filter-wrapper-with-gnome-terminal.sh
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;

filter-tags.desktop

再次调用我编写的封装脚本:

#!/bin/sh

/usr/bin/gnome-terminal \
 --geometry=85x15+330+5 \
 --hide-menubar \
 -x /home/vk/src/filetags/filetags.py --filter

#end

vk-filetag-filter-wrapper-with-gnome-terminal.sh

带有参数 --filterfiletags 基本上完成的是:用户被要求输入一个或多个标签。然后,当前文件夹中所有匹配的文件都使用符号链接链接到 $HOME/.filetags_tagfilter/。然后,启动了一个新的 geeqie 实例,显示链接的文件。

在退出这个新的 geeqie 实例之后,你会看到进行选择的旧的 geeqie 实例。

用一个真实的案例来总结

哇哦, 这是一篇很长的博客文章。你可能已经忘了之前的概述。总结一下我在(扩展了标准功能集的) geeqie 中可以做的事情,我有一个很酷的总结:

快捷键功能
m移到归档(m2a)
o打开(针对非图像文件)
a在文件名里添加字段
t文件标签(添加)
T文件标签(删除)
s文件标签(排序)
ggimp
G显示 GPS 信息
[无损的逆时针旋转
]无损的顺时针旋转
Ctrl-eEXIF 图像信息
f全屏显示

文件名(包括它的路径)的部分及我用来操作该部分的相应工具:

 /this/is/a/folder/2014-04-20T17.09 Picknick in Graz -- food graz.jpg
 [ move2archive  ] [  date2name   ] [appendfilename] [ filetags ]

在实践中,我按照以下步骤将照片从相机保存到存档:我将 SD 存储卡放入计算机的 SD 读卡器中。然后我运行 getdigicamdata.sh。完成之后,我在 geeqie 中打开 $HOME/tmp/digicam/tmp/。我浏览了一下照片,把那些不成功的删除了。如果有一个图像的方向错误,我用 [] 纠正它。

在第二步中,我向我认为值得评论的文件添加描述 (a)。每当我想添加标签时,我也这样做:我快速地标记所有应该共享相同标签的文件(Ctrl + 鼠标点击),并使用 filetagst)进行标记。

要合并来自给定事件的文件,我选中相应的文件,将它们移动到年度归档文件夹中的 event-folder,并通过在 move2archivem)中键入事件描述,其余的(非特殊的文件夹)无需声明事件描述由 move2archivem)直接移动到年度归档中。

结束我的工作流程,我删除了 SD 卡上的所有文件,把它从操作系统上弹出,然后把它放回我的数码相机里。

以上。

因为这种工作流程几乎不需要任何开销,所以评论、标记和归档照片不再是一项乏味的工作。

最后

所以,这是一个详细描述我关于照片和电影的工作流程的叙述。你可能已经发现了我可能感兴趣的其他东西。所以请不要犹豫,请使用下面的链接留下评论或电子邮件。

我也希望得到反馈,如果我的工作流程适用于你。并且,如果你已经发布了你的工作流程或者找到了其他人工作流程的描述,也请留下评论!

及时行乐,莫让错误的工具或低效的方法浪费了我们的人生!

其他工具

阅读关于本文中关于 gThumb 的部分

当你觉得你以上文中所叙述的符合你的需求时,请根据相关的建议来选择对应的工具。


via: http://karl-voit.at/managing-digital-photographs/

作者:Karl Voit 译者:qfzy1233 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

摄影师们:在没有 Lightroom 套件的情况下,可以看看这些 RAW 图像处理器。

如今智能手机的摄像功能已经完备到多数人认为可以代替传统摄影了。虽然这在傻瓜相机的市场中是个事实,但是对于许多摄影爱好者和专业摄影师看来,一个高端单反相机所能带来的照片景深、清晰度以及真实质感是口袋中的智能手机无法与之相比的。

所有的这些功能在便利性上要付出一些很小的代价;就像传统的胶片相机中的反色负片,单反照相得到的 RAW 格式文件必须预先处理才能印刷或编辑;因此对于单反相机,照片的后期处理是无可替代的,并且 首选应用就是 Adobe Lightroom。但是由于 Adobe Lightroom 的昂贵价格、基于订阅的定价模式以及专有许可证都使更多人开始关注其开源替代品。

Lightroom 有两大主要功能:处理 RAW 格式的图片文件,以及数字资产管理系统(DAM) —— 通过标签、评星以及其他元数据信息来简单清晰地整理照片。

在这篇文章中,我们将介绍三个开源的图片处理软件:Darktable、LightZone 以及 RawTherapee。所有的软件都有 DAM 系统,但没有任何一个具有 Lightroom 基于机器学习的图像分类和标签功能。如果你想要知道更多关于开源的 DAM 系统的软件,可以看 Terry Hacock 的文章:“开源项目的 DAM 管理”,他分享了他在自己的 Lunatics! 电影项目研究过的开源多媒体软件。

Darktable

Darktable

类似其他两个软件,Darktable 可以处理 RAW 格式的图像并将它们转换成可用的文件格式 —— JPEG、PNG、TIFF、PPM、PFM 和 EXR,它同时支持 Google 和 Facebook 的在线相册,上传至 Flikr,通过邮件附件发送以及创建在线相册。

它有 61 个图像处理模块,可以调整图像的对比度、色调、明暗、色彩、噪点;添加水印;切割以及旋转;等等。如同另外两个软件一样,不论你做出多少次修改,这些修改都是“无损的” —— 你的初始 RAW 图像文件始终会被保存。

Darktable 可以从 400 多种相机型号中直接导入照片,以及有 JPEG、CR2、DNG、OpenEXR 和 PFM 等格式的支持。图像在一个数据库中显示,因此你可以轻易地过滤并查询这些元数据,包括了文字标签、评星以及颜色标签。软件同时支持 21 种语言,支持 Linux、MacOS、BSD、Solaris 11/GNOME 以及 Windows(Windows 版本是最新发布的,Darktable 声明它比起其他版本可能还有一些不完备之处,有一些未实现的功能)。

Darktable 在开源许可证 GPLv3 下发布,你可以了解更多它的 特性,查阅它的 用户手册,或者直接去 Github 上看源代码

LightZone

LightZone's tool stack

LightZone 和其他两个软件类似同样是无损的 RAW 格式图像处理工具:它是跨平台的,有 Windows、MacOS 和 Linux 版本,除 RAW 格式之外,它还支持 JPG 和 TIFF 格式的图像处理。接下来说说 LightZone 其他独特特性。

这个软件最初在 2005 年时,是以专有许可证发布的图像处理软件,后来在 BSD 证书下开源。此外,在你下载这个软件之前,你必须注册一个免费账号,以便 LightZone的 开发团队可以跟踪软件的下载数量以及建立相关社区。(许可很快,而且是自动的,因此这不是一个很大的使用障碍。)

除此之外的一个特性是这个软件的图像处理通常是通过很多可组合的工具实现的,而不是叠加滤镜(就像大多数图像处理软件),这些工具组可以被重新编排以及移除,以及被保存并且复制用到另一些图像上。如果想要编辑图片的部分区域,你还可以通过矢量工具或者根据色彩和亮度来选择像素。

想要了解更多,见 LightZone 的论坛 或者查看 Github上的 源代码

RawTherapee

RawTherapee

RawTherapee 是另一个值得关注的开源(GPL)的 RAW 图像处理器。就像 Darktable 和 LightZone,它是跨平台的(支持 Windows、MacOS 和 Linux),一切修改都在无损条件下进行,因此不论你叠加多少滤镜做出多少改变,你都可以回到你最初的 RAW 文件。

RawTherapee 采用的是一个面板式的界面,包括一个历史记录面板来跟踪你做出的修改,以方便随时回到先前的图像;一个快照面板可以让你同时处理一张照片的不同版本;一个可滚动的工具面板可以方便准确地选择工具。这些工具包括了一系列的调整曝光、色彩、细节、图像变换以及去马赛克功能。

这个软件可以从多数相机直接导入 RAW 文件,并且支持超过 25 种语言,得到了广泛使用。批量处理以及 SSE 优化这类功能也进一步提高了图像处理的速度以及对 CPU 性能的利用。

RawTherapee 还提供了很多其他 功能;可以查看它的 官方文档 以及 源代码 了解更多细节。

你是否在摄影中使用另外的开源 RAW 图像处理工具?有任何建议和推荐都可以在评论中分享。


via: https://opensource.com/alternatives/adobe-lightroom

作者:Opensource.com 选题:lujun9972 译者:scoutydren 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在我上次写切换到Linux的理由后,一位读者建议我写一些关于Windows上流行的应用程序的Linux替代品的内容。毕竟,这是想切换到Linux的Windows用户们最普遍关心的问题。

在本文中,我列出了可用于各种用途的与照片相关的应用程序,努力试图来回应大家普遍关心的问题。这个列表中的应用程序并非是Windows程序的替代品,而只是能用于多种用途的Linux下的图像应用程序的集合。

Linux中的图像编辑应用

当我提到图像编辑时,我是指骨灰级专业风格的照片编辑。换句话讲,我是在讨论Photoshop。而对于Adobe Photoshop的Linux替代品而言,只有一个名字浮现在我脑海里,那就是GIMP。GIMP是一个跨平台、全功能、专业级别的编辑软件,几乎囊括了Photoshop的全部功能。与Photoshop不同的是,GIMP对于所有平台都免费,如Linux,Windows,OS X等等。

你可以从Ubuntu软件中心来为Ubuntu安装GIMP。

如果你醉心于Photoshop,并且对于调整GIMP的外观和快捷键有一定难度,那我推荐你使用Gimpshop。它是一个基于GIMP,而又有Photoshop风格的应用程序,当然也是免费的。

Linux中的照片管理应用

这里我是在说处理图像仓库的应用程序。你可以查看图像,从照相机和手机导入图像,进行图像的简单编辑,分享图像等等。在Windows中,我们有Windows照片查看器。而在Linux中,Shotwell是当今最流行的照片管理工具。它也是各种Linux发行版中默认内置的应用程序,当然Ubuntu也是这样内置的。和GIMP不同的是,Shotwell是一个轻量级应用,但也提供了一些最基本的编辑功能。

Shotwell的一个很好的替代品是gThumb

Linux中用于处理原生照相机图像的应用

由于数码单反相机价格的下降,(业余)摄影师的数量也以同比例增长。由于许多数码单反相机使用原生格式存储图像,像Shotwell这样的默认的图像查看器就不能处理这些图像了,也因此像digiKam这样的应用程序就应运而生了。作为一个开源软件,digiKam可以让你以专业方式处理高端相机图像。你可以使用digiKam来查看、管理、编辑、增强、组织图像,可以给图像贴标识,也可以分享图像。

digiKam的另一个替代品是GTKRawGallery,该软件也关注对照相机图像的处理。

Linux中的绘图应用

如果你正在寻找微软画图的Linux替代品,那么我选择Paint。你可以用该软件做一些像文本注解、画圆圈这样的编辑,你可以使用铅笔、画笔和喷枪来画图。在Ubuntu中,你可以从Ubuntu软件中心安装该软件。

Pinta的另一个替代品是Krita,该软件更强大,提供了更多的功能。比画图应用好,但还比不上GIMP。

Linux中像Instagram一样的应用

最后,让我们来讨论一下图像美化吧。在移动设备上,我们有许多复古的图像效果,但桌面平台中却没有。要在Linux中应用Instagram一样的效果,据我所知只有XnRetro,它能巧妙地进行处理。推荐你阅读如何在Ubuntu中使用XnRetro这篇文章来获取更多信息。

以上只是编排列出了Ubuntu以及其它Linux发行版中可用的各类图像应用软件,但这不是一个这类应用程序的完整列表。事实上,还有很多同类软件,我只是列出了个类目中最好的。

你认为呢?你也使用其它一些应用程序来完成特定的工作?能和我们分享你的看法吗?


via: http://itsfoss.com/image-applications-ubuntu-linux/

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你是一位狂热的摄影爱好者,那么你的摄影集中可能会有一些令人叹为观止的全景摄影作品。事实上,制作这些照片既不需要专业的摄影技术,也不需要什么特别的设备,利用一些照片合并软件(在线或者是离线,桌面设备或者移动设备)就可以将两幅或者多幅有重叠部分的照片轻松合成一幅全景照片。

这篇教程里,我将会解释 如何在 Linux 中完成全景照片的合并工作。在这儿,我将会使用一款叫做 Hugin 的照片合并软件。

Hugin 是一款开源(GPLv2)并可以免费使用的照片合并工具。它目前支持多个平台,包括 Linux,Windows,OS X 和 FreeBSD。 尽管作为一款开源软件,但是不论在功能上还是质量上,Hugin 都丝毫不逊色于商业软件。相反,Hugin 非常强大,不仅可以用来创建360度全景照片,还支持多种高级测光修正和优化。

在 Linux 中安装 Hugin

在 Debian,Ubuntu 或者 Linux Mint 中安装 Hugin:

$ sudo apt-get install hugin

在 Fedora 中安装 Hugin:

$ sudo yum install hugin

启动 Hugin

我们使用命令来启动Hugin。

$ hugin

在这儿(Assistant页),我们要做的第一件事就是导入我们想要合并的照片。我们先来点击Load images 按钮,然后导入(两张或者多张)图片。当然了,这些照片应该需要相互有一些重叠的部分(我们这里载入了三张)。

第一次照片合并

在导入照片之后,点击 Align 按钮来开始我们的第一次合并

为了正确合并照片,Hugin 将会在一个单独的窗口中启动合并助手,用来分析照片之间的关键点(控制点)。分析完毕之后,呈现在你眼前的将会是一幅全景照片的预览图。

接下来让我们切换回 Hugin 的主窗口。在 Align 按钮的下方,你将会看见照片合并的状态(比如控制点的数量,错误情况)。当然,还会有合并好坏的相关提示。

如果合并提示显示 bad 或者 really bad,你可以继续按照下面的办法来进行排列的调整。

添加或者删除控制点

在主窗口中,进入 Control Points 标签页。在这儿,Hugin 展现在组合照片中常用的的控制点。我们看到,在左右面板中展现了一对照片,上面的一些同色的小方盒表示的是常用的控制点。你可以手动来添加或者删除这些控制点。这些控制点匹配的越精确,我们得到的合并质量也就越高。除此之外,如果这些控制点分散得比较均匀,得到的效果将会更好。

使用顶部中间的左右箭头按钮来找到拥有最少控制点的两幅照片。如这样的两幅照片,我们可以试图按照下面的办法来手动增加控制点。

首先我们点击左边照片中的某个点,然后再来点击右边照片中对应的点。Hugin 将会试图自动调整。接下来,我们继续点击底部的 Add 按钮来添加匹配对。重复上面的操作来添加更多的控制点。

其他优化

我们可以试图进行重新优化,比如点击工具栏中的 Re-optimize 按钮,或者去 Optimizer 标签中重新调整之前的优化。

接下来回到 Hugin 主窗口中的 Assistant 标签,再次点击 Align 按钮来看看是否能得到一个更棒的结果。

倘若合并的全景照片的水平线参差不齐,我们可以试图将它拉直。首先点击工具栏上的 Preview panorama 按钮。

然后点击预览窗口中的 Straighten 按钮。

一旦你对合并的结果感到满意,你可以继续将它导出为图片文件。只需要到 Hugin 主窗口中 Sticher 标签页里进行下面的操作:

调整画布大小,剪切数量。当然,还需要选择输出格式(比如 TIFF,JPEG,PNG)。最后,点击 Stitch!按钮来完成。

之后会有提示保存当前项目文件(*.pto),设定保存好输出的文件名即可。

导出过程可能会需要花费几秒钟的时间。

本文题图是我利用 Hugin 的实验输出结果。画面中是墨西哥坎昆迷人海滩的全景。:-)


via: http://xmodulo.com/2013/12/stitch-photos-together-linux.html

译者:ailurus1991 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出