【问题标题】:Detect objects position (right, left) on a image using PHP and Imagick使用 PHP 和 Imagick 检测图像上的对象位置(右、左)
【发布时间】:2019-06-07 12:23:27
【问题描述】:

我在 PHP 和 Imagick (ImageMagick) 中有一些脚本来修剪背景图像、填充纯色和调整大小,但我需要根据图像内容翻转图像。

所有图片都必须在左边有所有内容,然后我需要分析图片并检测大部分内容是在右边还是左边,如果检测到内容在右边,我需要翻转(我有翻转的代码图片)。

例如:

有效图像。大部分图像对象/线条/内容都在左侧。

图片无效。大部分图片对象/线条/内容都在右边,必须翻转。

有什么方法可以检测到这一点?

谢谢!

【问题讨论】:

    标签: php imagemagick imagick


    【解决方案1】:

    我的最终脚本:

    <?php
    /**
     * @param string $image
     * @param string $side
     *
     * @return \Imagick
     */
    function flop(string $image, string $side): Imagick
    {
        $image = new Imagick($image);
    
        $clone = clone($image);
        $clone->resizeImage(200, 200, Imagick::FILTER_CATROM, 1, true);
        $clone->modulateImage(100, 0, 100);
    
        $w = $clone->getImageWidth();
        $h = $clone->getImageHeight();
    
        $wHalf = $w / 2;
        $right = $left = 0;
    
        for ($x = 0; $x < $w; ++$x) {
            for ($y = 0; $y < $h; ++$y) {
                if ($clone->getImagePixelColor($x, $y)->getColorAsString() === 'srgb(255,255,255)') {
                    continue;
                }
    
                if ($x > $wHalf) {
                    ++$right;
                } else {
                    ++$left;
                }
            }
        }
    
        if (($side === 'left') && ($right > $left)) {
            $image->flopImage();
        } elseif (($side === 'right') && ($left > $right)) {
            $image->flopImage();
        }
    
        return $image;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2023-03-15
      • 2020-05-14
      • 2020-04-18
      • 2015-04-11
      • 2017-03-18
      • 2020-02-29
      • 2015-11-30
      • 1970-01-01
      相关资源
      最近更新 更多