[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите сделать тень для ресайзной картинки
GET
Здравствуйте, друзья помогите справиться.

Задачка такая, есть скрипт по уменьшению кратно картинки (лежит $old_image='/222.jpg';), например, когда новые высота и ширина картинки рассчитаны ($new_width, $new_height) :

начинаем вот делать графику:


$image_p = @imagecreatetruecolor($new_width, $new_height); // создал дескриптор полотна

$image_cr = imagecreatefromjpeg($old_image); //дескриптор изначальной картинки

imagecopyresampled($image_p, $image_cr, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);// копируем идентификатор изображения в идентификатор созданнго полотна в левый верхний угол растягиваем высоты и широты...

$new_image='/111.jpg';

imagejpeg($image_p, $new_image, 75);//создали, все готово



Это УПРОЩЕННАЯ схема работы скрипта.

Вот я уже всяко пробывал, но не получается сделать задним фоном для полученной картинки тень. Пробывал ее сделать при помощи PNG файла в виде уголка т.е. тени правого нижнего угла, но не получается.

думал сделаю сначала вот так:


$new_width_sh=$new_width+5;
$new_height_sh=$new_height+5;
$image_p = @imagecreatetruecolor($new_width_sh, $new_height_sh);



т.е. сейчас картинка растянется не на все полотно а справа и снизу останется полоска в 5 пикселей и в нее надо как то засунуть тень.

Вопрос встал, как вот это полотно $image_p сделать не полотном, которое делается черным по умолчанию командой imagecreatetruecolor, а как то по другому можно было бы взять готовый рисунок, но взять его нельзя так как его размеры зависят от размеров исходной уменьшаемой картинки и они все разные.

Может я запутанно конечно все обрисовал, но вдруг все же кто - нибудь делал тень для картинки!!! :)))



Спустя 2 часа, 19 минут, 22 секунды (6.04.2011 - 18:24) sergeiss написал(а):
Сделай просто черный (серый) прямоугольник (картинку) такого же размера, как и исходная картинка. Размести её ниже (z-Index) основной картинки и ниже-правее на нужную величину. И получишь тень. Причем, можешь сделать эту тень и с закруглеными уголками, и полупрозрачную - как захочешь, так и будет. Зависит только от твоих фантазии и желания.

Спустя 6 часов, 57 минут, 49 секунд (7.04.2011 - 01:21) GET написал(а):
sergeiss
Спасибо, идея не плохая, но намеренно работаю с IE 6, он не поддерживает z-Index, к тому же эту картинку придется каждый раз новую делать теми же средствами php т.к. картинки всегда разные по размеру...

Спустя 1 час, 16 минут, 5 секунд (7.04.2011 - 02:38) kirik написал(а):
Цитата (A.B.C. @ 6.04.2011 - 17:21)
намеренно работаю с IE 6

М'сье знает толк в извращениях :)

тут код
/** уворовал отсюда http://snipplr.com/view/12981/php-create-drop-shadow-on-image/ **/

/* offset of drop shadow from top left */
define("DS_OFFSET", 5);

/* number of steps from black to background color */
define("DS_STEPS", 10);

/* distance between steps */
define("DS_SPREAD", 1);

/* define the background color */
$background = array("r" => 255, "g" => 255, "b" => 255);

$src = '/tmp/a.jpg';

if(isset($src) && file_exists($src)) {
/* create a new canvas. New canvas dimensions should be larger than the original's */
list($o_width, $o_height) = getimagesize($src);
$width = $o_width + DS_OFFSET;
$height = $o_height + DS_OFFSET;
$image = imagecreatetruecolor($width, $height);

/* determine the offset between colors */
$step_offset = array("r" => ($background["r"] / DS_STEPS), "g" => ($background["g"] / DS_STEPS), "b" => ($background["b"] / DS_STEPS));

/* calculate and allocate the needed colors */
$current_color = $background;
for ($i = 0; $i <= DS_STEPS; $i++) {
$colors[$i] = imagecolorallocate($image, round($current_color["r"]), round($current_color["g"]), round($current_color["b"]));

$current_color["r"] -= $step_offset["r"];
$current_color["g"] -= $step_offset["g"];
$current_color["b"] -= $step_offset["b"];
}

/* floodfill the canvas with the background color */
imagefilledrectangle($image, 0,0, $width, $height, $colors[0]);

/* draw overlapping rectangles to create a drop shadow effect */
for ($i = 0; $i < count($colors); $i++) {
imagefilledrectangle($image, DS_OFFSET, DS_OFFSET, $width, $height, $colors[$i]);
$width -= DS_SPREAD;
$height -= DS_SPREAD;
}

/* overlay the original image on top of the drop shadow */
$original_image = imagecreatefromjpeg($src);
imagecopymerge($image, $original_image, 0,0, 0,0, $o_width, $o_height, 100);

/* output the image */
header("Content-type: image/jpeg");
imagejpeg($image, "", 100);

/* clean up the image resources */
imagedestroy($image);
imagedestroy($original_image);
}

Спустя 1 час, 9 минут, 31 секунда (7.04.2011 - 03:47) GET написал(а):
kirik, спааасибо дружище! Вы какой уже раз меня выручаете...поверьте вы не просто помогли добавить тень - вы помогли сделать мир еще прекраснее smile.gif

Спустя 6 часов, 7 минут, 16 секунд (7.04.2011 - 09:54) Zerstoren написал(а):
Если делать так чтоб было красиво и работало в ИЕ) То прошу тему с хабра и либу
Imagick http://habrahabr.ru/blogs/php/43511/

Но либа не везде установлена.

Спустя 2 часа, 15 минут, 7 секунд (7.04.2011 - 12:09) GET написал(а):
Сделал скрипт своими ручками...посмотрел, как делаются и вот сделал свой. Очень все устраивает тень правильная, работает в 6 IE

Спустя 1 месяц, 16 дней, 23 часа, 20 минут, 15 секунд (24.05.2011 - 11:30) ant3627 написал(а):
A.B.C.
Я вижу, вы знаете проблемы IE6 - (не поддерживает z-Index),
может подскажете и другие проблемы. В частности меня интересует можно ли зафиксировать позицию надписи на странице с помощью css. Или надо искать другой способ?


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

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