【问题标题】:How to save div content (img) on server如何在服务器上保存 div 内容(img)
【发布时间】:2016-12-07 05:16:42
【问题描述】:

我正在开发一个网络应用程序,用户可以在其中裁剪图像。用户必须能够通过电子邮件发送 URL,以便其他人可以查看裁剪的图像。这意味着每个裁剪的图像都必须存储在服务器上,这样 URL 就不会消失。我的 HTML 中包含裁剪图像的部分是:

<div class="contain" id="myDiv">
    <img src="" id="croppedImage">
</div>

裁剪功能工作正常,它是用 JavaScript 编写的。我正在使用 PHP 解析 DOM,提取图像并将其保存在服务器上,但它不起作用。任何帮助将不胜感激。

<?php
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$divContent = $xpath->query('//img[id="croppedImage"]');

$my_server_img = $divContent;
$img = imagecreatefromjpeg($my_server_img);
$path = 'images_saved/';
imagejpeg($img, $path);
?>

【问题讨论】:

  • “它不工作”是什么意思?需要详细说明吗?
  • @Charlotte 当然,当我检查“images_saved”目录时,它仍然是空的。我希望看到存储在那里的裁剪图像。

标签: javascript php html


【解决方案1】:

在查看了您的代码并检查了您正在使用的函数之后,我查看了这部分:$xpath-&gt;query('//img[id="croppedImage"]'); 并与 http://php.net/manual/en/domxpath.query.php 进行比较,您可以看到该函数返回一个 DOMNodeList 元素(即使没有找到它也会返回没有子对象的对象..然后您将这个对象传递给imagecreatefromjpeg($filename),它接受一个字符串作为$filename,而不是一个对象。此外,您的xpath选择器错误,您需要在id前面加上@987654326 @像这样:$xpath-&gt;query('//img[@id="croppedImage"]');

所以这里有一些代码会通过它的id 从页面中抓取一个&lt;img /&gt; 元素,然后下载src 属性的URL 并保存它。您需要确保正在下载的图像的 src 是 jpg 文件,否则 imagecreatefromjpeg() 将失败。您可以使用 CURL 或其他方法下载图像(这样您也可以获取 png 图像),但这超出了此答案的范围。

$dom = new DOMDocument();
$dom->loadHTML('
    <html>
        <img src="http://images.freepicturesweb.com/img1/18/02/13.jpg" id="croppedImage2"/>
        <img src="http://images.freepicturesweb.com/img1/18/02/14.jpg" id="croppedImage3"/>
    </html>
');
$xpath = new DOMXPath($dom);
$imageElements = $xpath->query('//img[@id="croppedImage2"]');

// make sure $imageElements isn't empty
if($imageElements->length) {
    // grab first item in list (should only be one)
    /** @var DOMElement $imageElement */
    $imageElement = $imageElements->item(0);
    // get the src attribute off the <img>
    $src = $imageElement->getAttribute('src');
    // download and create image resource based off $src
    $img = imagecreatefromjpeg($src);
    // save image with random name to current directory
    $filename =  __DIR__.'/'.base_convert(sha1(uniqid(mt_rand(), true)), 16, 36).'.jpg';
    imagejpeg($img, $filename);
    echo "File saved to: ".$filename;
}

还应注意,您将变量分配给变量。这样做会使事情变得一团糟。如果您想将变量称为其他名称,只需在初始化时设置名称,而不是将其分配给具有您想要的名称的另一个变量(我猜这只是您尝试一些代码后留下的东西,但仍然值得一提)。

【讨论】:

  • 这回答了我很多问题。非常感谢。这实际上澄清了我的很多疑惑。
  • 当然!请记住,当您需要有关函数的任何信息时,php.net 是天赐之物。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2017-03-31
  • 2014-12-23
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多