[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как обрезать изображение до определенного цвета
DisWEB
Мне необходимо на черном фоне я наношу текст белым и потом обрезать изображение со всех сторон до белого цвета пикселей, чтоб все обрезало кроме белых пикселей.
Или еще лучше на прозрачное изображение наношу белый текст и потом все лишнее как обрезать?
DisWEB
Я добился того, что мне было необходимо, мне было необходимо знать сколько текст займет по x и y.

Вот я как реализовал:
function colordist($color1, $color2){
return sqrt(pow((($color1 >> 16) & 0xFF) - (($color2 >> 16) & 0xFF), 2) + pow((($color1 >> 8) & 0xFF) - (($color2 >> 8) & 0xFF), 2) + pow(($color1 & 0xFF) - ($color2 & 0xFF), 2));
}

function dwTextXY($image, $bg_color, $width, $height){
$top_border = 0;
while ($top_border < ($height - 1)){
$count = 0;
for($i=0;$i<$width;$i++){
if (colordist(imagecolorat($image, $i, $top_border), $bg_color) > 10){
$count++;
}
}

if ($count > 0){
break;
}else{
$top_border++;
}
}


$bottom_border = ($height - 1);
while ($bottom_border > 0){
$count = 0;
for($i=0;$i<$width;$i++){
if (colordist(imagecolorat($image, $i, $bottom_border), $bg_color) > 10){
$count++;
}
}

if ($count > 0){
break;
}else{
$bottom_border--;
}
}


$left_border = 0;
while ($left_border < ($width - 1)){
$count = 0;
for($i=0;$i<$height;$i++){
if (colordist(imagecolorat($image, $left_border, $i), $bg_color) > 10){
$count++;
}
}

if ($count > 0){
break;
}else{
$left_border++;
}
}


$right_border = ($width - 1);
while ($right_border > 0){
$count = 0;
for($i=0;$i<$height;$i++){
if (colordist(imagecolorat($image, $right_border, $i), $bg_color) > 10){
$count++;
}
}

if ($count > 0){
break;
}else{
$right_border--;
}
}


$new_width = $right_border - $left_border + 1;
$new_height = $bottom_border - $top_border + 1;
return array($new_width, $new_height);
}


А вот из каких условий эту функцию вызывал:
$text_to_but = "ПРоп оПор пОРПОПро пор";
$imgT = @imagecreatetruecolor(500, 50) or die("Невозможно создать поток изображения");
$colorBgT = imageColorAllocate($imgT, 0, 0, 0);
imagefill($imgT, 0, 0, $colorBgT);
$colorTextT = imageColorAllocate($imgT, 255, 255, 255);
imageTTFText($imgT, 12, 0, 10, 10, $colorTextT, "arial.ttf", iconv("windows-1251", "utf-8", $text_to_but));
$text_xy = dwTextXY($imgT, 0, 500, 50);
imagedestroy($imgT);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.