【问题标题】:PHP convert psd to jpg, selecting image layersPHP将psd转换为jpg,选择图像层
【发布时间】:2014-06-09 14:47:55
【问题描述】:

我希望能够选择将 .PSD 图像中的哪些图层合并到最终的 .JPG 输出图像中。

我可以合并图像中的所有图层:

$im = new Imagick('test.psd');
$im->flattenImages();
$im->setImageFormat('jpg');
$im->writeImage('test.jpg');

但是 .psd 包含大约 10 层,我希望能够指定哪些特定层应该合并在一起,以生成最终图像。

例如,我只想合并层号 3、5 和 10 或名称为“RED”、“GREEN”、“BLUE”的层

【问题讨论】:

  • 然后呢?丢弃其他层?我认为您不能在 JPEG 中拥有多个图层。
  • @mark: 因此“flattenImages”调用...
  • 我想我误解了他当时在问什么。如果你将三个图层合并在一起然后展平,它会将所有图层与在 flatten 调用中已经合并的三个图层合并,那么为什么只合并三个图层呢?
  • btw flattenImages 返回它没有到位的展平图像,例如"$merged = @$imagick->flattenimages();"

标签: php image layer imagick psd


【解决方案1】:

虽然 hsz 的回答是正确的,并且是图像非常大时的最佳方式,但它确实需要您提前知道要合并哪些层。

您可以通过使用setIteratorIndex 访问各个图层并将它们添加到输出图像中,以更编程的方式执行相同的操作。

    $imagick = new \Imagick(realpath("../images/LayerTest.psd"));

    $output = new \Imagick();
    $imagick->setIteratorIndex(1);
    $output->addImage($imagick->getimage());

    $imagick->setIteratorIndex(2);
    $output->addImage($imagick->getimage());

    $merged = @$output->flattenimages();
    $merged->setImageFormat('jpg');
    $merged->writeImage('test.jpg');

【讨论】:

  • 如何获取层名?
  • @santyas fyi,在给出答案五年后的评论中提出不同的问题通常不会得到回应。 i) 我不知道 ii) 你应该把它作为一个单独的问题来问。
【解决方案2】:

你可以使用第三层

test.psd[3]

试试看:

$im = new Imagick(array('test.psd[3]', 'test.psd[5]', 'test.psd[10]'));

【讨论】:

  • 正确的语法似乎更像realpath("test.psd")."[2]" 将正确的路径传递给Imagick。但是,我似乎根本无法使图像变平。
  • 嗯,如果你以正确的顺序获得图层,则展平工作:-P
  • 这就是为什么我很困惑,我无法理解这里的上下文,因为问题不够清晰。
  • 如何获取图层名称? @hsz
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 2021-08-22
  • 1970-01-01
  • 2012-11-16
  • 2018-04-03
  • 2012-09-13
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多