【问题标题】: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;
}