为什么Imagick转动开关backgroundcolor?

时间:2016-04-08 08:37:44

标签: php imagick

我试图将pdf转换为jpeg,修剪内容周围的空白并将其调整为300x600 在PHP中使用ImageMagick 6.7.7-10

这是我的代码:

$im = new \Imagick();
$im->setBackgroundColor("white");
$im->readimage($url);
$im->setImageFormat("jpeg");
$im->trimImage(0);
$im->resizeImage(300, 600, Imagick::FILTER_LANCZOS, 0.9);
$im->writeImage($tmpFilePath);
$im->clear();
$im->destroy();

这是PDF
http://cs1.fuman.de/file.php/1AOrL6-PzT71Z-dk0000-CsjquC 这里是由此产生的JPG http://cs1.fuman.de/file.php/1AOrL0-kWAl8P-ml0000-xAhOiw

有谁知道,这里出了什么问题?

提前致谢 JD

1 个答案:

答案 0 :(得分:0)

我不知道为什么会忽略背景颜色。我认为这与JPEG不具有“背景”颜色的概念有关,因此当图像从具有alpha转换为不具有alpha时,会发生不好的事情。

我建议使用此代码:

$imagick = new \Imagick();

// Make the image be large when read from PDF so have decent quality later
$imagick->setResolution(92, 92);

// only use the first page of the PDF
$imagick->readimage("./orig.pdf[0]");

// Make a white background imge
$canvas = new Imagick();
$canvas->newPseudoImage(
    $imagick->getImageWidth(),
    $imagick->getImageHeight(),
    'canvas:white'
);

// Need to use png format to keep alpha channge
$imagick->setImageFormat('png');

// Composite our image, into the white background
$canvas->compositeImage($imagick, \Imagick::COMPOSITE_ATOP, 0, 0);
$canvas->resizeImage(300, 600, Imagick::FILTER_LANCZOS, 1);
$canvas->setImageFormat('png');
$canvas->writeImage("output.png");