|
 37 Кб |
|
| Здравствуйте, уважаемые!
Пытаюсь сделать "рамку". Для этого взяв за основу файл-заготовку (прицеп),
пытаюсь наложить на нее имеющееся изображение. Но не выходит у меня каменный цветок.
В связи с этим, прошу, поможите кто чем может. Наставте, так сказать... Куда копать ?
Заранее благодарен !
<?php
function resize_image($image, $smallimage, $w, $h)
{
//определяем коэффициент сжатия изображения,
//которое будем генерировать
$ratio = $w/$h;
//получим размеры исходного изображения
$size_img = getimagesize($image);
if($size_img[0] < $size_img[1])
{
$temp = $w;
$w = $h;
$h = $temp;
}
//получим коэффициент сжатия исходного изображения
$ratio_size = $size_img[0]/$size_img[1];
//вычисляем размеры уменьшиной копии,
//чтобы при масштабировании сохранились
//пропорции изображения
if($ratio < $ratio_size)
{
$h = $w/$ratio_size;
}
else
{
$w = $h*$ratio_size;
}
//создадим пустое изображение по заданным размерам
if($size_img[0] < $w && $size_img[1] < $h)
{
$w = $size_img[0];
$h = $size_img[1];
}
$dest_img = imagecreatetruecolor($w, $h);
//создаем jpeg из файла
$src_img = imagecreatefromjpeg($image);
//масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
//создадим новое по размерам
$w_border = $w+20;
$h_border = $h+20;
$border = imagecreatetruecolor($w_border,$h_border);
//создаем из файла
$border_img = imagecreatefromjpeg("border.jpg");
$s_b_img = getimagesize($border_img);
//масштабируем изображение
imagecopyresampled($border, $border_img, 0, 0, 0, 0, $w_border, $h_border, $s_b_img[0], $s_b_img[1]);
//накладываем
imagecopy ($border, $dest_img, 10,10,0,0, $w_border, $h_border);
//сохраняем уменьшиную копию
imagejpeg($border, $smallimage, 70);
//очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
imagedestroy($border);
return true;
}
?>
|
| |
|
|
|
|
|
|
|
для: mehelson
(24.07.2008 в 12:23)
| | JPEG-изображение не может нести информацию о прозрачности
И что-то я не припоминаю, чтоб с прозрачностью работал gdlib. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 12:32)
| | Зачем прозрачность ?
одно поверхь другого... картинка на абсолютно белый фон с уголком.
Не надо прозрачности. Но вот только картинка ложится на черный фон.
Где не так ? объясните подробнее ... :)
Спасибо ! | |
|
|
|
|
|
|
|
для: mehelson
(24.07.2008 в 12:52)
| | А если рамку наложить на изображение?(как это обычно делают) а не наоборот?
пример | |
|
|
|
|
|
|
|
для: Valick
(24.07.2008 в 14:15)
| | Спасибо ! Но мы же с вами не ищем легких путей, да ? :)
А если серьезно, то примеров про рамки и с прозрачностью видел, но
мне показалось так легче... проще... ан нет... :)
Хочется разобраться наконец-то с этой библиотекой !
Но вот недопонимаю. Поэтому и прошу помочь... разобраться...
Спасибо! | |
|
|
|
|
|
|
|
для: mehelson
(24.07.2008 в 15:31)
| | Вот тут изменил чуть :
<?php
function resize_image($image, $smallimage, $w, $h)
{
//определяем коэффициент сжатия изображения,
//которое будем генерировать
$ratio = $w/$h;
//получим размеры исходного изображения
$size_img = getimagesize($image);
if($size_img[0] < $size_img[1])
{
$temp = $w;
$w = $h;
$h = $temp;
}
//получим коэффициент сжатия исходного изображения
$ratio_size = $size_img[0]/$size_img[1];
//вычисляем размеры уменьшиной копии,
//чтобы при масштабировании сохранились
//пропорции изображения
if($ratio < $ratio_size)
{
$h = $w/$ratio_size;
}
else
{
$w = $h*$ratio_size;
}
//создадим пустое изображение по заданным размерам
if($size_img[0] < $w && $size_img[1] < $h)
{
$w = $size_img[0];
$h = $size_img[1];
}
$dest_img = imagecreatetruecolor($w, $h);
//создаем jpeg из файла
$src_img = imagecreatefromjpeg($image);
//масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
//создадим новое по размерам
$w_border = $w+20;
$h_border = $h+20;
$border = imagecreatetruecolor($w_border,$h_border);
//создаем из файла
$border_img = imagecreatefromjpeg("border.jpg");
$s_b_img = getimagesize($border_img);
//масштабируем изображение
imagecopyresampled($border, $border_img, 0, 0, 0, 0, $w_border, $h_border, $s_b_img[0], $s_b_img[1]);
//накладываем с масштабом
imagecopyresampled($border, $dest_img, 0, 0, 0, 0, $w, $h, $w_border, $h_border);
//сохраняем уменьшиную копию
imagejpeg($border, $smallimage, 70);
//очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
imagedestroy($border);
return true;
}
?>
|
Теперьуже лучше, но все-таки на черном, "свежесозданном" изображении,
а белый лист с уголком так и не идет...
Ткните носом, так сказать...
т.е. почему сама картинка накладывается на черный новый фон,
а белого листа нет ?
Спасибо! | |
|
|
|
|
|
|
|
для: mehelson
(24.07.2008 в 15:34)
| | А потому, что вы не той функцией пользуетесь. Как я понял, вы хотите на фон (белая картинка с загнутым уголком) наложить другое изображение, оставив по бокам отступ (рамка). Делать надо так (без всяких проверок размеров тут, сами знаете как):
<?
//это ваш фон "с уголком"
$fon = imagecreatefromjpeg("fon.jpg");
//это то что накладываем
$im = imagecreatefromjpeg("src.jpg");
//наложение
imagecopy($fon, $im, 30, 20, 0, 0, 720, 488);
//любуемся
header("Content-type: image/jpeg");
imagejpeg($fon);
?>
|
| |
|
|
|
|
|
|
|
для: sim5
(24.07.2008 в 17:06)
| | Возможно Вы правы! Скорее так и есть! Но изображение не вижу.
Спасибо | |
|
|
|
|
|
|
|
для: mehelson
(24.07.2008 в 19:44)
| | Что значит не видите? Пропишите свои, реальные, изображения, увидите. | |
|
|
|
|
|
|
|
для: sim5
(24.07.2008 в 20:00)
| | :) ну вы уважаемый даете...
Спасибо разобрался | |
|
|
|
|