假设我在远程服务器上有RAW图像,例如www.mydomain.com/DSC0001.ARW,我想仅提取“小”预览图像(jpg) )从那个原始文件,而不必下载整个原始文件,是否可能以某种方式?
答案 0 :(得分:1)
让我先说一下:我不是图像处理专家。
您可以显示已调整大小的图片,但这仍会下载整个文件。在我看来,这意味着最好的方法是在原始图像旁边保存该图像的预处理缩略图。如果您使用某些命名约定,例如DSC0001.ARW.thumbnail.png
,则应该很容易找到它们。
如果您愿意参与某些代码和AWS,可能只是一个现实的解决方案。如果您使用AWS S3存储图像,则可以将事件发送到AWS Lambda以运行脚本,该脚本将原始文件处理为缩略图并将其保存到S3;无论何时上传新的原始文件。
答案 1 :(得分:0)
再次更新
好吧,看来您拥有原始文件的服务器实际上并不属于您,因此您无法像我建议的那样在服务器上提取预览图像...但是,您只能下载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 更简单。< / p>
以下是如何从命令行中的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
,这意味着两个并发用户可能会发生冲突。< / p>
原始答案
如果您可以在服务器上运行 ImageMagick ,这很简单,您可以运行一个小小的PHP脚本,将图像名称作为参数,提取缩略图并向您发送JPEG
我认为你的意思是Sony Alpha原始图像。