查看: 1128|回复: 0

[PHP学习] php将html转为图片的实现方法

发表于 2018-3-31 08:00:03

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

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

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

需要借助的类库是mPDF ,imagick

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

  1. include('./html2pdf/mpdf');
复制代码

整一个函数

  1. /*
  2. 名称 html转换为pdf图片
  3. 功能 将html页面转换为pdf图片(部分css样式无法识别)
  4. 参数数量 2个
  5. 1.必须 html代码 可以用file_get_contenth获取
  6. 2.必须 生成pdf存放位置路径
  7. 3.非必须 pdf宽
  8. 4.非必须 pdf高
  9. 返回值 图片名称
  10. 实例 code($html,'img/1.pdf');
  11. * */
  12. function html2pdf($html, $PATH, $w=414 ,$h=736){
  13. //设置中文字体(很重要 它会影响到第二步中 图片生成)
  14. $mpdf=new mPDF('utf-8');
  15. $mpdf->autoScriptToLang = true;
  16. $mpdf->autoLangToFont = true;
  17. //设置pdf的尺寸
  18. $mpdf->WriteHTML('<pagebreak sheet-size="'.$w.'mm '.$h.'mm" />');
  19. //设置pdf显示方式
  20. $mpdf->SetDisplayMode('fullpage');
  21. //删除pdf第一页(由于设置pdf尺寸导致多出了一页)
  22. $mpdf->DeletePages(1,1);
  23. $mpdf->WriteHTML($html);
  24. $pdf_name = md5(time()).'.pdf';
  25. $mpdf->Output($PATH.$pdf_name);
  26. return $pdf_name;
  27. }
复制代码

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

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

  1. yum install -y ImageMagick
  2. yum install -y ImageMagick-devel
  3. yum install -y gcc
  4. yum install -y php-pear
  5. yum install -y ghostscript
  6. yum install -y ghostscript-devel.x86_64
复制代码

到这一步注意运行

  1. yum list |grep imagick
复制代码

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

  1. yum install -y php56w-pecl-imagick.x86_64
  2. yum install -y php56w-pecl-imagick-devel.x86_64
复制代码

重启服务器

  1. service nginx restart
  2. service php-fpm restart
复制代码

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

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

  1. /*
  2. 名称 pdf转换为png图片
  3. 功能 将pdf图片转换为png图片
  4. 参数数量 2个
  5. 1.必须 html代码 可以用file_get_contenth获取
  6. 2.必须 生成pdf存放位置路径
  7. 实例 code($html,'img/1.pdf');
  8. * */
  9. function pdf2png($PDF, $PNG, $w=50, $h=50){
  10. if(!extension_loaded('imagick')){
  11. return false;
  12. }
  13. if(!file_exists($PDF)){
  14. return false;
  15. }
  16. $im = new Imagick();
  17. $im->setResolution($w,$h); //设置分辨率
  18. $im->setCompressionQuality(15);//设置图片压缩的质量
  19. $im->readImage($PDF);
  20. $im -> resetIterator();
  21. $imgs = $im->appendImages(true);
  22. $imgs->setImageFormat( "png" );
  23. $img_name = $PNG;
  24. $imgs->writeImage($img_name);
  25. $imgs->clear();
  26. $imgs->destroy();
  27. $im->clear();
  28. $im->destroy();
  29. return $img_name;
  30. }
复制代码

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

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



回复

使用道具 举报