用php为imagick设置密度参数
Posted
技术标签:
【中文标题】用php为imagick设置密度参数【英文标题】:set density parameter for imagick with php 【发布时间】:2012-12-11 14:52:53 【问题描述】:我想使用 Imagick 将 pdf 页面转换为 png 图像。
我用php试过了,但是画质很差。用命令行试试,结果很完美。
PHP 代码
$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' );
$params = $im->identifyImage();
$width = $params['geometry']['width']*1;
$height = $params['geometry']['height']*1;
$im->setResolution(400,400);
$im->resizeImage($width ,$height, imagick::FILTER_SINC, 1, true);
$im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png');
$im->clear();
$im->destroy();
命令行代码
convert -density 400 a.pdf -resize 25% -a.png
PHP 代码(第二次尝试)
$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' );
$im->setOption('density','400x400');
$im->setOption('resize','25%');
$im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png');
$im->clear();
$im->destroy();
结果仍然很糟糕。
我能做什么?我想在我的 PHP 代码中使用密度参数,但是如何使用呢?
使用 PHP 输出
命令行输出
【问题讨论】:
您也应该提供 PDF 文件。 这里是 PDF 文件 => cevhersys.net/5663.pdf 另外,如果 PHP API 无法满足您的需求,您可以随时使用exec
或shell_exec
执行命令并生成您需要的文件。
【参考方案1】:
来自手册http://php.net/manual/en/imagick.setresolution.php
Imagick::setResolution() 必须在加载或创建图像之前调用。
看到这个答案Pdf to image using php-imagick api
【讨论】:
【参考方案2】:您需要在阅读文件之前设置分辨率。
$im = new imagick();
$im->setResolution(200,200);
$im->readImage(__DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']');
然后,结果将是完美的。 希望这对某人有所帮助。
【讨论】:
以上是关于用php为imagick设置密度参数的主要内容,如果未能解决你的问题,请参考以下文章