PHP 将网页转图片
2021/6/15 12:21:19
本文主要是介绍PHP 将网页转图片,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
如果常用微博的话可以发现有个长微博工具,可以将一段文字转成图片,然后发在微博上,比如锤子,长微博工具 www.changweibo.com
这里以 PHP 为例,使用 PHP 来对页面截图。
一个 demo
-
error_reporting(7);
-
define('ROOT', getcwd());
-
define('BASEDIR', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
-
if ($_POST['text']) {
-
$ret = array();
-
$text = $_POST['text'];
-
try {
-
$ret['imgurl'] = text2img($text, (array) $_REQUEST['config']);
-
}
-
catch (Exception $e) {
-
$ret['imgurl'] = print_r($e, true);
-
}
-
echo str_replace('\\/', '/', json_encode($ret));
-
exit(0);
-
}
-
function text2img($text, $options = array())
-
{
-
-
//http://yuncode.net/code/c_51dd01a4d547f26
-
$rows = substr_count($text, "\n") + 1;
-
$font_path = $options['fontfile'] ? $options['fontfile'] : ROOT . '/simhei.ttf';//cp /c/Windows/Fonts/simhei.ttf .
-
if (!file_exists($font_path))
-
throw new Exception(" 找不到字体文件:$font_path ");
-
$font_size = $options['fontsize'] ? $options['fontsize'] : 12;
-
$padding = $options['padding'] ? $options['padding'] : 30;
-
$row_plus_height = $options['row_plus_height'] ? $options['row_plus_height'] : 4;
-
$border = 1;
-
$im_width = 430;
-
$im_height = ($row_plus_height + ($font_size * 4) / 3) * $rows + ($padding + $border) * 2;
-
$im = @imagecreatetruecolor($im_width, $im_height);
-
if (!$im)
-
throw new Exception("初始化图片失败,请检查 GD 配置");
-
imagefilledrectangle($im, $border, $border, ($im_width - 2 * $border), ($im_height - 2 * $border), imagecolorallocate($im, 255, 255, 255));
-
imagettftext($im, $font_size, 0, ($border + $padding), (($font_size * 4) / 3 + $border + $padding), imagecolorallocate($im, 0, 0, 0), $font_path, $text);
-
$base_path = '/files';
-
$base_filename = date("Y-m-d,H-i-s") . '.png';
-
$short_filename = $base_path . '/' . $base_filename;
-
$short_url = rtrim(BASEDIR, '/') . $short_filename;
-
@mkdir(ROOT . $base_path, 0777, true);
-
$filename = ROOT . $short_filename;
-
if (!imagepng($im, $filename)) {
-
throw new Exception("创建图片时出错。");
-
}
-
@imagedestroy($im);
-
return $short_url;
-
}
-
-
?>
-
-
<!DOCTYPE HTML><html><head>
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>长微博工具</title>
-
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.6.2/jquery.min.js"></script>
-
</head>
-
<body>
-
<h1>长微博工具</h1>
-
<p><textarea name="text" id="text" rows="20" cols="60"></textarea></p>
-
<pre id="pre"></pre>
-
<p><a target="_blank" href="" id="url"></a></p>
-
<p><input type="button" id="format" value="格式化" /><input type="button" id="button" value="生成长微博" /> <br/><br/><br/><br/> <a href="http://changweibo.debake.com/" style="font-size:9px; color:#666; text-decoration:none">长微博</a></p>
-
<script type="text/javascript">
-
BIG_FONT_WIDTH = 44;
-
-
function f(v,w,c){
-
c = 0;
-
w = w || BIG_FONT_WIDTH;
-
return v.replace(/[\S\s]/g,function(a){
-
if(/[\r\n]/.test(a)) {
-
c = -2;
-
return "\r\n";
-
}
-
c += /[\x00-\xFF]/.test(a) ? 1 : 2;
-
if(c>=w){
-
c = 0;
-
return "\r\n"+a;
-
}
-
return a;
-
});
-
}
-
$(function(){
-
$("#format").click(function(){$("#text").val(f($("#text").val()));});
-
$("#button").click(function(){
-
if($("#text").val().length<1){
-
alert("无内容");
-
} else {
-
$.ajax({
-
type:"POST",
-
url:location.pathname,
-
data:"text="+$("#text").val(),
-
dataType:"json",
-
success:function(m){
-
if(m.message)$("#pre").innerHTML(m.message);
-
if(m.imgurl)$("#url").attr("href", m.imgurl).text(m.imgurl);
-
}
-
});
-
}
-
});
-
});
-
</script>
-
</body>
-
</html>
text2pic
-
composer require dsgygb/text2pic
-
touch test.php
-
<?php
-
require 'vendor/autoload.php';
-
-
$transform = new Text2pic\Transform('by text2pic');
-
$result = $transform->generate("hello world");
-
print_r($result);
-
#中文字体路径 /c/windows/fonts/sihei.ttf
-
$transform=new Text2pic\Transform($by,$uploadsPath,$uploadsUrl,$fontPath);
wkhtmltopdf
地址 https://wkhtmltopdf.org/downloads.html 下载后有 2 个工具 wkhtmltoimage 和 wkhtmltopdf 分别是将网页转图片和pdf 的,具体使用参考 http://blog.csdn.net/qq_14873105/article/details/51394026
-
#生成图片 https://gist.github.com/vibbow/5702882
-
wkhtmltoimage http://www.baidu.com/ baidu.jpg
-
#php 调用 使用绝对路径
-
$r=shell_exec("/user/bin/wkhtmltoimage http://www.baidu.com/ baidu.jpg");
-
$r=shell_exec("/user/bin/wkhtmltoimage -q {$filename}.html {$filename}.jpg");
phpwkhtmltopdf
-
composer require mikehaertl/phpwkhtmltopdf
-
require './vendor/autoload.php';
-
use mikehaertl\wkhtmlto\Image;
-
-
// You can pass a filename, a HTML string, an URL or an options array to the constructor
-
$image = new Image('/path/to/page.html');
-
$image->saveAs('/path/to/page.png');//保存
-
-
// ... or send to client for inline display
-
$image->send();//浏览器显示
-
-
// ... or send to client as file download
-
$image->send('page.png');//浏览器显示并下载
-
-
#另外一个库https://github.com/knplabs/snappy
-
use Knp\Snappy\Pdf as newpdf;
-
$snappy = new newpdf('wkhtmltopdf');
-
header('Content-Type: application/pdf');
-
header('Content-Disposition: attachment; filename="file.pdf"');
-
// echo $snappy->getOutput('http://www.github.com');
-
$snappy->generateFromHtml('<h1>Bill</h1><p>You owe me money, dude.</p>', 'bill-123.pdf');
more
-
小人举牌图片生成 https://github.com/jokin1999/HoldUpSign
-
网页保存为图片及高清截图的优化https://segmentfault.com/a/1190000011425316
-
https://stackoverflow.com/questions/5663814/how-do-i-get-wkhtmltopdf-to-execute-via-php http://www.jianshu.com/p/4d65857ffe5e
这篇关于PHP 将网页转图片的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享