0

У меня проблема - делаю для сайта картинки с прозрачным фоном PNG и средствами PHP накладываю на картинки watermark тоже с прозрачным фоном PNG, и происходит такая беда - watermark накладывается на картинку, но фон становится черным, а не прозрачным, как должно быть. Что может быть не так?

Вот PHP код:

<?php
    waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "bottom=5,right=5");

function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) {  
   $original = urldecode($original); 
   $info_o = @getImageSize($original);  
   if (!$info_o)  
         return false;  
   $info_w = @getImageSize($watermark);  
   if (!$info_w)  
         return false;

   list ($vertical, $horizontal) = split(',', $placement,2);  
   list($vertical, $sy) = split('=', trim($vertical),2);  
   list($horizontal, $sx) = split('=', trim($horizontal),2);

   switch (trim($vertical)) {  
      case 'bottom':  
         $y = $info_o[1] - $info_w[1] - (int)$sy;  
         break;  
      case 'middle':  
         $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy;  
         break;  
      default:  
         $y = (int)$sy;  
         break;  
      }

   switch (trim($horizontal)) {  
      case 'right':  
         $x = $info_o[0] - $info_w[0] - (int)$sx;  
         break;  
      case 'center':  
         $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx;  
         break;  
      default:  
         $x = (int)$sx;  
         break;  
      }

   header("Content-Type: ".$info_o['mime']);

   $original = @imageCreateFromString(file_get_contents($original));  
   $watermark = @imageCreateFromString(file_get_contents($watermark));  
   $out = imageCreateTrueColor($info_o[0],$info_o[1]);

   imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]);  
   if( ($info_o[0] > 250) && ($info_o[1] > 250) ) 
   { 
   imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]); 
   }

   switch ($info_o[2]) {  
      case 1:  
         imageGIF($out);  
         break;  
      case 2:  
         imageJPEG($out);  
         break;  
      case 3:  
         imagePNG($out);  
         break;  
         }

   imageDestroy($out);  
   imageDestroy($original);  
   imageDestroy($watermark);

   return true;  
   }  
?>

И вот файл .htaccess, который я кладу в папку с изображениями:

DirectoryIndex index.php  
<FilesMatch "\.(gif|jpg|png|PNG|GIF|JPG)$">  
   RewriteEngine On  
   RewriteCond %{REQUEST_FILENAME} -f  
   RewriteRule ^(.*)$ /wm/_wm.php [T=application/x-httpd-php,L,QSA]  
</FilesMatch>
3
  • @NMD Можете Ваш комментарий преобразовать в ответ?
    – spoilt
    22 окт 2014 в 8:29
  • PS: Прошу прощения за офтоп. Зашел в пост чтобы скинуть эту ссылку на свой пост, а тут она уже есть) 22 окт 2014 в 8:40
  • @IntellectSys можете оформить как ответ?
    – spoilt
    22 окт 2014 в 9:13

1 ответ 1

1

Возможно подобная ситуация http://intsystem.org/923/correct-resize-transparent-images-on-php/

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.