| |
|
|
| | Как она работает?
С помощью этой функции вписывается уменьшенная копия изображения (посередине). Левую сторону закрасить удается, а вот правая сторона закрашивается только черным цветом - зачем? Можно ли изменить цвет заливки? | |
| |
|
|
| |
|
|
| |
для: Fix
(07.12.2006 в 15:41)
| | | Выложите код! | |
| |
|
|
| |
 92.4 Кб |
|
| |
для: Fli
(07.12.2006 в 16:11)
| | |
<?php
function resizeimg($filename, $w, $h)
{
// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);
// зальём его белым цветом
imagefill($dest_img, 0, 0, 0xEEEEEE);
// получим размеры исходного изображения
$size_img = getimagesize($filename);
// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];
// здесь вычисляем размеры, чтобы при масштабировании сохранились
// 1. Пропорции исходного изображения
// 2. Исходное изображение полностью помещалось на маленькой копии
// (не обрезалось)
if ($src_ratio>$ratio)
{
$old_h=$size_img[1];
$size_img[1]=floor($size_img[0]/$ratio);
$old_h=floor($old_h*$h/$size_img[1]);
}
else
{
$old_w=$size_img[0];
$size_img[0]=floor($size_img[1]*$ratio);
$old_w=floor($old_w*$w/$size_img[0]);
}
// исходя из того какой тип имеет изображение
// выбираем функцию создания
switch ($size_img['mime'])
{
// если тип файла JPEG
case 'image/jpeg':
// создаем jpeg из файла
$src_img = imagecreatefromjpeg($filename);
$ext="jpg";
break;
// если тип файла GIF
case 'image/gif':
// создаем gif из файла
$src_img = imagecreatefromgif($filename);
$ext="gif";
break;
}
// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $size_img[1] - высота исходного изображения
// третья цифра - 43 - помогает "вписать" картинку в середину прямоугольника
imagecopyresampled($dest_img, $src_img, 43, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
// в зависимости от типа файла выбирвем функцию сохранения в файл
switch ($size_img['mime'])
{
case 'image/jpeg':
// сохраняем в файл small.jpg
imagejpeg($dest_img, "small.$ext");
break;
case 'image/gif':
// сохраняем в файл small.gif
imagegif($dest_img, "small.$ext");
break;
}
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
}
$source="test.jpg";
// вызываем функцию изменения размера
resizeimg($source, 150, 100);
// выводим картинку на экран
?>
<img src="small.jpg">
|
вот и фсе... Мне нужно залить края изображения серым цветом... Левый край - получается, а правый - нет. Прикрепил фотку для тестирования. | |
| |
|
|
| |
|
|
| |
для: Fix
(07.12.2006 в 16:34)
| | | Ну хоть кто-нибудь же знает :( Ну ответьте, пожалуйста. Очень надо. Начальник требует :(( | |
| |
|
|
| |
|
|
| |
для: FiX
(08.12.2006 в 10:43)
| | | Так пойдет?
<?PHP
function img_resize($src, $dest, $width, $height, $rgb = 0xEEEEEE, $quality = 100) {
if (!file_exists($src)) return false;
$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;
$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;
}
img_resize('kartinla.jpg', 'sempl.jpg', 200, 150);
?>
|
| |
| |
|
|
| |
|
|
| |
для: Fli
(08.12.2006 в 22:32)
| | | Все просто супер!!!
Спасибо, Fli, все работает идеально!!!
Сколько счастья привалило :) На душе легче стало. Еще раз спасибо! | |
| |
|
|