首页 > 解决方案 > 如何使用 PHP 从媒体二进制文件创建和保存图像文件?

问题描述

我正在为客户开发一个房地产网站。我可以直接访问 Trestle 数据。我已经成功地提取了所有我想要的相关列表字段,但是我很难弄清楚图像是如何工作的。有关我正在使用的 Trestle 文档,请参阅此链接:https ://docs-trestle.corelogic.com/Subtopic/MultiplePhotos

这是我用来测试特定属性的输出的代码。我已经对自己进行了身份验证,$token 允许我访问数据。请注意,这是在 wordpress 网站上完成的。

$url = 'https://api-prod.corelogic.com/trestle/odata/Property(361082372)/Media/All';
$headers = array(
    'cache-control' => 'no-cache',
    'Authorization' => 'Bearer '.$token
);
$args = array(
    'headers'   => $headers
);
$response = wp_remote_get($url, $args);
var_dump($response['body']);

这是我得到的输出的截图。它有关于图像的数据,但我对如何将其转换为合法图像或下载图像文件本身有点迷茫。理想情况下,我只想下载图像。谁能引导我朝着正确的方向前进?谢谢你的帮助!

在此处输入图像描述

标签: phpwordpresshttphttprequest

解决方案


我已经让它工作了 - 不确定这是否是最干净的方式。如果有更好的方法来解析这些数据,我会全力以赴!我很欣赏这些回应。无论如何,我发现“--TRM”是一个只在新图像之前发现的字符串,而从来没有在一个新图像中找到,所以我最初分解了那个字符串。然后,在二进制图像数据通过之前,我对最后一点文本进行了另一次爆炸,即“内容类型:图像/jpeg”。从这里我修剪了侧面,并且能够循环遍历并将每个图像保存到一个文件中。下面的代码:

$response = wp_remote_get($url, $args);
$images = array_slice(explode('--TRM', $response['body']), 1, -1);
$iteration = 0;
//Loop through each iteration of an "image"
foreach($images as $image) {
    $iteration = $iteration + 1;
    //explode on the last common text, take the last part, trim all whitespace and blank lines
    $item = trim(explode('Content-Type: image/jpeg', $image)[1]);
    file_put_contents(getcwd()."/listing-images/".$mls."/".$iteration.".jpeg", $item);
}

推荐阅读