用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 无法满足您的需求,您可以随时使用execshell_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设置密度参数的主要内容,如果未能解决你的问题,请参考以下文章

imagick - 设置输出pdf的纸张大小

使用PHP Imagick将ICO转换为PNG。

php7 使用imagick 的坑

php imagick生成gif动画的方法

win10 php7.2 nginx 安装 imagick,适用于phpstudy

在 PHP 中使用 Imagick 将 svg 转换为 png 时出现奇怪的裁剪问题