【问题标题】:Embedded jpg from remote raw file, only?仅来自远程原始文件的嵌入 jpg?
【发布时间】:2017-01-05 23:38:14
【问题描述】:

假设我在远程服务器上有一个 RAW 图像,例如 www.mydomain.com/DSC0001.ARW,我想提取“小”预览图像(jpg ) 从那个原始文件中,而不必下载整个原始文件,这可能吗?

【问题讨论】:

  • 抱歉 - 离线几天了。将尽快试用您的更新版本,然后返回,谢谢!

标签: http image-processing metadata file-handling


【解决方案1】:

让我以此作为开头:我不是图像处理专家。

回答您的问题

您可以显示调整大小的图像,但这仍会下载整个文件。在我看来,这意味着最好的方法是将该图像的预处理缩略图与原始图像一起保存。如果您使用诸如DSC0001.ARW.thumbnail.png 之类的命名约定,它们应该很容易找到。

AWS 堆栈上的可能替代解决方案

如果您愿意参与一些代码和 AWS,这可能只是一个现实的解决方案。如果您使用 AWS S3 存储图像,您可以向 AWS Lambda 触发一个事件以运行一个脚本,该脚本将您的原始文件处理为缩略图并将其保存到 S3;每当您上传新的原始文件时。

【讨论】:

  • 是的,我明白你的意思了...我也有过这样的想法,在上传新的东西时,围绕着火的活动风格...但是,如果有一个只需读取文件的必要部分以从原始文件中获取预览 jpg 的方法。但它猜想这可能很难,那么......
  • @nickelman 问题在于,为了从服务器读取部分内容(您可以通过 range 请求标头属性执行此操作),它会为每个请求/响应产生大量开销,并且会很慢,而且不会节省太多流量。我相信 ARW 基本上是 TIFF,但无论如何,您需要能够手动解析和处理格式及其所有注意事项。我同意 AkkarinZA 的观点,即最好的解决方案是在服务器(或客户端)上生成拇指并提供服务。
【解决方案2】:

再次更新

好的,您拥有原始文件的服务器似乎实际上不是您的,因此您无法按照我的建议在服务器上提取预览图像...但是,您可以只下载 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 原始图像。

【讨论】:

  • 是的,那部分我知道。
  • 但是,这仍然意味着我需要从远程服务器请求/下载整个原始文件,然后才能提取该 jpeg。我正在尝试找到一种方法,您只需从文件中请求/下载特定部分即可快速预览此缩略图。..
  • 不,正如我所说,JPEG 是使用 ImageMagick 在服务器上提取的,并且只是将缩略图发送到客户端。如果您提供原始索尼图像,我将尝试演示。
  • 请再看一下,我已经添加了加载更多细节和代码。
  • 是的,我已经尝试过了,这完全有效。但是,可以这么说,这并不能消除请求问题,因为我仍然需要请求完整的文件才能提取 jpeg。我正在寻找一种不需要下载整个文件(例如 25 mb)来提取 jpeg 文件的方法。我正在寻找一种您要求特定 RAW 文件的方法,它只会下载必要的部分该文件以提供预览 jpeg。你明白我的意思吗?还是我错过了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多