PHP library object error

旧巷老猫 提交于 2019-12-11 02:06:31

问题


I am having an issue with imagick php library.

I am doing a recursive search in my file system and look for any pdf files.

    $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);
            }
        }
    }

However, I am getting an error saying

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");

However, if I replace my $im = new Imagick($file) with $im = new Imagick('/test/project/test1.pdf'), the error is gone.

I don't know why this is happening. Can someone give me a hint for this issue? Thanks so much


回答1:


As @pozs pointed out

Note 1: Your $file variable is an object SplFileInfo, but you are using it always like a string.

Here's a code snippet which gets you the filename as string and has an optimized method to get the file extension:

<?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:


According to this, the .jpg files' format is JPEG.

Note 1:

Your $file variable is an object SplFileInfo, but you are using it always like a string. Use RecursiveDirectoryIterator::CURRENT_AS_PATHNAME flag in RecursiveDirectoryIterator's constructor, to be a real string.

Note 2:

You can filter the iterator entries with RegexIterator, f.ex.: new RegexIterator($recursiveIteratorIterator, '/\.pdf$/') (after Note 1). Or, you can use GlobIterator too for searching only pdf files.




回答3:


Maybe try this approach from : PDF to JPG conversion using PHP

$fp_pdf = fopen($pdf, 'rb');

$img = new imagick();
$img->readImageFile($fp_pdf);

It also seems from reading other posts that GhostScript is faster?



来源:https://stackoverflow.com/questions/16090794/php-library-object-error

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!