Определить положение объектов (справа, слева) на изображении с помощью PHP и Imagick - PullRequest
0 голосов
/ 07 июня 2019

У меня есть несколько скриптов на PHP и Imagick (ImageMagick) для обрезки фонового изображения, заливки сплошным цветом и изменения размера, но мне нужно перевернуть изображения в зависимости от содержимого изображения.

Все изображения должны иметь все содержимоеслева, тогда мне нужно проанализировать изображение и определить, находится ли большая часть содержимого справа или слева, и если содержимое обнаружено справа, мне нужно перевернуть (у меня есть код, чтобы перевернуть изображение).

Например:

Действительное изображение.Большая часть объектов изображения / строк / содержимого находится слева.

Valid Image

Неверное изображение.Большая часть объектов / строк / содержимого изображения находится справа, их необходимо перевернуть.

enter image description here

Есть ли способ обнаружить это?

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2019

Мой последний сценарий:

<?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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...