我正在使用基于PHP的通用CMS,我想创建一个脚本,读取pdf创建的缩略图并缓存它。有很多不同的答案,我确实在不同版本的imagick中遇到了一些问题,但这是适合我的脚本。
有些人可能觉得它很有用,也许有人可以建议我,如果它被优化了吗?<?php
$loc = *the file location*;
$pdf = *the file name*;
$format = "jpg";
$dest = "$loc$pdf.$format";
if (file_exists($dest))
{
$im = new imagick();
$im->readImage($dest);
header( "Content-Type: image/jpg" );
echo $im;
exit;
}
else
{
$im = new imagick($loc.$pdf.'[0]');
$im->setImageFormat($format);
$width = $im->getImageheight();
$im->cropImage($width, $width, 0, 0);
$im->scaleImage(110, 167, true);
$im->writeImage($dest);
header( "Content-Type: image/jpg" );
echo $im;
exit;
}
?>
答案 0 :(得分:1)
利用PHP和ImageMagick创建PDF缩略图
http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/
在本文中,我们将讨论如何使用PHP和ImageMagick从给定的PDF生成缩略图,将它们存储在临时(或“缓存”)目录中,并将它们提供给Web。
我们最近的一位客户要求显示我们为他们部署的Joomla CMS发布的PDF缩略图。
要求相当简单,但执行起来要多得多。安装ImageMagick,ImageMagick PHP绑定(顺便提一下,并设计了解决方法),并调整了一些代码后,确定了以下解决方案:
<?php
function thumbPdf($pdf, $width)
{
try
{
$tmp = 'tmp';
$format = "png";
$source = $pdf.'[0]';
$dest = "$tmp/$pdf.$format";
if (!file_exists($dest))
{
$exec = "convert -scale $width $source $dest";
exec($exec);
}
$im = new Imagick($dest);
header("Content-Type:".$im->getFormat());
echo $im;
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
thumbPdf($file, $size);
}
?>
上面的代码假设您已经为临时目录(通常是chmod 755或chmod 777,具体取决于您的勇气程度)提供了相应的权限,您已将上述代码段保存在名为thumbPdf.php的文件中,并将其放置在您的Web服务器上可见的位置。
从GET获取参数后,代码检查目标临时目录,如果不存在所需图像,则使用ImageMagick的转换程序生成PDF缩略图,大小调整为适当的比例,并将图像保存在临时目录。最后,它将缩略图重新加载到ImageMagick PHP对象中,并将内容输出到浏览器。
调用上面的代码相当容易;只需从图像标记中调用PHP脚本,如下所示:
<img src="/path/to/thumbPdf.php?pdf=your.pdf&size=200" />
上面的代码会从“your.pdf”的第一页生成一个缩略图,大小为200像素宽,高度恰当。
祝你好运,并且开心网站管理!
答案 1 :(得分:1)
我知道这里已经讨论过了:
引用drew101:
使用PHP扩展而不是使用exec,您将获益良多 或类似的功能。内置扩展将更快,使用更少 内存,因为您不必生成新进程并读取输出 背部。图像对象将直接在PHP中提供,而不是 必须读取文件输出,这应该使图像更容易 与之合作。
如果您有一个繁忙的网站,可能会创建大量进程来编辑图像 开始减慢速度并消耗额外的内存。
答案 2 :(得分:0)
如果您因某种原因未安装Imagick php库,可以使用ghost脚本并使用以下示例生成pdf缩略图:
exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=xyz.jpg xyz.pdf');