欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php将html转为图片的实现方法

程序员文章站 2024-03-12 18:26:38
在服务器端解析将编译好的html转换为图片。 由于html一般由客户端浏览器解析,服务器端不能直接解析html代码。所以我们需要借助php类库及扩展完成这一需求。 文件...

在服务器端解析将编译好的html转换为图片。

由于html一般由客户端浏览器解析,服务器端不能直接解析html代码。所以我们需要借助php类库及扩展完成这一需求。

文件转换过程为 html —> pdf —>png。

需要借助的类库是mpdf ,imagick

pdf 官方下载地址是:http://www.mpdf1.com/mpdf/index.php (推荐下在6.0 虽然大了点)这是一个类库直接下载 上传到服务器即可,里面东西不少,新建一个 html2pdf 的文件夹 引入

include('./html2pdf/mpdf');

整一个函数

/*
名称  html转换为pdf图片
功能  将html页面转换为pdf图片(部分css样式无法识别)
参数数量 2个
1.必须 html代码 可以用file_get_contenth获取
2.必须 生成pdf存放位置路径
3.非必须 pdf宽
4.非必须 pdf高
返回值 图片名称
实例  code($html,'img/1.pdf');
 * */
function html2pdf($html, $path, $w=414 ,$h=736){
 //设置中文字体(很重要 它会影响到第二步中 图片生成)
$mpdf=new mpdf('utf-8');
$mpdf->autoscripttolang = true;
$mpdf->autolangtofont = true;
//设置pdf的尺寸
$mpdf->writehtml('<pagebreak sheet-size="'.$w.'mm '.$h.'mm" />');


//设置pdf显示方式
$mpdf->setdisplaymode('fullpage');

//删除pdf第一页(由于设置pdf尺寸导致多出了一页)
$mpdf->deletepages(1,1);

$mpdf->writehtml($html);

$pdf_name = md5(time()).'.pdf';

$mpdf->output($path.$pdf_name);

return $pdf_name;

}

用这个函数基本就可以解决html到pdf的问题,需要注意的是mpdf并不能有效的识别html中所有的css样式,例如position border-radius等。位置可以用margin解决,需要显示圆角图片的话,就需要将图片裁剪为圆形了。

接下来开始将pdf转换为png图片了这一步需要在服务器安装imagemagick组件 一次运行一下命令

yum install -y imagemagick
yum install -y imagemagick-devel
yum install -y gcc
yum install -y php-pear
yum install -y ghostscript
yum install -y ghostscript-devel.x86_64

到这一步注意运行

yum list |grep imagick

根据查询结果 根据自己服务器版本 选择安装 我的是5.6.3

yum install -y php56w-pecl-imagick.x86_64
yum install -y php56w-pecl-imagick-devel.x86_64

重启服务器

service nginx restart
service php-fpm restart

使用 phpinfo() 或运行 php -m | grep imagick 来查看是否安装成功

然后使用函数将已经生成的pdf转换为png就可以了

/*
名称  pdf转换为png图片
功能  将pdf图片转换为png图片
参数数量 2个
1.必须 html代码 可以用file_get_contenth获取
2.必须 生成pdf存放位置路径

实例  code($html,'img/1.pdf');
 * */
function pdf2png($pdf, $png, $w=50, $h=50){
if(!extension_loaded('imagick')){
return false;
}
if(!file_exists($pdf)){
return false;
}

$im = new imagick();

$im->setresolution($w,$h); //设置分辨率
$im->setcompressionquality(15);//设置图片压缩的质量

$im->readimage($pdf);
$im -> resetiterator();
$imgs = $im->appendimages(true);
$imgs->setimageformat( "png" );
$img_name = $png;
$imgs->writeimage($img_name);
$imgs->clear();
$imgs->destroy();
$im->clear();
$im->destroy();

return $img_name;
}

ok,基本完成简单页面的图片化了。图片大小为1m左右。小了不清楚。

以上这篇php将html转为图片的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。