【问题标题】:How do I translate this ImageMagick command into its PHP Imagick equivalent?如何将此 ImageMagick 命令翻译成它的 PHP Imagick 等效命令?
【发布时间】:2012-07-14 02:55:01
【问题描述】:

我正在尝试遵循 ImageMagick 文档中的 this“教程”,但遇到了很多麻烦。我想在其 Imagick PHP 等效项中完成以下 ImageMagic 命令:

convert -virtual-pixel transparent \
                        \( $top -matte  +distort Affine \
                            '0.5,511.5 0.5,0.5   0.5,0.5 -87.5,-50  511.5,511.5 87.5,-50' \) \
                        \( $left -matte +distort Affine \
                            '511.5,0.5 0.5,0.5   0.5,0.5 -87.5,-50  511.5,511.5 0.5,99.5' \) \
                        \( $front -matte  +distort Affine \
                            '0.5,0.5 0.5,0.5   0.5,319.5 0.5,99.5   319.5,0.5 87.5,-50.0' \) \
                        -background black -layers merge +repage \
                        -bordercolor black -border 5x2     isometric_cube_overlap.png

其中$top = new Imagick('top.png'); $front = new Imagick('front.png'); $left = new Imagick('left.png');。这些都是 512x512px png 图像。

我在仿射变换中找到了一些rather lacking documentation,但我不知道$matrix 应该是什么,甚至不知道如何使用该功能。我什至尝试在实际的 ImageMagick 命令上运行exec,但什么也没发生。我期待转换已经完成并保存为isometric_cube_overlap.png

我真的可以在这里使用一些帮助,即使有人可以指出我正确的方向。谢谢!

【问题讨论】:

    标签: php imagemagick imagick


    【解决方案1】:

    你确定可以直接运行命令吗?

    <?php 
        $cmd = " convert -virtual-pixel transparent \
                        \( $top -matte  +distort Affine \
                            '0.5,511.5 0.5,0.5   0.5,0.5 -87.5,-50  511.5,511.5 87.5,-50' \) \
                        \( $left -matte +distort Affine \
                            '511.5,0.5 0.5,0.5   0.5,0.5 -87.5,-50  511.5,511.5 0.5,99.5' \) \
                        \( $front -matte  +distort Affine \
                            '0.5,0.5 0.5,0.5   0.5,319.5 0.5,99.5   319.5,0.5 87.5,-50.0' \) \
                        -background black -layers merge +repage \
                        -bordercolor black -border 5x2     isometric_cube_overlap.png "." -distort ScaleRotateTranslate \"28,24  .4,.8  -110  50,120 \" ";
        exec("$cmd");
    ?> 
    

    反斜杠在我看来也不正确。 我敢打赌该命令的输出也会失败?

    【讨论】:

    • 你的命令将会失败,就目前而言,hsmoore.com。因为它扩展为 double convert convert ...。哦,是的:在圆括号前面肯定需要反斜杠,否则 shell 会尝试打开子 shell...