【问题标题】:Convert PDF to PNG without transparent background在没有透明背景的情况下将 PDF 转换为 PNG
【发布时间】:2022-01-18 06:41:30
【问题描述】:

我使用以下代码将 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);

【问题讨论】:

  • 你在阅读和写作之间尝试过$img = $img->flattenImages();吗? php.net/manual/en/imagick.readimage.php
  • 是的。 flattenImages(); 的问题在于它将所有页面组合在一起!
  • 如果不想将所有页面放在一起,请将 writeImages 的第二个参数更改为 false。
  • 我之前改过。只有第一页被转换。代码声明我希望转换指定的页面。

标签: php imagick


【解决方案1】:

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

<?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 类实现了迭代器:

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

【讨论】:

  • 我认为把它放在 for 循环中会减慢它的速度。但没有观察到明显的变化。 @KevinY 非常感谢。
猜你喜欢
  • 2012-06-26
  • 2015-02-16
  • 2013-09-29
  • 2023-03-24
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
相关资源
最近更新 更多