2016-06-15 25 views
4

私たちはPDFページを複数の単一画像に変換しています。 stackoverflowでコードスニペットを見つけてサービスクラスに変換しました。 Imagickがインストールされており、phpinfo()にも表示されます。しかし、私たちのlaravelアプリケーション、バージョン5.2では、私たちは次のエラーに陥っています。Laravel 5.2:Class Imagickが見つかりません

ReflectionException in Container.php line 798: 
Class Imagick does not exist 

私たちのコードはlaravel環境の外部でテストされており、魅力的な働きをしています。そのようなエラーはスローされません。また、Imagick

php -i | grep -i imagick 

を確認するには、次のコマンドを実行し、これが出力

/etc/php5/cli/conf.d/20-imagick.ini, 
    imagick 
    imagick module => enabled 
    imagick module version => 3.4.3RC1 
    imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator 
    Imagick compiled with ImageMagick version => ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org 
    Imagick using ImageMagick library version => ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org 
    imagick.locale_fix => 0 => 0 
    imagick.progress_monitor => 0 => 0 
    imagick.skip_version_check => 0 => 0 

すべてが右のようです。それはLaravelの外では動作しますが、Laravelでは動作しません。私は何が間違っているのか分かりません。 Imagickを使用するにはLaravelを設定する必要がありますか?ここで

は、Linuxであれば、我々は

<?php 

namespace App\Services\Utilities; 

use Imagick; 

class PdfToImageService 
{ 
    /** 
    * Destination folder where images will be saved 
    * @var string 
    */ 
    protected $destination = 'images/users/'; 

    /** 
    * Injecting dependencies 
    * 
    * @param Imagick $imagick 
    */ 
    function __construct(Imagic $imagick) 
    { 
     $this->imagick = $imagick; 
    } 

    /** 
    * Convert pdf having multiple pages to multiple single images 
    * 
    * 1. Strip document extension 
    * 2. Convert this document 
    * 3. Set background color and flatten. It Prevents black background on objects with transparency 
    * 4. Set image resolution 
    * 5. Determine number of pages 
    * 6. Compress Image Quality 
    * 7. Generate images from each pdf page 
    * 8. Destroy current imagick session 
    * 
    * @param string $fileName 
    * @return array $convertedImageNames 
    */ 
    public function createImages($fileName) 
    { 
     $fileName = basename($fileName); 
     $this->imagick->readImage($fileName); 
     $this->imagick->setImageBackgroundColor('white'); 
     $this->imagick->setResolution(300,300); 
     $this->imagick->setImageCompressionQuality(100); 

     $convertedImageNames = $this->generateImageFromPDFPage(
      $fileName, $this->imagick->getNumberImages() 
     ); 

     $this->imagick->destroy(); 

     return $convertedImageNames; 
    } 

    /** 
    * Loop throught each pdf pages and convert it to image. 
    *  A. Set iterator postion 
    *  B. Set image format 
    *  C. Write Images to destination folder 
    * 
    * @param string $fileName 
    * @param integer $noOfPages 
    * @return array 
    */ 
    private function generateImageFromPDFPage($fileName, $noOfPages) 
    { 
     for($i = 0;$i < $noOfPages; $i++) { 
      $this->imagick->setIteratorIndex($i); 
      $this->imagick->setImageFormat('jpeg');  
      $this->imagick->writeImage($this->destination.$fileName.'-'.$i.'.jpg'); 
      $convertedImageNames[$i] = $fileName.'-'.$i.'.jpg'; 
     } 

     return $convertedImageNames; 
    } 
} 
+0

問題は、名前空間であるかもしれないと動作します。 Imagick use文の前に\を追加してみてください。それはLaravelがIOCコンテナの間違ったクラスを解決するかもしれない、それはグローバルな名前空間のクラスを理解していないかもしれない – developernaren

答えて

2

を使用している当社のサービスクラスを使用すると、
CD /etc/php5/apache2/php.ini

にあるphp.iniの編集をしてみてくださいすることができていますubuntu?

cat php.ini | grep extension=imagick.so 

検索の結果がある場合、あなたはこの
を取得する可能性があります;拡張子= imagick.so
あなたはこのセミコロンを削除。 とそうでない場合は任意の結果、

echo "extension=imagick.so" >> /etc/php5/apache2/php.ini 

そして最後に

sudo /etc/init.d/apahce2 restart 

それは、このコード

<?php 

namespace App\Http\Controllers; 
use Illuminate\Routing\Controller as BaseController; 
use Imagick; 

class GuestController extends BaseController { 

    public $imagic; 

    public function __construct(){ 
     $this->imagic = new Imagick(); 
    } 

    public function test(){ 
     return get_class_methods($this->imagic); 
    } 
} 
+0

私たちはすでに/etc/php5/apache2/php.iniにextension = imagick.soを追加して、 。私たちは必要な設定をすべて行いました。私はノートパソコンに問題があると思う。今はうまくいきます。私は前にラップトップを再起動しておくべきだった。とにかくお返事ありがとうございます。 – IamGhale

関連する問題