仅从远程原始文件嵌入 jpg?
Embedded jpg from remote raw file, only?
假设我在远程服务器上有一张 RAW 图像,例如 www.mydomain.com/DSC0001.ARW,我想 仅 从该原始文件中提取 "small" 预览图像 (jpg),而不必下载整个原始文件,这可能吗?
先声明:我不是图像处理专家。
回答你的问题
您可以显示已调整大小的图片,但这仍会下载整个文件。在我看来,这意味着最好的方法是在原始图像旁边保存该图像的预处理缩略图。如果您使用像 DSC0001.ARW.thumbnail.png
这样的命名约定,它们应该很容易找到。
AWS 堆栈上的可能替代解决方案
如果您愿意参与一些代码和 AWS,这可能只是一个现实的解决方案。如果您使用 AWS S3 存储图像,您可以将事件发送到 AWS Lambda 以 运行 一个脚本,该脚本将您的原始文件处理成缩略图并将其保存到 S3 中;每当您上传新的原始文件时。
再次更新
好的,看来您拥有原始文件的服务器实际上不是您的,因此您无法按照我的建议在服务器上提取预览图像...但是,您可以只下载一部分25MB 图像,然后在本地提取。因此,在这里我只从我不拥有的服务器上的文件下载前 1MB 到我的本地机器上,然后在本地提取预览:
curl -r 0-1000000 http://www.rawsamples.ch/raws/sony/RAW_SONY_ILCA-77M2.ARW > partial.arw
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 976k 100 976k 0 0 984k 0 --:--:-- --:--:-- --:--:-- 983k
exiftool -b -PreviewImage -W! preview.jpg partial.arw
您可能需要试验需要下载多少文件,具体取决于相机及其设置等。
更新答案
实际上,使用 exiftool 在服务器上提取预览更容易,因为(只是一个 Perl 脚本)安装起来比 简单得多ImageMagick.
以下是如何在命令行中从 Sony ARW 文件中提取预览:
exiftool -b -PreviewImage -W! preview.jpg sample.arw
这会将预览从 sample.arw
提取到名为 preview.jpg
的文件中。
因此,您可以在服务器上放置一个 PHP 脚本(将其命名为 preview.php
),如下所示:
#!/usr/bin/php -f
<?php
$image=$_GET['image'];
header("Content-type: image/jpeg");
exec("exiftool -b -PreviewImage -W! preview.jpg $image");
readfile("preview.jpg");
?>
它将从名为 image
的参数中提取预览并将其作为 JPEG 发送回给您。
根据您的服务器设置和文件命名,调用将类似于:
http://yourserver/preview.php?image=sample.arw
请注意,如果服务器是多用户服务器,您将需要做更多的工作,因为我已将预览文件的名称固定为 preview.jpg
,这意味着两个同时存在的用户可能会发生冲突.
原答案
如果你可以在你的服务器上 运行 ImageMagick 就很容易了,你可以 运行 一个小的 PHP 脚本来获取图像名称作为参数,提取缩略图并向您发送 JPEG。
我猜你指的是 Sony Alpha 原始图像。
假设我在远程服务器上有一张 RAW 图像,例如 www.mydomain.com/DSC0001.ARW,我想 仅 从该原始文件中提取 "small" 预览图像 (jpg),而不必下载整个原始文件,这可能吗?
先声明:我不是图像处理专家。
回答你的问题
您可以显示已调整大小的图片,但这仍会下载整个文件。在我看来,这意味着最好的方法是在原始图像旁边保存该图像的预处理缩略图。如果您使用像 DSC0001.ARW.thumbnail.png
这样的命名约定,它们应该很容易找到。
AWS 堆栈上的可能替代解决方案
如果您愿意参与一些代码和 AWS,这可能只是一个现实的解决方案。如果您使用 AWS S3 存储图像,您可以将事件发送到 AWS Lambda 以 运行 一个脚本,该脚本将您的原始文件处理成缩略图并将其保存到 S3 中;每当您上传新的原始文件时。
再次更新
好的,看来您拥有原始文件的服务器实际上不是您的,因此您无法按照我的建议在服务器上提取预览图像...但是,您可以只下载一部分25MB 图像,然后在本地提取。因此,在这里我只从我不拥有的服务器上的文件下载前 1MB 到我的本地机器上,然后在本地提取预览:
curl -r 0-1000000 http://www.rawsamples.ch/raws/sony/RAW_SONY_ILCA-77M2.ARW > partial.arw
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 976k 100 976k 0 0 984k 0 --:--:-- --:--:-- --:--:-- 983k
exiftool -b -PreviewImage -W! preview.jpg partial.arw
您可能需要试验需要下载多少文件,具体取决于相机及其设置等。
更新答案
实际上,使用 exiftool 在服务器上提取预览更容易,因为(只是一个 Perl 脚本)安装起来比 简单得多ImageMagick.
以下是如何在命令行中从 Sony ARW 文件中提取预览:
exiftool -b -PreviewImage -W! preview.jpg sample.arw
这会将预览从 sample.arw
提取到名为 preview.jpg
的文件中。
因此,您可以在服务器上放置一个 PHP 脚本(将其命名为 preview.php
),如下所示:
#!/usr/bin/php -f
<?php
$image=$_GET['image'];
header("Content-type: image/jpeg");
exec("exiftool -b -PreviewImage -W! preview.jpg $image");
readfile("preview.jpg");
?>
它将从名为 image
的参数中提取预览并将其作为 JPEG 发送回给您。
根据您的服务器设置和文件命名,调用将类似于:
http://yourserver/preview.php?image=sample.arw
请注意,如果服务器是多用户服务器,您将需要做更多的工作,因为我已将预览文件的名称固定为 preview.jpg
,这意味着两个同时存在的用户可能会发生冲突.
原答案
如果你可以在你的服务器上 运行 ImageMagick 就很容易了,你可以 运行 一个小的 PHP 脚本来获取图像名称作为参数,提取缩略图并向您发送 JPEG。
我猜你指的是 Sony Alpha 原始图像。