Php Imagick: PDF конвертируются в JPG с очень плохим качеством - PullRequest
0 голосов
/ 07 мая 2018

Я использую расширение Imagick в моем проекте. Это ново для меня.

Ниже приведен мой код.

                $pdfPath = $config['upload_path'] . '/' . $fileName;
                $im = new imagick();
                $im->setResolution(300, 300);
                $im->readImage($pdfPath);
                $im->setImageFormat('jpeg');
                $im->setImageCompression(imagick::COMPRESSION_JPEG); 
                $im->setImageCompressionQuality(100);
                $im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
                $im->clear();
                $im->destroy();

Это дает мне очень плохое качество изображения. Весь текст конвертируется в черный фон. Изображения также не отображаются должным образом. Смотрите ниже изображение, которое конвертируется из PDF. enter image description here Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Я думаю, что проблема заключается в том, что мы вводим разрешение точек на дюйм из PDF-файла и выводим его в виде пикселей на дюйм при создании jpeg.

Этот код работает так, как кажется, для сохранения правильного соотношения сторон, и я могу разобрать pdf, который я использовал для тестирования. Но это не совсем понятно, я не могу читать текст. Вот что я использовал.

    $pdfPath = $config['upload_path'] . '/' . $fileName;
    $img = new imagick();
    $img->setResolution(300, 300);
    $img->readImage($pdfPath);  //Open after yuo set resolution.
    $img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); //Declare the units for resolution.
    $img->setImageFormat('jpeg');
    $img->setImageCompression(imagick::COMPRESSION_JPEG);
    $img->setImageCompressionQuality(100);
    $img->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
    $img->clear();
    $img->destroy();

Из того, что я прочитал, вам может потребоваться установить Ghostscript на свой компьютер, и выполнение сценария из командной строки представляется предпочтительным и обеспечивает лучшие результаты и производительность.

Я нашел эту статью, и похоже, что она загружена кучей информации для форматов изображений и того, как imagemagik обрабатывает их. Там есть немного на PDFs.

http://www.imagemagick.org/Usage/formats/#tiff

Я мог бы заглянуть в библиотеку PHP PDF, в которой уже есть все встроенное. Нет смысла изобретать велосипед. Возможно, уже встроена функция, позволяющая сделать именно то, что вы пытаетесь сделать.

0 голосов
/ 07 мая 2018

Вам нужно поставить опции для цвета фона изображения установить белый. Здесь я добавил опции $ im -> -> flattenImages (); Здесь вы можете узнать решения https://www.binarytides.com/convert-pdf-image-imagemagick-php/

С

$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

TO

$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
// -flatten option, this is necessary for images with transparency, it will produce white background for transparent regions
$im = $im->flattenImages();
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

Я не уверен, что это поможет вам или нет.

...