Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с водяными знаками(прозрачность)
 
 автор: Dimka31   (08.02.2009 в 20:00)   письмо автору
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$logo0000$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_img0000$w$h$width$height);
    
// Сохраняем уменьшенную копию в файл 
    
imagepng($dest_img$smallimage);                       
    
// Чистим память от созданных изображений 
    
imagedestroy($dest_img); 
    
imagedestroy($src_img); 
    return 
true;          
  }

    
header("Content-type: image/png"); 
    
imagejpeg($img);
?>


Помогите разобраться. Заранее благодарен.

  Ответить  
 
 автор: sim5   (08.02.2009 в 20:47)   письмо автору
 
   для: Dimka31   (08.02.2009 в 20:00)
 

Причина видмо в том, что ваш png-файл сохранен не как PNG-24, а как PNG-8.

  Ответить  
 
 автор: Dimka31   (08.02.2009 в 21:03)   письмо автору
 
   для: 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);                       


где-то в этих строках...

  Ответить  
 
 автор: sim5   (09.02.2009 в 05:20)   письмо автору
 
   для: Dimka31   (08.02.2009 в 21:03)
 

Я не смотрел ваш код, а вот изображение да. И оно оказалось 8-битным, и оно не будет в таком случае прозрачным на изображении, даже без всяких манипуляций с размерами. Я бы упростил все, а значит и код : логотип сделал поменьше (без ужасающего креста), и не уменьшал его, а центрировал, если вы хотите разместить его по центру. Логотип сделал бы несколько иным, так как на такой палитре изображения (как в примере) он будет не виден. Я бы сделал его с эффектом 3D объема, "стекло", с подложенной под ним небольшой тенью. При чем логотип, это просто аккуратная надпись, без всяких "всполохов". Такой логотип, не сильно будет мешать просмотру изображения, а значит и не раздражать. Отпадет и необходимость "подгонять" размеры изображений.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования