[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ищу функцию\скрипт\класс для изменения размера
dr.5y51em
Ищу функцию\скрипт\класс которые бы принимали любой графический файл (*.png, *.jpg, *.gif, *.bmp) и делали пропорциональный ресайз учитывая максимально возможную высоту и ширину и выводили результат, не изменяя файл источник и не сохраняя во временную папку. wub.gif



Спустя 4 минуты, 54 секунды (6.11.2010 - 20:15) Sanchopansa написал(а):
http://www.codenet.ru/webmast/php/Image-Resize-GD/

Пользуйся наздоровье!

Спустя 1 час, 2 минуты, 24 секунды (6.11.2010 - 21:18) dr.5y51em написал(а):
Огромное спасибо, статья в избранное, тебя в друзья, репутация в плюс )))

Спустя 32 минуты, 33 секунды (6.11.2010 - 21:50) dr.5y51em написал(а):
Мда, не то... Не учитывается максимальные ширина и высота и работает только с jpg sad.gif

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

Спустя 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, вырезает средину по высоте

Спустя 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 че делать что бы сохранить пропорции?
Быстрый ответ:

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