2

在我的网络应用程序中,用户可以创建一些保存在我的数据库中的 HTML/CSS 标记。我想为该标记提供一个“缩略图”,例如在概览视图中。

由于缩略图应该在 200x200px 左右,而原始标记的大小应该在 900x900px 左右,我必须找到一种方法来“缩放”该标记:就好像我在 900px 处截取了渲染标记的屏幕截图一样并将其缩小到200px。

有人知道这是否可以使用 JavaScript 或 PHP?或者也许是另一种服务器端语言?我想避免使用任何第三方小程序,例如 ActiveX。

编辑:我猜某种混搭,在客户端截取屏幕截图,然后发送到服务器也可以。

4

6 回答 6

5

您可以使用WKHTMLTOPDF。它还具有保存名为 WKHTMLTOIMAGE 的图像的功能(我认为这是一个不同的发行版,但您可以从同一个链接下载它)。您可以使用exec()PHP 作为系统调用来运行它。使用像xvfb您这样的虚拟缓冲区可以在服务器上无头运行 WKHTMLTOIMAGE。它是基于 WebKit 的,所以产生的结果非常好......

您可以使用标准 PHP 函数缩放生成的图像,例如这些帖子中所述:

您可能想查看我对这个问题HTML2PDF in PHP - convert utility & scripts - examples & demos的回答,也许它对您也有帮助。

于 2012-04-13T12:12:48.540 回答
1

最好的办法是将工作分成两部分:制作屏幕截图,然后将其缩小到 200x200。对于第一部分,您需要一个可以将 HTML 直接渲染为位图文件(可能是 PNG)的命令行工具或库;我暂时不知道有任何消息,但是如果您真的有决心,我敢肯定,如果您知道自己在做什么,那么围绕 webkit 和 libpng 做一个小包装应该不会太难。对于缩放,您可以使用 gd(在大多数 PHP 设置中配置)或 ImageMagick(更强大)。一旦有了这两个,只需编写正确的胶水将它们组合在一起即可。

于 2012-04-13T12:13:53.347 回答
0

简而言之,没有“简单”的方法可以做到这一点。

然而,这只是使用 PHP 的网站截图的副本

于 2012-04-13T12:15:05.357 回答
0

如果你想截取用户看到的内容,你必须使用一些客户端技术。我认为你应该能够用闪光灯做到这一点。

这个答案可能会对您有所帮助: Using HTML5/Canvas/JavaScript to take screenshots

否则,您可能会尝试在服务器端“重新创建”类似的视图,例如使用WKHTMLTOPDF(如 Michal 建议的那样)。

于 2012-04-13T12:17:22.890 回答
0

是的,这是可能的,我什至实现了一个使用 php 前端作为服务入口点的解决方案。真正的工作由渲染页面的 PhantomJS/Xvfb 处理,它执行的 javascript(对于网络上所有动态生成的内容非常重要)。

基本上,使用 PhantomJS 和 Xvfb 帧缓冲区使这项任务变得非常简单,请在此处查看更多信息:http ://code.google.com/p/phantomjs/和此处http://skookum.com/blog/dynamic-screenshots-在服务器上使用 phantomjs/

干杯

于 2012-04-13T12:18:14.700 回答
0

为此,我使用了http://www.websupergoo.com/的 ABCpdf,看起来效果不错,但它是一个商业产品,尽管它带有免费试用期。我不隶属于这家公司。

于 2012-04-13T12:34:39.607 回答