如何在服务器上保存div内容(img)

时间:2016-12-06 16:58:37

标签: javascript php html

我正在开发一个用户可以裁剪图像的Web应用程序。用户必须能够通过电子邮件发送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);
?>

1 个答案:

答案 0 :(得分:1)

在查看代码并查看您正在使用的函数后,我查看了这一部分:$xpath->query('//img[id="croppedImage"]');并与http://php.net/manual/en/domxpath.query.php进行比较,您可以看到函数返回DOMNodeList元素(甚至如果没有找到任何内容,它将返回没有子节点的对象。然后你将这个对象传递给imagecreatefromjpeg($filename),它接受​​一个字符串作为$ filename,而不是一个对象。你的xpath选择器也是错的,你需要使用id@作为前缀$xpath->query('//img[@id="croppedImage"]');

所以这里有一些代码可以通过它<img />从页面中抓取id元素,然后下载src属性的网址并保存。您需要确保要下载的图像的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;
}

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