我正在开发一个用户可以裁剪图像的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);
?>
答案 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;
}
还应注意,您正在为变量分配变量。这样做可能会使事情变得混乱。如果你想要一个变量被称为其他东西,只需在初始化时设置名称,而不是将其分配给另一个具有你想要的名称的变量(我猜测这只是你在尝试一些代码后留下的东西,但仍值得一提。)