我有图像,所有图像都包含一个3px红色(#ff0000)边框的正方形。图像具有不同的尺寸,图像中的正方形尺寸也是可变的。
是否可以使用PHP GD裁剪红色边框内的部分?我意识到这需要两个步骤:首先找到红色边框,然后再进行裁剪。裁剪部分很简单,所以我的问题归结为:如何识别3px红色方框边框?
答案 0 :(得分:0)
这是我找到找到边界的解决方案。它可能不是最佳的,但足以满足我想要实现的目标。
<?php
$im = imagecreatefrompng("image.png");
$size = getimagesize("image.png");
$width = $size[0];
$height = $size[1];
function find_border($direction, $first_last, $width, $height, $im)
{
if($direction == 'v')
{
$attempts = array(round($width/10*5), round($width/10*4), round($width/10*6), round($width/10*3), round($width/10*7), round($width/10*2), round($width/10*8), round($width/10*1), round($width/10*9));
$limit = $height;
}
else
{
$attempts = array(round($height/10*5), round($height/10*4), round($height/10*6), round($height/10*3), round($height/10*7), round($height/10*2), round($height/10*8), round($height/10*1), round($height/10*9));
$limit = $width;
}
foreach($attempts AS $attempt)
{
if($first_last == 'f')
{
for($i=1;$i<$limit;$i++)
{
if($direction == 'h')
{
if(imagecolorat($im, $i-1, $attempt)==16711680) return $i;
}
else
{
if(imagecolorat($im, $attempt, $i-1)==16711680) return $i;
}
}
}
elseif($first_last == 'l')
{
for($i=$limit-1;$i>0;$i=$i-1)
{
if($direction == 'h')
{
if(imagecolorat($im, $i-1, $attempt)==16711680) return $i;
}
else
{
if(imagecolorat($im, $attempt, $i-1)==16711680) return $i;
}
}
}
}
}
echo find_border('v', 'f', $width, $height, $im)."<hr>";
echo find_border('v', 'l', $width, $height, $im)."<hr>";
echo find_border('h', 'f', $width, $height, $im)."<hr>";
echo find_border('h', 'l', $width, $height, $im)."<hr>";