日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

長微博生成(將html轉化為圖片)原理淺析

瀏覽:199日期:2022-06-02 14:56:22

在平時工作中有一些需求,簡單而言就是需要將一些內容生成圖片。簡單的內容通過PhotoShop處理還行,但是類似于帶表格等的內容,每次都通過PhotoShop進行處理太浪費時間。網上有很多類似于長微博等的生成工具,生成簡單的圖片還行,但是要使用富文本生成圖片,則多需要money,于是便自己研究了一下基于PHP的實現。

需求及原理

基于PHP,將html內容生成圖片(PNG,JPEG等)

實現方法1. 直接通過圖形函數生成

可以直接使用PHP中自帶的GD庫或imagick,將文字內容轉換成為圖片。這在處理純文字內容的時候是很給力的,但是對于富文本內容來說卻很吃力了,很難處理好。目前開源的有painty等,可以支持p、img等幾個簡單的html標簽。

2. html->pdf->png

該方式即首先將html內容生成pdf文檔,再將pdf文檔轉換成為圖片。

html to pdf:目前較為成熟的方案包括tcpdf,HTML2PDF等,其實HTML2PDF也是使用的tcpdf的內核;

pdf to png:可以通過imagick php擴展。

目前基于該種方式的開源代碼有html to image,其原理如下圖所示。

長微博生成(將html轉化為圖片)原理淺析

核心代碼為(摘自:http://buffernow.com/html-to-image-php-script/):

//獲取某個URL地址的內容 echo file_get_contents(’http://loosky.net/’); //將內容轉換成pdf文檔 $html2pdf = new HTML2PDF(’P’, ’A4’); $html2pdf->writeHTML($html_content); $file = $html2pdf->Output(’temp.pdf’,’F’); //將pdf文檔轉換成圖片 $im = new imagick(’temp.pdf’); $im->setImageFormat( 'jpg' ); $img_name = time().’.jpg’; $im->setSize(800,600); $im->writeImage($img_name); $im->clear(); $im->destroy();

這里使用了HTML2PDF的代碼,其實個人建議使用tcpdf的,畢竟tcpdf的版本更新,功能更為強大。經過實際測試,tcpdf對中文、html格式等的支持更好,相對而言,HTML2PDF有點慘不忍睹,較長的中文會出現無法自動換行等基本錯誤。

但同時,這種方法存在一個較大的缺陷,當插入了圖片等媒體后,經常會出現一頁內無法放進去需要重新在另外一頁進行排版的問題,從而生成的圖片就會有較大的空白區域;同時每頁的內容如果沒有完全排滿的話,生成的圖片同樣存在較大的空白區域,十分不美觀。

因此,并不推薦這種方式。

3. 通過截圖

該種方式類似于采用瀏覽器的截圖功能,直接將某個URL地址的內容進行截圖。相對前面兩種方式而言:第一,對于富文本的html內容渲染更為方便、簡單,直接生成html代碼即可;第二,內容排版更為合理,不會出現pdf文檔中存在的空白區域等問題;第三,對于中文的支持更為友好。

目前主要的開源項目包括:

khtml2png:基于Linux平臺,可以將html轉成圖片格式,有如下要求:

g++KDE 3.xkdelibs for KDE 3.x (kdelibs4-dev)zlib (zlib1g-dev)cmake

對于服務器而言,尤其是資源比較吃緊的VPS而言,安裝一個KED有點花銷太大。

CutyCapt及其兄弟版本IECapt:其中CutyCapt是基于Linux、Windows平臺,IECapt基于Windows平臺,支持svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm等多種格式,使用均較為簡單,直接使用如下命令。

注意:CutyCapt的可執行命令在Windows平臺和Linux平臺下的大小寫不太一致。

./CutyCapt --url=http://www.example.org --out=example.png IECapt --url=http://www.example.org/ --out=localfile.png

它的部署要求是:

CutyCapt depends on Qt 4.4.0+.

但是它比khtml2png好的一點是它可以不用裝X server,可以用Xvfb這種輕量級的東西,然后可以這樣使用:

xvfb-run --server-args='-screen 0, 1024x768x24' ./CutyCapt --url=... --out=...

通過對各種實現方式進行實際的對比,本人傾向于采用CutyCapt的方式。

具體實現過程

1、通過嵌入富文本編輯器,提供富文本編輯功能,同時可以提供對作者信息、版權標記、圖片大小格式等的定制。

2、將提交的內容進行過濾,并生成htm/html文檔,通過CSS對生成的文檔內容進行格式渲染。

3、通過PHP執行CutyCapt命令,對生成的網頁文件進行截圖。

到這一步已經完全可以實現html內容生成圖片的功能了,但CutyCapt生成的圖片相對而言會比較大,因此還可以進一步進行優化。

4、通過imagick對生成的圖片進行優化

imagick具有強大的圖片處理功能,可以優化CutyCapt生成的圖片的質量及大小,同時還可以方便地進行加水印等操作。

開發經驗分享

在實際開發過程中碰到了各種問題,進行一些分享。

1、操作系統選擇

CutyCapt及imagick都有Linux和Windows的版本,在Windows下面的開發、運行不存在較大的問題,按照正常步驟進行安裝配置即可。

在Linux平臺下,CutyCapt的安裝教程可參考http://www.cszhi.com/20130305/cutycapt.html:

centos下安裝cutycapt:

(1)安裝qt47

增加qt47的源

vim /etc/yum.repos.d/atrpms.repo//加入如下內容[atrpms]name=CentOS $releasever – $basearch – ATrpmsbaseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stablegpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpmsgpgcheck=1enabled=1[atrpms-testing]name=CentOS $releasever – $basearch - ATrpms testingbaseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testinggpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpmsgpgcheck=1enabled=1//進行安裝yum updateyum install qt47yum install qt47-develyum install qt47-webkityum install qt47-webkit-devel

2、安裝cutycapt

yum install svnsvn co https://cutycapt.svn.sourceforge.net/svnroot/cutycaptmv cutycapt/CutyCapt /usr/local/cutycaptcd /usr/local/cutycaptqmakeqmake-qt47

3、安裝xvfb

yum install Xvfb

4、測試cutycapt截圖

xvfb-run --server-args='-screen 0, 1024x768x24' CutyCapt --url=http://www.baidu.com --out=baidu.png

5、將xvfb置入后臺運行

Xvfb -fp /usr/share/fonts :0 -screen 0 1024x768x24 &DISPLAY=:0 ./CutyCapt --url=http://www.baidu.com --out=baidu.png

ubuntu下安裝cutycapt

1、兩條命令搞定

apt-get install cutycaptapt-get install xvfb

2、測試截圖

xvfb-run --server-args='-screen 0, 1024x768x24' CutyCapt --url=http://www.baidu.com --out=baidu.png

中文亂碼問題:

將windows下的中文字體上傳至/usr/share/fonts目錄,執行下命令fc-cache即可。

在這里,作者想說的是,盡量選擇Ubuntu吧,安裝方便;更重要的是,CentOS下面會出現各種問題,如CutyCapt: cannot connect to X server :99等,會讓你非常郁悶,我甚至安裝了新的包含Gnome、KDE桌面環境的操作系統仍無法解決,而在Ubuntu下面幾乎不存在任何問題。

2、Web服務器的選擇

因為截圖功能涉及到PHP需要執行操作系統的CutyCapt命令,可以通過system()或者exec()函數。

作者分別使用了apache和Nginx兩種Web服務器,在Nginx下會出現執行調用CutyCapt的PHP腳本無法運行的情況,會遇到比較麻煩的權限問題,http://alfred-long.iteye.com/blog/1578904中提供了一種解決方案,但作者沒有測試成功。使用apache服務器則是一路暢通,不存在這個問題。

因此,作者建議選擇Ubuntu+apache的組合,千萬不要選擇CentOS+Nginx,需要解決的麻煩問題太多,從而也容易造成一些不安全的因素。

安裝代碼如下:

apt-get install apache2apt-get install php5 libapache2-mod-php53、Ubuntu中安裝imagick

apt-get install php5-dev php5-cli php-pear //安裝支持環境apt-get install imagemagick //有可能不是最新版本,需要通過源代碼安裝最新版本//源代碼方式安裝http://www.imagemagick.org/script/download.phpcd /usr/local/src wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.7-0.tar.gztar xzvf ImageMagick-6.8.7-0.tar.gzcd ImageMagick-6.8.7-0/./configure && make && make installapt-get install graphicsmagick-libmagick-dev-compatpecl install imagickecho extension=imagick.so >>/etc/php5/conf.d/imagick.iniservice apache2 restart

常見錯誤:

在運行pecl install imagick 時有以下出錯提示:

checking if ImageMagick version is at least 6.2.4... configure: error: no. You need at least Imagemagick version 6.2.4 to use Imagick.ERROR: `/tmp/pear/temp/imagick/configure --with-imagick=hjw’ failed

根據提示是沒有安裝Imagemagick或者Imagemagick版本不夠,可以通過源代碼的方式安裝最新版本的Imagemagick。

4、Linux平臺下的字體渲染

可以將Windows平臺下的雅黑、宋體、楷體、黑體等常用中文字體安裝到Ubuntu系統中,避免出現截圖中的字體不好看的情況,同時也滿足對富文本編輯中支持的字體進行渲染。

標簽: 微博
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品国产嫩草在线观看| 久久久国产精品网站| 美女精品在线观看| 日本aⅴ亚洲精品中文乱码| 水野朝阳av一区二区三区| 午夜亚洲福利在线老司机| 国产精品日韩欧美一区| 自由日本语亚洲人高潮| 新版的欧美在线视频| 国产一区二区三区四区| 精品国产鲁一鲁****| 国产91欧美| 久久久久99| 国产韩日影视精品| 日本 国产 欧美色综合| 亚洲综合精品| 日韩国产一二三区| 欧美一级二级视频| 欧美亚洲精品在线| 欧美日韩一区二区高清| 久久超级碰碰| 免费久久99精品国产自在现线| 奶水喷射视频一区| 免费视频最近日韩| 日韩超碰人人爽人人做人人添| 国产日韩视频在线| 精品国产精品久久一区免费式| 97欧美在线视频| 欧美久久精品一级c片| 免费成人在线视频观看| 91嫩草精品| 岛国av在线网站| 亚洲精品888| 日韩精品一区二区三区中文| 麻豆久久一区| 精品亚洲自拍| 国产精品成人**免费视频 | 超级白嫩亚洲国产第一| 婷婷成人综合| 久久精品xxxxx| 麻豆mv在线观看| 午夜在线视频观看日韩17c| 日韩精品亚洲专区在线观看| 精品视频一区二区三区四区五区 | 亚洲欧美久久精品| 国产精品igao视频网网址不卡日韩| 日韩免费一区| 在线亚洲精品| 日本中文字幕一区二区视频| 老司机精品视频网| 亚洲无线一线二线三线区别av| 亚洲精品系列| 在线天堂资源www在线污| 中文精品视频| 免费在线亚洲欧美| 日韩成人精品一区| 国产精品亚洲欧美日韩一区在线| 伊人久久大香线蕉av超碰演员| 亚洲日产国产精品| 国产精品13p| 日韩高清不卡一区二区| 久久久五月天| 国产精品亚洲综合在线观看| 国产va免费精品观看精品视频| 免费在线成人网| 国产精品久久观看| 亚洲久草在线| 久久久国产亚洲精品| 久久激五月天综合精品| 1024精品久久久久久久久| 欧美国产先锋| 蜜臀av亚洲一区中文字幕| 日韩理论片av| 国产精品美女在线观看直播| 麻豆久久精品| 色婷婷久久久| 精品久久久亚洲| 亚久久调教视频| 在线日韩欧美| 丰满少妇一区| 欧美亚洲二区| 日韩专区在线视频| 日韩欧美一区免费| 久久激情五月婷婷| 中文字幕一区二区三区四区久久 | 7777精品| 综合国产在线| 欧美日韩日本国产亚洲在线| 麻豆精品久久久| 日本精品一区二区三区在线观看视频| 亚洲网站视频| 中文一区一区三区高中清不卡免费| 日本午夜精品久久久久| 丝袜美腿成人在线| 欧美精品一区二区久久| 五月激情久久| 日本激情一区| 国产黄色精品| 日韩综合一区二区| 丝袜美腿高跟呻吟高潮一区| 国产精品av久久久久久麻豆网| 欧美国产美女| 国产成人精品999在线观看| 午夜性色一区二区三区免费视频| 激情综合自拍| 亚洲天堂黄色| 国产91精品对白在线播放| 国产一二在线播放| 国内精品麻豆美女在线播放视频| 国产精品久av福利在线观看| 日韩精品欧美大片| 蜜桃av一区二区三区电影| 91久久中文| 在线成人直播| 婷婷亚洲综合| 激情久久久久久久| 亚洲激情中文| 99视频一区| 狠狠干成人综合网| 激情91久久| 日韩午夜高潮| 中文一区一区三区免费在线观| 天堂8中文在线最新版在线| 欧洲激情综合| 日韩精品1区| 国产成人精品三级高清久久91| 亚洲精品成a人ⅴ香蕉片| 国产欧美一区二区三区国产幕精品| 欧美久久久网站| 亚洲综合色婷婷在线观看| 在线观看一区| 亚洲ww精品| 日韩二区三区在线观看| 丝袜美腿亚洲色图| 蜜桃一区二区三区在线观看| 综合一区二区三区| 国产乱码精品一区二区三区四区| 国产精品sss在线观看av| 精品一区二区三区在线观看视频| 精品国产乱码| 另类中文字幕国产精品| 久久天堂成人| 午夜亚洲福利在线老司机| 亚洲tv在线| 国产欧美一区二区三区精品观看 | 久久精品国产免费| 美女视频免费精品| 在线手机中文字幕| 亚洲国产综合在线看不卡| 亚洲一区二区三区高清| 蜜臀久久99精品久久久久久9 | 亚洲综合精品| 欧美一区=区三区| 水蜜桃久久夜色精品一区| 91精品xxx在线观看| 亚洲福利免费| 亚州av日韩av| 精品国产三区在线| 日韩欧美精品综合| 免费日韩精品中文字幕视频在线| 日韩av中文在线观看| 成人污污视频| 午夜久久免费观看| 欧美日韩1区| 日韩一区二区三区免费播放| 亚洲无线一线二线三线区别av| 美美哒免费高清在线观看视频一区二区| 欧美一级二区| 天堂中文av在线资源库| 性色一区二区| 免费一级欧美在线观看视频| 成人羞羞视频在线看网址| 视频一区二区国产| 久久国产乱子精品免费女| 久久久久久久欧美精品| 欧美日本不卡高清| 韩国三级一区| 亚洲色图国产| 91一区二区三区四区| 久久最新视频| 麻豆一区二区在线| 欧美久久精品一级c片| 91在线成人| 久久久久美女| 国产欧美一级| 99视频精品视频高清免费| 亚洲不卡视频| 欧美日韩免费观看视频| 日韩动漫一区| 久久久久欧美精品| 日韩不卡一二三区| 久久人人97超碰国产公开结果| 日韩美女国产精品| 精品三级久久| 国产亚洲精品精品国产亚洲综合| 视频福利一区| 97久久亚洲| 日韩午夜精品| 免费福利视频一区二区三区| 日韩精品成人|