Php 将多页pdf转换为jpg图像的最快方法

Php 将多页pdf转换为jpg图像的最快方法,php,ghostscript,imagick,Php,Ghostscript,Imagick,我正试图找到一种最快的方法,将多个pdf格式的图像转换为jpeg格式的图像,而不会造成质量损失。我有以下代码: $this->imagick = new \Imagick(); $this->imagick->setresolution(300,300); $this->imagick->readimage($this->uploadPath . '/original/test.pdf'); $num_pages = $this

我正试图找到一种最快的方法,将多个pdf格式的图像转换为jpeg格式的图像,而不会造成质量损失。我有以下代码:

    $this->imagick = new \Imagick();
    $this->imagick->setresolution(300,300);
    $this->imagick->readimage($this->uploadPath . '/original/test.pdf');
    $num_pages = $this->imagick->getNumberImages();

    for($i = 0;$i < $num_pages; $i++) {

        $this->imagick->setIteratorIndex($i);
        $this->imagick->setImageFormat('jpeg');
        $this->imagick->readimage($asset);

        // i need the width, height and filename of each image to add
        // to the DB
        $origWidth = $this->imagick->getImageWidth();
        $origHeight = $this->imagick->getImageHeight();
        $filename = $this->imagick->getImageFilename();


        $this->imagick->writeImage($this->uploadPath . '/large/preview-' . $this->imagick->getIteratorIndex() . '.jpg');

        $this->imagick->scaleImage($origWidth / 2, $origHeight / 2);
        $this->imagick->writeImage($this->uploadPath . '/normal/preview-' . $this->imagick->getIteratorIndex() . '.jpg');

        //add asset to the DB with the given width, height and filename ...
     }
$this->imagick=new\imagick();
$this->imagick->setresolution(300300);
$this->imagick->readimage($this->uploadPath.'/original/test.pdf');
$num_pages=$this->imagick->getNumberImages();
对于($i=0;$i<$num_页;$i++){
$this->imagick->setIteratorIndex($i);
$this->imagick->setImageFormat('jpeg');
$this->imagick->readimage($asset);
//我需要的宽度,高度和每个图像的文件名添加
//到DB
$origWidth=$this->imagick->getImageWidth();
$origHeight=$this->imagick->getImageHeight();
$filename=$this->imagick->getImageFilename();
$this->imagick->writeImage($this->uploadPath./large/preview-'.$this->imagick->getIteratorIndex()..jpg');
$this->imagick->scaleImage($origWidth/2,$origHeight/2);
$this->imagick->writeImage($this->uploadPath./normal/preview-'.$this->imagick->getIteratorIndex()..jpg');
//使用给定的宽度、高度和文件名将资源添加到数据库。。。
}

这是非常缓慢的,部分原因是分辨率太大,但我不添加它,图像上的文本质量非常差。另外,我先保存图像,然后再保存文件的较小版本,这一事实可能不是很优化

那么有没有人有更好的方法来做这件事呢?也许只有鬼脚本


最低要求是我需要2个版本的转换图像。一个真实尺寸的版本和一个半尺寸的版本。我需要宽度、高度和文件名来添加到数据库中。

您可以使用Ghostscript,如果您设置“-sDEVICE=jpeg-sOutputFile=out%d.jpg”,则每个页面都将写入一个单独的文件

请注意,由于JPEG是一种有损压缩方法,因此实际上不可能“无质量损失”地将PDF渲染为JPEG。您是否考虑过使用无损格式,例如PNG或TIFF


要以不同的大小获得相同的图像,需要以不同的分辨率渲染文件两次,可以在Ghostscript中使用“-r”设置分辨率。宽度和高度可以很容易地从图像文件中读取,或者您可以使用pdf_info.ps获取每个页面的大小。请注意,一个PDF文件可以包含多个不同大小的页面,我希望您不要期望它们都是相同的……

Image Magick实际上使用Ghostscript来渲染PDF,因此直接转到Ghostscript应该会得到相同的输出,但可能会更快。是的,使用PNG有很多。我不使用PNG作为输出的原因是转换为PNG的速度似乎很慢。据我所知,PNG驱动程序的性能应该与JPEG驱动程序相当,但我没有测试过。“图像上的文本质量很差。”-请检查我的回答