2016-06-15 2 views
4

우리는 PDF 페이지를 여러 개의 단일 이미지로 변환하고 있습니다. stackoverflow에서 코드 스 니펫을 발견하고이를 서비스 클래스로 변환했습니다. 우리는 Imagick을 설치했으며 phpinfo()에서도이를 보여줍니다. 그러나 우리의 laravel 응용 프로그램 버전 5.2에서는 다음과 같은 오류가 발생합니다.Laravel 5.2 : Class Imagick not found

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

우리는 laravel 환경 밖에서 코드를 테스트했으며 매력적으로 작동합니다. 그러한 오류는 발생하지 않습니다. 우리는 또한

php -i | grep -i imagick 

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을 설정해야합니까? 여기

우리가

<?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 파일을 편집하려고 할 수 사용하는 우리의 서비스 클래스입니다 우분투?

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를 추가하고 Apache 서버를 다시 시작했습니다. . 우리는 필요한 모든 설정을 완료했습니다. 내 노트북에 문제가있는 것 같아. 지금은 괜찮아. 전에 노트북을 다시 시작 했어야 했어. 어쨌든 귀하의 회신에 감사드립니다. – IamGhale