我遇到了imagick
php库的问题。
我正在我的文件系统中进行递归搜索,并查找任何pdf
个文件。
$it = new RecursiveDirectoryIterator("/test/project");
$display = Array ('pdf');
foreach(new RecursiveIteratorIterator($it) as $file){
if (in_array(strtolower(array_pop(explode('.', $file))), $display))
{
if(file_exists($file)){
echo $file; //this would echo /test/project/test1.pdf
$im = new Imagick($file);
$im->setImageFormat("jpg");
file_put_contents('test.txt', $im);
}
}
}
但是,我收到错误
Fatal error: Uncaught exception 'ImagickException' with message 'Can not process empty Imagick object' in /test.php:57
Stack trace:
#0 /test.php(57): Imagick->setimageformat('jpg')
#1 {main}
thrown in /test.php on line 57
line 57 is $im->setImageFormat("jpg");
但是,如果我将$im = new Imagick($file)
替换为$im = new Imagick('/test/project/test1.pdf'),
,则错误消失了。
我不知道为什么会这样。有人可以给我一个暗示这个问题吗?非常感谢
答案 0 :(得分:3)
根据this,.jpg
文件'格式为JPEG
。
注1 :
您的$file
变量是一个对象SplFileInfo
,但您总是像字符串一样使用它。在RecursiveDirectoryIterator::CURRENT_AS_PATHNAME
的构造函数中使用RecursiveDirectoryIterator
标志,成为一个真正的字符串。
注2 :
您可以使用RegexIterator
过滤迭代器条目,f.ex。:new RegexIterator($recursiveIteratorIterator, '/\.pdf$/')
(在注1 之后)。或者,您也可以使用GlobIterator
来搜索pdf文件。
答案 1 :(得分:1)
正如@pozs指出的那样
注1:你的$ file变量是一个SplFileInfo对象,但你是 使用它总是像一个字符串。
这是一个代码片段,它将文件名作为字符串获取,并具有获取文件扩展名的优化方法:
<?php
$display = array ('pdf');
$directoryIterator = new RecursiveDirectoryIterator('./test/project');
// The key of the iterator is a string with the filename
foreach (new RecursiveIteratorIterator($directoryIterator) as $fileName => $file) {
// Optimized method to get the file extension
$fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
if (in_array(strtolower($fileExtension), $display)) {
if(file_exists($fileName)){
echo "{$fileName}\n";
// Just do what you want with Imagick here
}
}
答案 2 :(得分:0)
也许可以尝试以下方法:PDF to JPG conversion using PHP
$fp_pdf = fopen($pdf, 'rb');
$img = new imagick();
$img->readImageFile($fp_pdf);
从阅读其他帖子看,GhostScript的速度更快?