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