Автоматическое обрезание изображения...

12
freezzeerf
На сайте с 15.08.2007
Offline
59
2059

Собственно сабж, кто что может посоветовать на пхп, что бы красиво обрезалось изображение как горизонтальное так и портретное, а главное автоматически и без потери сущности картинки ?

Есть что то такое ?

→ Разрабатываю дизайн сайтов. → Менеджерам отдаю от 30% до 50% в зависимости от объема проекта → Портфолио (http://www.free-lance.ru/users/freezzeerf) ICQ: 385553008
HandMaker
На сайте с 22.05.2007
Offline
83
#1

э... Т.е. с анализом изображения, поиском точки фокуса, порога изменения баланса цвета и т.д.? Без мазы, ИМХО. Или режь руками или по строго заданным параметрам(здесь 5px там 8%).

Или я что-то не понял про "потери сущности картинки"?

335-девятьсот семьдесят-ноль34
freezzeerf
На сайте с 15.08.2007
Offline
59
#2
HandMaker:
"потери сущности картинки"?

вот допустим есть девушка во весь рост, так вот, нужно обрезать так, что бы была видна голова, шея, грудь... но не ноги :)

Руками нет возможности... вернее это не будет никто делать... (тысячи фоток в день)

HandMaker
На сайте с 22.05.2007
Offline
83
#3

ну я решал вопрос немного иначе. Я раскладывал фотки по признакам (вертикальная, размер х*у и т.д.) а потом каждую папку обрабатывал фотожабой (для каждой папки были свои настройки). Не совсем автомат конечно но до 50к фоток в день уделывал.

kimberlit
На сайте с 13.03.2007
Offline
370
#4
freezzeerf:
вот допустим есть девушка во весь рост, так вот, нужно обрезать так, что бы была видна голова, шея, грудь... но не ноги

А php разбирается в анатомии?

topy
На сайте с 28.03.2006
Offline
142
#5
freezzeerf:
вот допустим есть девушка во весь рост, так вот, нужно обрезать так, что бы была видна голова, шея, грудь... но не ноги

PHP это еще не ИИ, и он не видит девушки на фото, для него она лишь набор пикселей

Новости коротко и ясно (https://subnews.ru)
SeoTron
На сайте с 19.11.2006
Offline
54
#6

да и если на то пошло - php не для работы с изображениями, для этого используются вспомогательные модули, которые, тоже совсем не ИИ..

B
На сайте с 22.07.2007
Offline
274
#7
[Удален]
#8

Вот идеальное решение ИМХО, юзаю везде.


function save_thumbnail($img_blob, $save_folder, $file_name, $width, $height, $bg_colour = 0xffffff)
{
$img_buf_gd = imagecreatefromstring($img_blob);
if ( !$img_buf_gd )
return false;

$img_final_gd = imagecreatetruecolor($width, $height);

imagepalettecopy($img_final_gd, $img_buf_gd);

$src_width = imagesx($img_buf_gd);
$src_height = imagesy($img_buf_gd);

$multiplier = min($src_width/$width, $src_height/$height);
if ( $multiplier < 1 )
{
$new_width = $src_width;
$new_height = $src_height;
}
else
{
$new_width = $width * $multiplier;
$new_height = $height * $multiplier;
}
$new_x = ($src_width - $new_width)/2;
$new_y = ($src_height - $new_height)/2;
$new_thumb_x = 0;
$new_thumb_y = 0;
$new_thumb_width = $width;
$new_thumb_height = $height;

if ( $multiplier < 1 )
{
imagefilledrectangle($img_final_gd, 0, 0, $width, $height, $bg_colour);
if ( $src_width/$width < 1 && $src_height/$height < 1 )
{
$new_thumb_width = $new_width;
$new_thumb_height = $new_height;
$new_thumb_x = ($width - $new_width)/2;
$new_thumb_y = ($height - $new_height)/2;

}
else if ( $src_width/$width < 1 )
{
$new_thumb_width = $new_width/($src_height/$height);
$new_thumb_height = $new_height/($src_height/$height);
$new_thumb_x = ($width - $new_width/($src_height/$height))/2;
$new_thumb_y = ($height - $new_height/($src_height/$height))/2;
}
else if ( $src_height/$height < 1 )
{
$new_thumb_width = $new_width/($src_width/$width);
$new_thumb_height = $new_height/($src_width/$width);
$new_thumb_x = ($width - $new_width/($src_width/$width))/2;
$new_thumb_y = ($height - $new_height/($src_width/$width))/2;
}
}

imagecopyresampled($img_final_gd, $img_buf_gd, (int)$new_thumb_x, (int)$new_thumb_y, (int)$new_x, (int)$new_y, (int)$new_thumb_width, (int)$new_thumb_height, (int)$new_width, (int)$new_height);

imagedestroy($img_buf_gd);

if ( strncmp($img_blob,"яШя",3) == 0 )
{
$ret = imagejpeg($img_final_gd, $save_folder.$file_name.'.jpg');
imagedestroy($img_final_gd);
unset($img_blob);
if ( $ret )
return $save_folder.$file_name.'.jpg';
else
return false;
}
else if ( strncmp($img_blob,"GIF",3) == 0 )
{
$ret = imagegif($img_final_gd, $save_folder.$file_name.'.gif');
imagedestroy($img_final_gd);
unset($img_blob);
if ( $ret )
return $save_folder.$file_name.'.gif';
else
return false;
}
else if ( strncmp($img_blob,"‰PNG",4) == 0 )
{
$ret = imagepng($img_final_gd, $save_folder.$file_name.'.png');
imagedestroy($img_final_gd);
unset($img_blob);
if ( $ret )
return $save_folder.$file_name.'.png';
else
return false;
}
return false;
}
[Удален]
#9

Я вот этой пользуюсь, но ноги она не обрезает.


function img_resize($src, $dest, $width, $height, $rgb=0xEADB00, $quality=100)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;

$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];

$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);

$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);

imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}
[Удален]
#10

Код с автофорусом вы врядли достанете, это будет очень ресурсоёмко да и в свободный доступ такой высокоинтеллектуальный код врядли кто выложит.

А вот для обрезания изображения с указанными отступами - используйте библиотеку GD, копируйте нужный участок изображения и сохраняйте в файл.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий