@WhatYouDoing

Как сохранить html в картинку на php?

Всем привет,необходимо сохранить html страницу в картинку средствами php,вопрос может кто знает подобные библиотеки,сторонние сервисы не очень хотелось бы использовать.
  • Вопрос задан
  • 2674 просмотра
Решения вопроса 4
glaphire
@glaphire Куратор тега PHP
PHP developer
Можете глянуть пакеты https://packagist.org/?query=html%20to%20png
Гугл выдает платный сервис https://pdfcrowd.com/doc/api/html-to-image/php/
Upd. Чаще всего упоминается этот пакет https://wkhtmltopdf.org/
Ответ написан
Комментировать
nickolyashka
@nickolyashka
Ответ написан
Комментировать
Immortal_pony
@Immortal_pony Куратор тега PHP
Использовать через exec движок хрома:
https://developers.google.com/web/updates/2017/04/...
Ответ написан
Комментировать
cesnokov
@cesnokov
<head>&nbsp;</head>
Я использую PHP PhantomJs. Он не идеален, но для моих потребностей подходит. Ну и конечно сервер на котором это будет работать должен уметь запускать бинарные PHP скрипты.
<?php
//define('STDOUT', fopen('debug_log.txt', 'wb')); //write console logs to file
use JonnyW\PhantomJs\Client;

$url = 'https://toster.ru';
$client = Client::getInstance();
//$client->getEngine()->debug(true); //enable debug

$request = $client->getMessageFactory()->createCaptureRequest($url);
$response = $client->getMessageFactory()->createResponse();
$request->setOutputFile( 'preview.png' );
$request->setViewportSize(500, 1500); //width, height
//$request->setCaptureDimensions(500, 645, 0, 0); //width, height, top, left
$request->setFormat('png');
$request->setQuality(100);
$request->setTimeout(5000); // will render page if this timeout is reached and resources haven't finished loading
$client->send($request, $response);

$image = imagecreatefrompng( 'preview.png' );
$image = imagecropauto( $image, IMG_CROP_WHITE );
imagepng( $image, 'croped_preview.png' );
imagedestroy( $image );

Но если вам необходимо собрать DOM более качественно, придерживаясь самых современных стандартов, то изучайте Selenium. Например на Питоне он очень прост в использовании:
from selenium import webdriver
driver = webdriver.Chrome('/usr/local/bin/chromedriver')
driver.set_window_position(0, 0)
driver.set_window_size(500, 1500)
driver.get('https://toster.ru')
screenshot = driver.save_screenshot('/users/Pavel/Desktop/preview.png')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы