es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP Imagick proporciona blanco y negro para algunos archivos PDF y colores para otros archivos PDF.

Es aleatorio o creo que es un archivo PDF con un tamaño superior a 1mb. A veces produce la imagen en miniatura en color y otras veces en blanco y negro.

Aquí está mi código:

public function convertPdfToImage($_pdf) {

Si se prepara el directorio para el archivo con file_prepare_directory, pruebe lo siguiente:

try {
  $date = new \DateTime();
  $thumbFileName = $date->getTimestamp() . '.png';
  $imagick = new Imagick();
  $imagick->setResolution(50,50);
  $imagick->readImage($_pdf);
  $imagick->setIteratorIndex(0);
  $imagick->setImageFormat('png');
  $thumbFile = \Drupal::service('file_system')->realpath($this->thumbnailDirectory . '/' . $thumbFileName);
  if($imagick->writeImage($thumbFile)) {
    return $this->thumbnailDirectory . '/' . $thumbFileName;
  }else{
    \Drupal::logger('dtm_misc')->error('Error Saving PDF Thumbnail');
  }
}catch (\Exception $e) {
    $imagick->destroy();
  \Drupal::logger('dtm_misc')->error('PDF To Image Exception: ' . $e->getMessage());
}

Cualquier ayuda será muy apreciada.. gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con la miniatura que se muestra en blanco y negro o en color podría ser debido a la configuración de la biblioteca ImageMagick que se está utilizando en el código. Una posible solución es agregar la siguiente línea de código antes de leer el archivo PDF:

    $imagick->setImageColorSpace(255);

    Esto debería forzar que la salida de la imagen esté en el espacio de color RGB, lo que podría resolver el problema de que la miniatura se muestre en blanco y negro.

    Además, puede valer la pena revisar la configuración de calidad para la salida de la miniatura, ya que esto también podría afectar la salida de color. La siguiente línea de código se podría agregar para ajustar la calidad:

    $imagick->setImageCompressionQuality(100);

    Al establecer la calidad en 100, la imagen en miniatura debería ser mostrada con la máxima calidad posible.

    En general, se recomienda experimentar con estas configuraciones para lograr la salida de la miniatura deseada.

Comments are closed.