|
 268.6 Кб |
|
| Необходимо на изображение наложить водянной знак, который в свою очередь тоже является изображением (png).
Проблема сейчас в том что водяной знак полностью закрывает изображение и делает свой фон черным.
<?php
$logofile = "sign.png";//Логотип
$main_foto = "foto.jpg";//Фото на которое накладываем логотип
$size_logo = getimagesize($logofile);
$size_img = getimagesize($main_foto);
$side = ($size_img[0]>$size_img[1]) ? $size_img[1] : $size_img[0];
resizeimg($logofile, "edit_".$logofile, $side, $side);
$logo = imagecreatefrompng("edit_".$logofile);
$img = imagecreatefromjpeg($main_foto);
imagecopymerge($img, $logo, 0, 0, 0, 0, $size_logo[0], $size_logo[1], 100);
function resizeimg($filename, $smallimage, $w, $h)
{
// 1. Коррекция параметров $w и $h
// Определим коэффициент сжатия изображения
$ratio = $w / $h;
// Получим размеры исходного изображения
list($width, $height) = getimagesize($filename);
// Если размеры меньше, то масштабирования не нужно
if (($width < $w) && ($height < $h))
{
copy($filename, $smallimage);
return true;
}
// получим коэффициент сжатия исходного изображения
$src_ratio = $height/ $width;
// Вычисляем размеры уменьшенной копии, чтобы
// при масштабировании сохранились
// пропорции исходного изображения
$h = $w*$src_ratio;
// 2. Создание уменьшенной копии изображения
// Создаем пустое изображение
// размером $w x $h пикселов
$dest_img = imagecreatetruecolor($w, $h);
// Открываем файл, который будет подвергаться сжатию
$src_img = imagecreatefrompng($filename);
// Масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $width, $height);
// Сохраняем уменьшенную копию в файл
imagepng($dest_img, $smallimage);
// Чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
header("Content-type: image/png");
imagejpeg($img);
?>
|
Помогите разобраться. Заранее благодарен. | |
|
|
|
|
|
|
|
для: Dimka31
(08.02.2009 в 20:00)
| | Причина видмо в том, что ваш png-файл сохранен не как PNG-24, а как PNG-8. | |
|
|
|
|
|
|
|
для: sim5
(08.02.2009 в 20:47)
| | Пересохранил в формате png-24 не помогло.
Ошибка возникает, когда скрипт изменяет размер изображения,
$dest_img = imagecreatetruecolor($w, $h);
// Открываем файл, который будет подвергаться сжатию
$src_img = imagecreatefrompng($filename);
// Масштабируем изображение
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $width, $height);
// Сохраняем уменьшенную копию в файл
imagepng($dest_img, $smallimage);
|
где-то в этих строках... | |
|
|
|
|
|
|
|
для: Dimka31
(08.02.2009 в 21:03)
| | Я не смотрел ваш код, а вот изображение да. И оно оказалось 8-битным, и оно не будет в таком случае прозрачным на изображении, даже без всяких манипуляций с размерами. Я бы упростил все, а значит и код : логотип сделал поменьше (без ужасающего креста), и не уменьшал его, а центрировал, если вы хотите разместить его по центру. Логотип сделал бы несколько иным, так как на такой палитре изображения (как в примере) он будет не виден. Я бы сделал его с эффектом 3D объема, "стекло", с подложенной под ним небольшой тенью. При чем логотип, это просто аккуратная надпись, без всяких "всполохов". Такой логотип, не сильно будет мешать просмотру изображения, а значит и не раздражать. Отпадет и необходимость "подгонять" размеры изображений. | |
|
|
|
|