Wir konvertieren PDF-Seiten in mehrere Einzelbilder. Wir haben ein Code-Snippet in Stackoverflow gefunden und in eine Serviceklasse konvertiert. Wir haben Imagick installiert und es zeigt sich auch in phpinfo(). In unserer Laravel-Anwendung, Version 5.2, erhalten wir jedoch folgenden Fehler.Laravel 5.2: Class Imagick nicht gefunden
Wir testeten unseren Code außerhalb Laravel Umgebung und es funktioniert wie ein Charme. Ein solcher Fehler wird nicht ausgelöst. Wir liefen auch folgenden Befehl Imagick
php -i | grep -i imagick
und dies ist der Ausgang
/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
Alles scheint richtig zu überprüfen. Es funktioniert außerhalb von Laravel, aber nicht in Laravel. Ich habe keine Ahnung, was los ist. Müssen wir Laravel für Imagick konfigurieren?
Hier ist unsere Service-Klasse, die wir
<?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;
}
}
Das Problem Namensraum sein könnte. Versuchen Sie, \ vor Imagick use statement hinzuzufügen. Es könnte sein, dass Laravel eine falsche Klasse in einem IOC-Container auflöst, es könnte die Klasse im globalen Namespace nicht verstehen. – developernaren