GD Image Library使用“碰撞检测”合并2个图像

时间:2013-01-08 21:00:11

标签: php image image-processing gd

我有两张图片,白色背景上的大文字。长度会有所不同,但文本始终与左侧对齐,因此每张图像的右侧基本上都有自由空间。我现在想要将这两个图像合并为一个并尽可能紧密地将它们移动到一起,而不会使文本“碰撞”。

如果有另一种颜色而不是白色(从右侧开始),我想到以某种方式检查每个像素的列基数,所以我知道文本开始的像素数。

1 个答案:

答案 0 :(得分:0)

找到解决方案,整洁的功能从图像中去除所有空白:

function stripWhitespace($img) {
        //find the size of the borders
$b_top = 0;
$b_btm = 0;
$b_lft = 0;
$b_rt = 0;

//top
for(; $b_top < imagesy($img); ++$b_top) {
  for($x = 0; $x < imagesx($img); ++$x) {
    if(imagecolorat($img, $x, $b_top) != 0xFFFFFF) {
       break 2; //out of the 'top' loop
    }
  }
}

//bottom
for(; $b_btm < imagesy($img); ++$b_btm) {
  for($x = 0; $x < imagesx($img); ++$x) {
    if(imagecolorat($img, $x, imagesy($img) - $b_btm-1) != 0xFFFFFF) {
       break 2; //out of the 'bottom' loop
    }
  }
}

//left
for(; $b_lft < imagesx($img); ++$b_lft) {
  for($y = 0; $y < imagesy($img); ++$y) {
    if(imagecolorat($img, $b_lft, $y) != 0xFFFFFF) {
       break 2; //out of the 'left' loop
    }
  }
}

//right
for(; $b_rt < imagesx($img); ++$b_rt) {
  for($y = 0; $y < imagesy($img); ++$y) {
    if(imagecolorat($img, imagesx($img) - $b_rt-1, $y) != 0xFFFFFF) {
       break 2; //out of the 'right' loop
    }
  }
}

//copy the contents, excluding the border
$newimg = imagecreatetruecolor(
    imagesx($img)-($b_lft+$b_rt), imagesy($img)-($b_top+$b_btm));

imagecopy($newimg, $img, 0, 0, $b_lft, $b_top, imagesx($newimg), imagesy($newimg));
return $newimg;
    }

从这里开始:Crop whitespace from image in PHP