【问题标题】:PHP - Get raw image data from image in a HTML documentPHP - 从 HTML 文档中的图像获取原始图像数据
【发布时间】:2013-11-17 20:05:45
【问题描述】:

如何正确抓取 HTML 文档中显示的图像并将其提供给 PHP 以作为图像二进制文件读取。我没有直接访问图像文件的权限。我试图抓取的图像通过 PHP 使用 HTML 提供给客户端,并以 HTML 格式打印,并使用<img> 标签显示图像。 src 只是指向我当前所在页面的链接。该链接是一个 GET 请求。

链接如下:

GETIMAGE.php?type=small&path=/path/to/image.png

这不会返回具有图像 MIME 类型的实际图像。而是显示图像的 HTML。

我无权访问 GETIMAGE.php 文件中的源代码。这是加密的,因为我使用的是获得许可的门户解决方案。

这是从 GETIMAGE.php 脚本返回的源代码:

<html>
<head>
    <meta name="viewport" content="width=device-width">
    <title>GETIMAGE.php (80×112)</title>
    <style type="text/css"></style>
</head>
<body style="margin: 0px;">
    <img style="-webkit-user-select: none" src="http://portal.craftnordic.com/PORTAL/GETIMAGE.php?type=small&amp;path=Path/To/Image.png">
</body>

【问题讨论】:

  • 发布您的 GETIMAGE.php 脚本
  • @Lee 我无权访问 GETIMAGE.php 代码。它是加密的,因为它是名为 Xinet WebNative Portal 的许可应用程序的一部分。
  • 在这种情况下,您能否发布 GETIMAGE.php 脚本的“查看源代码”,以便我们准确了解您使用的数据。我有一种感觉 GETIMAGE 脚本对其进行了引用检查,如果脚本本身被调用(基于您对先前答案的 cmets),它将仅输出原始图像数据
  • @Lee 添加了从 GETIMAGE.php 文件返回的源代码。

标签: php html image mime-types binary-data


【解决方案1】:

您可以使用 file_get_contents() 方法获取数据。

这里可以使用

$filePath=$_GET['path'];
$imageData=file_get_contents($filePath);

【讨论】:

  • 这个方法我已经试过了。这将读取显示图像的 HTML 文档,而不是原始图像数据。我需要它是原始图像数据。
  • 对不起,例如,如果我使用 $imageData=file_get_contents('google.co.in/images/srpr/logo11w.png');然后将谷歌徽标图标二进制数据加载到 $imageData
  • 尝试像这样指定图片的确切路径
  • 我没有确切的图像路径,也无法直接访问它。它在数据服务器上运行,将内容传输到另一台服务器,该服务器从数据服务器获取数据并将其发送到客户端。
【解决方案2】:

没有看到您的脚本,很难弄清楚您在寻找什么。假设页面生成如下输出:

<img src="http://imgplacewhatever.com/lskjdflksdjf.png" />

使用这个优秀的DOM Parsing Library,我们可以做这样的事情:

$html = file_get_html('GETIMAGE.php?type=small&path=/path/to/image.png');
$pictures = array();
foreach($html->find('img') as $element) 
   $pictures[] = $element->src;
}

foreach ($pictures as $picture) {
   $data = file_get_contents($picture);
   ## Do something with the data.
}

然后您将拥有$pictures中所有图片的数组。

祝你好运。

【讨论】:

  • 我也试过这个。这将返回 HTML 中所有图像的链接。该链接与我从中读取 HTML 文档的链接相同。这不会给我原始图像数据。 (这是我需要的)
  • 您可以使用file_get_contents 获取流。答案已更新。
  • 这不起作用(已经尝试过)。它读取显示图像的 HTML,而不是原始图像数据。
  • 我明白了。如果使用 DOM 解析器获取图片的绝对 URL,则可以使用file_get_contents() 获取数据流。
  • 我已经尝试过DOM解析器库。它没有让我到任何地方。没有直接链接到图像,只有一个 PHP 脚本将它们打印在 HTML 文档中。他们自己的图像存储在不同服务器上的安全文件夹中。我在两台服务器上工作。一个是保存所有数据的数据服务器,另一个将其显示给用户。我目前在显示数据的服务器上。
【解决方案3】:

不知道你有没有找到答案,但我终于找到了。 file_get_contents 或任何 CURL 方法接收的数据实际上是以 gzip 格式返回的数据。当我将输出保存到文件并将其解压缩为 gzip 存档时,图像就在那里。

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多