ImageMagick将PDF转换为低分辨率JPG文件

4

我一直在尝试使用CodeIgniter中的ImageMagick将PDF转换为JPG图像,但是产生的图像质量低,并且总是出现黑色背景的问题(而PDF则没有)。

我使用的代码如下:

public function converter($pdf){
    $this->load->library('image_lib');

    $config = array(
        'image_library' => 'imagemagick',
        'library_path' => '/usr/bin/convert',
        'source_image' => "./pdf/".$pdf,
        'new_image' => "./images/a.jpg",
        'maintain_ratio' => true,
        'width' => 980,
        'quality' => '90%',
       );

       $this->image_lib->initialize( $config );

       if ( $this->image_lib->resize( ) ) {
        $this->image_lib->clear( );
       }
}

有人知道这里似乎出了什么问题吗?关于IT技术的内容。

你有没有看过“-transparent-color”来指定白色作为透明颜色的例子?根据文档,ImageMagick的默认透明颜色是黑色。 - David van Driessche
你看过这个关于文本质量问题的内容了吗?https://dev59.com/e2Uo5IYBdhLWcg3wxB7T - David van Driessche
3个回答

4

你需要两样CodeIgniter可能不支持的东西,因此你必须直接使用ImageMagick。

首先,你必须设置PDF的分辨率以获得高质量的结果。在ImageMagick命令行上,可以使用-density选项来完成这个任务。对于PHP imagick,使用setResolution

为了消除黑色背景,你必须首先将PDF放置在白色背景上。在命令行上,使用选项-background white -flatten。使用PHP imagick时,setImageBackgroundColorflattenImages应该能够解决问题。


还要注意,-density选项必须在文件名之前。因此,convert -density 200 input.pdf output.jpg - Supernormal

2

在代码中,我使用了90%的质量,几乎是完美的,PDF上的图像看起来非常好,但文本看起来完全无法阅读。 - Khaled
1
实际上这是不正确的,wm_x_transp 是用于 水印 而不是图片。 - Jakub

1

我遇到了类似的问题,我通过调用GhostScript创建一个png文件来解决了这个问题(创建的jpg质量不够高):

"gswin64c -r150 -dNOPAUSE -dBATCH -sDEVICE#pngalpha -sOutputFile=" + strTitle + "-%%02d.png " + strTitle + ".pdf"

然后将jpg文件转换为png文件(使用ImageMagick):
mogrify -format jpg *.png

这比convert好得多,谢谢! :-) - CeDeROM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接