将PDF转换为没有透明背景的PNG

Convert PDF to PNG without transparent background

我使用以下代码将 PDF 转换为 PNG。如您所见,我使用代码 setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE ) 删除了背景透明度。但实际上它只适用于最后一页。你觉得代码有问题吗?你有更好的速度更快的解决方案吗?

$PDF = 'test.pdf';
$img = new imagick();
$img->readImage($PDF.'[0-9]'); //Convert 10 pages
$img->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE );
$pages = count($img);
$img->writeImages('./images/'.'pdf.png', true);

这看起来像是一个迭代器问题。你可以尝试像这样循环:

<?php

$PDF = 'test.pdf';
$img = new Imagick();
$img->readImage($PDF. '[0-9]');  //Convert 10 pages

$lastIndex = $img->getIteratorIndex();
$img->resetIterator();

for($i = $img->getIteratorIndex(); $i <= $lastIndex; $i++) {
    $img->setIteratorIndex($i);
    $img->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
}

$pages = count($img); // not sure why you need this
$img->writeImages('./images/'.'pdf.png', true);

如果您更喜欢它,您还可以将迭代部分简化为一个简单的循环,因为 Imagick class 实现了 Iterator:

foreach($img as $i)
{
    $img->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
}