beryllium / rawr
用于处理 RAW/CR2 文件的图像处理库,提供对 exiv2 和 exiftool 的封装
Requires (Dev)
- phpunit/phpunit: ^4.0
This package is auto-updated.
Last update: 2024-08-29 04:25:24 UTC
README
Rawr 是 exiv
和 exiftool
命令行工具的 PHP 封装。它支持预览提取、EXIF 数据检查以及将 EXIF 数据传输到其他图像文件。
简单来说:Rawr 让您在 PHP 中处理 Canon CR2 (RAW) 图像更加容易。
安装要求
- PHP 5.4+ 或 PHP 7
- 可写临时文件夹,用于执行操作
- 系统二进制文件
exiv2
列出和提取预览。exiftool
在文件之间传输 EXIF 数据。
运行单元测试套件需要路径中存在 exiv2
和 exiftool
。测试 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格式。