0
我有两个图像,在白色背景上的大文本。长度有所不同,但文本始终与左侧对齐,因此每幅图像的右侧基本上都有空闲空间。我现在想要将这两个图像合并为一个,并尽可能将它们尽可能紧密地放在一起,而不会使文本“碰撞”。GD图像库合并2图像与“碰撞检测”
我想过以某种方式检查每个像素列的基础,如果有另一种颜色而不是白色(从右侧开始),所以我知道在文本开始后有多少像素。
我有两个图像,在白色背景上的大文本。长度有所不同,但文本始终与左侧对齐,因此每幅图像的右侧基本上都有空闲空间。我现在想要将这两个图像合并为一个,并尽可能将它们尽可能紧密地放在一起,而不会使文本“碰撞”。GD图像库合并2图像与“碰撞检测”
我想过以某种方式检查每个像素列的基础,如果有另一种颜色而不是白色(从右侧开始),所以我知道在文本开始后有多少像素。
找到了解决办法,整齐的功能从图像中去除所有的空白:
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;
}
还有,你试过这么远吗?那么,那么,你的具体编程问题是什么?到目前为止,你只剩下一些要求,所以这听起来更像是一个谷歌请求,而不是一个真正的问题。 – hakre
我试着把文本的长度(以字符,strlen())和应用到我的合并函数,但由于文本扭曲(它为一个验证码)这不工作,有时它们重叠 – Stefan
很明显。你真的没有想到它会解决这个问题,对吧?一个更好的变种是imagettfbox,但它无法击败验证码。您可能想要移除可在此网站上搜索的页面的白色部分。 – hakre