
Спустя 4 минуты, 54 секунды (6.11.2010 - 20:15) Sanchopansa написал(а):
Спустя 1 час, 2 минуты, 24 секунды (6.11.2010 - 21:18) dr.5y51em написал(а):
Огромное спасибо, статья в избранное, тебя в друзья, репутация в плюс )))
Спустя 32 минуты, 33 секунды (6.11.2010 - 21:50) dr.5y51em написал(а):
Мда, не то... Не учитывается максимальные ширина и высота и работает только с jpg

Спустя 23 минуты, 20 секунд (6.11.2010 - 22:14) Sanchopansa написал(а):
Ну за плюсы спасибо.. но это я тебе привел в качестве примера.. а ты уже покрути с ним

Спустя 2 дня, 7 часов, 15 минут, 42 секунды (9.11.2010 - 05:29) ZSH написал(а):
// Обрезание изображения и соxранение его
//возвращает имя сохраненного изображения
/*
$name имя сохраняемого изображения
$out путь извлечения изображения eewewe/ewew/wewe.iu
$in путь сохранения изображения ewewwwe/eweww/
$del удаление первоисточника TRUE-да FALSE-нет
$width ширина сохраняемого изображения если размер не указан подбирается пропорционально высоте
$height высота сохраняемого изображения если размер не указан подбирается пропорционально ширине
если не указано $width и $height сохраняется в оригинале
$type тип сохраняемого изображения если не указано сохраняется в оригинале
*/
function imgResize($name, $out ,$in ,$del = true, $width = false, $height = false, $type = false )
{
$img = getimagesize($out);
if(!$img)
return false;
$dstx = 0;
$dsty = 0;
$srcx = 0;
$srcy = 0;
/* Если корректировка и по ШИРИНЕ и по ВЫСОТЕ */
if ($width and $height)
{
$width2 = $width;
$height2 = $height;
$so_1 = $img[0]/$img[1];
$so_2 = $width2/$height2;
$raz_1 = $img[0] - $width2;
$raz_2 = $img[1] - $height2;
if ($raz_1 > 0 and $raz_2 > 0 and $so_1 <= $so_2)
{
$height = ceil($width2/$so_1);
$srcx = 0;
$dsty = floor(($height2-$height)/2);
}
if ($raz_1 > 0 and $raz_2 > 0 and $so_1 > $so_2)
{
$width = ceil($so_1 * $height2);
$dstx = floor(($width2-$width)/2);
$srcy = 0;
}
if ($raz_1 < 0 and $raz_2 > 0)
{
$height = $img[1];
$width = $img[0];
$dstx = floor(($width2 - $width)/2);
$dsty = 0;
$srcx = 0;
$srcy = floor(($height-$height2)/2);
}
if ($raz_1 > 0 and $raz_2 < 0)
{
$width = $img[0];
$height = $img[1];
$dstx = 0;
$dsty = floor(($height2-$height)/2);
$srcx = floor(($width-$width2)/2);
$srcy = 0;
}
if ($raz_1 < 0 and $raz_2 < 0)
{
$width = $img[0];
$height = $img[1];
$dstx = floor(($width2-$width)/2); $dsty = floor(($height2-$height)/2);
$srcx = 0;
$srcy = 0;
}
} else
{
/* Если корректировка только по ШИРИНЕ */
if ($width and ! $height)
{
if ($width >= $img[0])
{
$width = $img[0];
$height = $img[1];
} else
{
$height = floor(($width/$img[0]) * $img[1]);
}
$height2 = $height;
$width2 = $width;
}
/* Если корректировка только по ВЫСОТЕ */
if ($height and ! $width)
{
if ($height >= $img[1])
{
$width = $img[0];
$height = $img[1];
} else
{
$width = floor(($height/$size[1]) * $img[0]);
}
$height2 = $height;
$width2 = $width;
}
}
if(!$type)
$type = strtolower(substr($img['mime'], strpos($img['mime'], '/') + 1 ));
elseif($type == 'jpg' || $type == 'JPG')
$type = 'jpeg';
$img_open = 'imagecreatefrom' . $type;
if (!function_exists($img_open))
return false;
$imageout = $img_open($out);
$imagein = imagecreatetruecolor($width2, $height2);
imagefill($imagein, 0, 0, 0xFFFFFF);
imagecopyresampled($imagein, $imageout, $dstx, $dsty, $srcx, $srcy, $width, $height, $img[0], $img[1]);
$img_save = 'image' . $type;
$img_save($imagein, $in . $name . '.' . $type);
imagedestroy($imageout);
imagedestroy($imagein);
if($del)
unlink($out);
return $name . '.' . $type;
}
Спустя 6 часов, 46 минут, 55 секунд (9.11.2010 - 12:16) ИНСИ написал(а):
dr.5y51em вот:
function crop_image($src, $dest, $width, $height, $quality)
{
// $src - сам файл, который надо ресайзить
// $dest - файл, который надо сохранить
// $width - ширина
// $height - высота
// $quality - качество
$quality = (int) $quality;
$size = getimagesize($src);
if ($size === false) return false;
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = 'imagecreatefrom' . $format;
if (!function_exists($icfunc)) return false;
$src_w = intval($size[0]);
$src_h = intval($size[1]);
$set_w = abs(intval($width));
$set_h = abs(intval($height));
$src_x = ceil(($src_w - $set_w) / 2);
$src_y = ceil(($src_y - $set_y) / 2);
if ($src_x<0 || $src_y<0) {
$src_x = $src_y = 0;
}
$out_w = $set_w;
$out_h = $set_h;
if ($src_w<$set_w || $src_h<$set_h) {
$out_w = $set_w = $src_w;
$out_h = $set_h = $src_h;
}
$idest = imagecreatetruecolor($set_w, $set_h);
$isrc = $icfunc($src);
imagecopyresampled(
$idest,
$isrc,
0, 0,
$src_x, $src_y,
$out_w,
$out_h,
$out_w,
$out_h
);
$sfunc = 'image' . $format;
if ($format <> 'gif') {
if ($format == 'png') {
if ($quality>9 || $quality<0) $quality = 7;
}
$sfunc($idest, $dest, $quality);
} else {
$sfunc($idest, $dest);
}
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
Спустя 4 минуты, 23 секунды (9.11.2010 - 12:21) ИНСИ написал(а):
ZSH кажется ты немного усложнил скрипт.
Спустя 7 минут, 21 секунда (9.11.2010 - 12:28) ZSH написал(а):
может быть, с вычислением размеров.
Но при картинке оригинале 400X800 сделать 120Х80, вырезает средину по высоте
Но при картинке оригинале 400X800 сделать 120Х80, вырезает средину по высоте
Спустя 23 минуты, 56 секунд (9.11.2010 - 12:52) ИНСИ написал(а):
Цитата |
Но при картинке оригинале 400X800 сделать 120Х80, вырезает средину по высоте |
а что если фотка больше 2000px по ширине, а мне нужно фото 140x120. Он вырежит по середине маленький кусок моего тела?
В данном случае, я думаю может в начале фото уменьшить до определенных размеров, то есть до 200x180 и потом уже вырезать.
Спустя 19 минут, 10 секунд (9.11.2010 - 13:11) ZSH написал(а):
Он сожмет до нужных размеров.
Но ширина 2000 а высота 4000 то 2000 сожмет до 140, а с 4000 че делать что бы сохранить пропорции?
Но ширина 2000 а высота 4000 то 2000 сожмет до 140, а с 4000 че делать что бы сохранить пропорции?