우리는 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;
}
}
문제는 네임 스페이스 수 있습니다 작동합니다. Imagick use 문 앞에 \를 추가하십시오. Laravel이 IOC 컨테이너에서 잘못된 클래스를 해결할 수도 있습니다. 글로벌 네임 스페이스의 클래스를 이해하지 못할 수도 있습니다. – developernaren