2016-12-06 2 views
1

Я разрабатываю веб-приложение, в котором пользователи могут обрезать изображения. Пользователи должны иметь возможность отправлять URL-адрес по электронной почте, чтобы другие могли просматривать обрезанное изображение. Это означает, что каждое обрезанное изображение должно храниться на сервере, чтобы URL-адрес никогда не погиб. Часть моего HTML, который содержит обрезанное изображение является:Как сохранить содержимое div (img) на сервере

<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

Что означает «это не работает»? Поразмыслить? –

+0

@Charlotte Конечно, когда я проверяю каталог «images_saved», он по-прежнему пуст. Я ожидаю увидеть сохраненное изображение. – Yusuph

ответ

1

После анализа кода и проверить функции, которые вы используете, я смотрел на этой части: $xpath->query('//img[id="croppedImage"]'); и по сравнению с http://php.net/manual/en/domxpath.query.php вы можете видеть, что функция возвращает DOMNodeList элемента (даже если ничего не будет найдено, он будет возвращать . приемлю без детей .. вы потом принимать этот объект, и передавая ее imagecreatefromjpeg($filename), который принимает строку как $ имя файла, а не объект Кроме того, ваш селектор XPath неправильно, вы должны префикс id с @ так: $xpath->query('//img[@id="croppedImage"]');

Итак, вот какой код, который захватит элемент <img /> o ff на странице по номеру id, а затем загрузите URL-адрес атрибута 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; 
} 

Следует также отметить, что вы назначали переменную переменной. Делать это можно очень быстро. Если вы хотите, чтобы переменная называлась чем-то другим, просто устанавливайте имя, когда вы инициализируете его, а не назначаете его другой переменной с именем, которое вы хотите (я предполагаю, что это просто то, что вы оставили после того, как попробовали какой-то код, но все же Стоит отметить).

+0

Это ответило на множество вопросов для меня. Большое спасибо. Это на самом деле прояснило многие мои сомнения. – Yusuph

+0

Конечно! Просто помните, что php.net - это находка, когда вам нужна какая-либо информация о функции. – Skylord123

Смежные вопросы