用于处理 RAW/CR2 文件的图像处理库,提供对 exiv2 和 exiftool 的封装

1.1.0 2016-10-28 18:21 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:24 UTC


README

Rawrexivexiftool 命令行工具的 PHP 封装。它支持预览提取、EXIF 数据检查以及将 EXIF 数据传输到其他图像文件。

简单来说:Rawr 让您在 PHP 中处理 Canon CR2 (RAW) 图像更加容易。

安装要求

  • PHP 5.4+ 或 PHP 7
  • 可写临时文件夹,用于执行操作
  • 系统二进制文件
    • exiv2 列出和提取预览。
    • exiftool 在文件之间传输 EXIF 数据。

运行单元测试套件需要路径中存在 exiv2exiftool。测试 EXIF 数据传输需要 php-exif 扩展;如果找不到该扩展,则将跳过这些测试。

将 Rawr 添加到您的项目中

使用 Composer 需要 Rawr

composer require beryllium/rawr

然后在您的代码中实例化 Rawr

$rawr = new Beryllium\Rawr\Rawr('path/to/sandbox', 'path/to/exiv2', 'path/to/exiftool');

(如果您不感兴趣于传输 Exif 数据,可以省略 exiftool 值。)

我为什么需要 Rawr?

为 RAW 照片提供更快的缩略图

在 PHP 中从 RAW 照片生成缩略图非常慢。将 Imagick 连接到获取适当输出也很麻烦。

实际上,每张 RAW 照片都在相机原始传感器数据旁边存储了一个或多个内置 JPG 预览。提取此预览是避免 PHP 慢速的一个方便捷径。使用这种方法批量处理缩略图操作要快得多。

Rawr 可以列出预览

$rawr->listPreviews('path/to/IMAGE.CR2')

预览列表是一个包含每个预览信息的数组。通常,除了一个或多个较小的缩略图外,还有一个全尺寸预览。

以下示例输出演示了

  • 1: 160x120 JPG
  • 2: 668x432 TIFF
  • 3: 5184x3456 JPG (全尺寸预览)
array(
    array(
        'index'  => 1,
        'type'   => 'image/jpeg',
        'height' => 120,
        'width'  => 160,
        'size'   => 14416,
    ),
    array(
        'index'  => 2,
        'type'   => 'image/tiff',
        'height' => 432,
        'width'  => 668,
        'size'   => 1731456,
    ),
    array(
        'index'  => 3,
        'type'   => 'image/jpeg',
        'height' => 3456,
        'width'  => 5184,
        'size'   => 1869241,
    ),
);

Rawr 可以提取单个预览

// extracts the specified preview to the sandbox location and returns the resulting temporary filename 
$previewFile = $rawr->extractPreview('path/to/IMAGE.CR2', 3)

如果您想保留提取的 $previewFile,则希望将其移出沙盒。如果您只是用它来生成缩略图,则可以将其留在沙盒中,并在其他地方定位缩略图(然后完成操作后断开 $previewFile 的连接)。

别忘了将 Exif 数据传输到生成的缩略图!

保留 EXIF 数据

您用数码相机拍摄的照片都嵌入了一些特殊数据。这些数据记录了时间、相机设置以及该图像的肖像/风景设置。对于一些较新的相机,这些数据还可以包括 GPS 坐标。

提取预览,甚至从提取的预览中生成缩略图,都可能导致这些数据的丢失。Imagick 和 PHP 似乎无法正确保留这些数据。

Rawr 可以将原始 CR2 文件中的 EXIF 数据传输到 JPG

// to any jpg file
$rawr->transferExifData('path/to/IMAGE.CR2', 'path/to/new_thumbnail.jpg');

// to the preview image you extracted
$rawr->transferExifData('path/to/IMAGE.CR2', $previewFile);

请注意,传输 Exif 数据可能会很慢。根据服务器的 CPU/RAM/磁盘速度,每次调用可能需要一秒钟或两秒钟。

Rawr 可以将 EXIF 数据提取到可消费的格式,使您可以根据数据做出决策

// translated format
$translatedData = $rawr->listExifData('path/to/IMAGE.CR2', Rawr::EXIF_TRANSLATED);

// raw format
$data = $rawr->listExifData('path/to/IMAGE.CR2');

Rawr 的过去和未来

我作为家庭摄影项目的一部分构建了 Rawr。我需要快速为 22,000 个 CR2 文件生成缩略图。使用 ImageMagick 将 RAW 渲染为 JPG 可能需要数年时间。

如果该项目帮到了您,那真是太好了!如果您发现其中存在任何问题,请通过在项目上提交问题报告或代码提交(PR)来贡献您的力量。

未来,我希望能够支持更多种类的RAW格式。