PHP库对象错误

时间:2013-04-18 18:45:48

标签: php imagick

我遇到了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'),,则错误消失了。

我不知道为什么会这样。有人可以给我一个暗示这个问题吗?非常感谢

3 个答案:

答案 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的速度更快?