我正在使用Imagick :: resizeImage来创建pdf文件的每个页面的缩略图PNG图像。然而,我回来的图像真的很模糊。我怎样才能让它变得更清晰?任何指针都会非常感激。
我试过调整Imagick :: resizeImage的'blur'参数在0.1 - 1之间,但没有成功。
List
原始pdf链接:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4905263/pdf/ksgt-06-04-1091539.pdf
答案 0 :(得分:3)
不是渲染然后调整栅格大小,最好先将PDF渲染到正确的像素数。它会更快,你可以确定内容的清晰度是正确的。
例如:
$ time convert -density 50 ksgt-06-04-1091539.pdf[0] x2.png
real 0m0.325s
user 0m0.299s
sys 0m0.024s
使:
-density 50
制作一个与您的样本相同的像素数的页面,425。
在想象中你可以这样做(正如@ fmw42的优秀答案所说):
#!/usr/bin/env php
<?php
$target_width = 400;
# get natural size, calculate density we need for target width
$im = new imagick();
$im->pingImage($argv[1]);
$geo = $im->getImageGeometry();
$natural_width = $geo['width'];
$density = 72.0 * $target_width / $natural_width;
# load at correct resolution for target_width
$im = new imagick();
$im->setResolution($density, $density);
$im->readImage($argv[1]);
# and write back
$im->writeImage($argv[2]);
不幸的是,在想象中做ping和读取都有点慢:
$ time ./pdfthumb.php ksgt-06-04-1091539.pdf x.png
real 0m2.773s
user 0m2.737s
sys 0m0.036s
这不是想象,但是vipsthumbnail
可以执行ping并在一次操作中读取:
$ time vipsthumbnail ksgt-06-04-1091539.pdf -s 400x -o x2.png
real 0m0.064s
user 0m0.064s
sys 0m0.011s
如果速度很重要,可能值得考虑。 libvips has a php binding所以你可以直接调用它,但如果你这样做,你会遇到可怕的许可问题,因为它使用GPL库poppler进行PDF渲染,感叹。出于同样的原因,ImageMagick使用GhostScript和shell。
答案 1 :(得分:2)
不幸的是,我不清楚Imagick。但是在Imagemagick命令行中,我会做有时被称为超级采样的事情。这是使用大密度来读取PDF,然后通过反比例因子调整大小。
例如,标称密度为72 dpi。我会以4 * 72 = 288 dpi读取输入PDF。然后在光栅化之后,我会调整1/4 = 25%或者更大的结果大于25%,比如说50%。这是您的第一页双向完成:
convert -density 288 ksgt-06-04-1091539.pdf[0] -resize 25% result1.png
convert -density 288 ksgt-06-04-1091539.pdf[0] -resize 50% result2.png
在Imagick中,关键是:
$imagick = new Imagick();
$imagick->setImageResolution(288, 288);
$imagick->readImage('myfile.pdf');