За последние 24 часа нас посетили 18777 программистов и 1608 роботов. Сейчас ищут 894 программиста ...

Водяной знак на рисунке

Тема в разделе "PHP для новичков", создана пользователем Колбася, 23 авг 2012.

  1. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Есть функции, отвечающие за добавку изображения на сайте.
    Вот они:

    Код (PHP):
    1. function createThumbnail($name, $filename, $new_w, $new_h) {
    2.     $system=explode(".", $filename);
    3.     $system = array_reverse($system);
    4.     if (preg_match("/jpg|jpeg/", $system[0])) {
    5.         $src_img=imagecreatefromjpeg($name);
    6.     } else if (preg_match("/png/", $system[0])) {
    7.         $src_img=imagecreatefrompng($name);
    8.     } else if (preg_match("/gif/", $system[0])) {
    9.         $src_img=imagecreatefromgif($name);
    10.     } else {
    11.         return false;
    12.     }
    13.     
    14.     if (!$src_img) {
    15.         fancyDie("Unable to read uploaded file during thumbnailing. A common cause for this is an incorrect extension when the file is actually of a different type.");
    16.     }
    17.     $old_x = imageSX($src_img);
    18.     $old_y = imageSY($src_img);
    19.     if ($old_x > $old_y) {
    20.         $percent = $new_w / $old_x;
    21.     } else {
    22.         $percent = $new_h / $old_y;
    23.     }
    24.     $thumb_w = round($old_x * $percent);
    25.     $thumb_h = round($old_y * $percent);
    26.     
    27.     $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h);
    28.     fastImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
    29.     
    30.     if (preg_match("/png/", $system[0])) {
    31.         if (!imagepng($dst_img, $filename)) {
    32.             return false;
    33.         }
    34.     } else if (preg_match("/jpg|jpeg/", $system[0])) {
    35.         if (!imagejpeg($dst_img, $filename, 70)) {
    36.             return false;
    37.         }
    38.     } else if (preg_match("/gif/", $system[0])) {
    39.         if (!imagegif($dst_img, $filename)) { 
    40.             return false;
    41.         }
    42.     }
    43.     
    44.     imagedestroy($dst_img); 
    45.     imagedestroy($src_img); 
    46.     
    47.     return true;
    48. }
    49.  
    50. function fastImageCopyResampled(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h, $quality = 3) {
    51.     //Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable. 
    52.     if (empty($src_image) || empty($dst_image)) { return false; }
    53.  
    54.     if ($quality <= 1) {
    55.         $temp = imagecreatetruecolor ($dst_w + 1, $dst_h + 1);
    56.         imagecopyresized ($temp, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w + 1, $dst_h + 1, $src_w, $src_h);
    57.         imagecopyresized ($dst_image, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $dst_w, $dst_h);
    58.         imagedestroy ($temp);
    59.     } elseif ($quality < 5 && (($dst_w * $quality) < $src_w || ($dst_h * $quality) < $src_h)) {
    60.         
    61.         $tmp_w = $dst_w * $quality;
    62.         $tmp_h = $dst_h * $quality;
    63.         $temp = imagecreatetruecolor ($tmp_w + 1, $tmp_h + 1);
    64.         
    65.         imagecopyresized ($temp, $src_image, $dst_x * $quality, $dst_y * $quality, $src_x, $src_y, $tmp_w + 1, $tmp_h + 1, $src_w, $src_h);
    66.         
    67.         imagecopyresampled ($dst_image, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $tmp_w, $tmp_h);
    68.         
    69.         imagedestroy ($temp);
    70.         
    71.     } else {
    72.         imagecopyresampled ($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    73.     }
    74.  
    75.     
    76.     return true;
    77. } 
    И есть код, отвечающий за добавления на эти изображения водяного значка, вот он :

    Код (PHP):
    1. function trans_watermark($src_img) {
    2.     $xi = imagesx($src_img);
    3.     $yi = imagesy($src_img);
    4.     $logo = imagecreatefrompng("watermark.png");
    5.     $xl = imagesx($logo);
    6.     $yl = imagesy($logo);
    7.     $xi = ($xi - 16) - ($xl);
    8.     $yi = ($yi - 16) - ($yl);
    9.     imagecopy($src_img, $logo, $xi, $yi, 0, 0, $xl, $yl);
    10.     imagedestroy($logo);
    11.     return $src_img;
    12. } 
    Пытался соединить нижнее с верхним - не получается...подскажите в чем ошибка или как это все должно выглядеть.
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    а как пытался то? покажи...
     
  3. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Код (PHP):
    1. function createThumbnail($name, $filename, $new_w, $new_h) {
    2.     $system=explode(".", $filename);
    3.     $system = array_reverse($system);
    4.     if (preg_match("/jpg|jpeg/", $system[0])) {
    5.         $src_img=trans_watermark(imagecreatefromjpeg($name));
    6.     } else if (preg_match("/png/", $system[0])) {
    7.         $src_img=trans_watermark(imagecreatefrompng($name));
    8.     } else if (preg_match("/gif/", $system[0])) {
    9.         $src_img=trans_watermark(imagecreatefromgif($name));
    10.     } else {
    11.         return false;
    12.     }
    13.     
    14.     if (!$src_img) {
    15.         fancyDie("Unable to read uploaded file during thumbnailing. A common cause for this is an incorrect extension when the file is actually of a different type.");
    16.     }
    17.     $old_x = imageSX($src_img);
    18.     $old_y = imageSY($src_img);
    19.     if ($old_x > $old_y) {
    20.         $percent = $new_w / $old_x;
    21.     } else {
    22.         $percent = $new_h / $old_y;
    23.     }
    24.     $thumb_w = round($old_x * $percent);
    25.     $thumb_h = round($old_y * $percent);
    26.     
    27.     $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h);
    28.     fastImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
    29.     
    30.     if (preg_match("/png/", $system[0])) {
    31.         if (!imagepng($dst_img, $filename)) {
    32.             return false;
    33.         }
    34.     } else if (preg_match("/jpg|jpeg/", $system[0])) {
    35.         if (!imagejpeg($dst_img, $filename, 70)) {
    36.             return false;
    37.         }
    38.     } else if (preg_match("/gif/", $system[0])) {
    39.         if (!imagegif($dst_img, $filename)) { 
    40.             return false;
    41.         }
    42.     }
    43.     
    44.     imagedestroy($dst_img); 
    45.     imagedestroy($src_img); 
    46.     
    47.     return true;
    48. }
    49.  
    50. function fastImageCopyResampled(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h, $quality = 3) {
    51.     //Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable. 
    52.     if (empty($src_image) || empty($dst_image)) { return false; }
    53.  
    54.     if ($quality <= 1) {
    55.         $temp = imagecreatetruecolor ($dst_w + 1, $dst_h + 1);
    56.         imagecopyresized ($temp, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w + 1, $dst_h + 1, $src_w, $src_h);
    57.         imagecopyresized ($dst_image, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $dst_w, $dst_h);
    58.         imagedestroy ($temp);
    59.     } elseif ($quality < 5 && (($dst_w * $quality) < $src_w || ($dst_h * $quality) < $src_h)) {
    60.         
    61.         $tmp_w = $dst_w * $quality;
    62.         $tmp_h = $dst_h * $quality;
    63.         $temp = imagecreatetruecolor ($tmp_w + 1, $tmp_h + 1);
    64.         
    65.         imagecopyresized ($temp, $src_image, $dst_x * $quality, $dst_y * $quality, $src_x, $src_y, $tmp_w + 1, $tmp_h + 1, $src_w, $src_h);
    66.         
    67.         imagecopyresampled ($dst_image, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $tmp_w, $tmp_h);
    68.         
    69.         imagedestroy ($temp);
    70.         
    71.     } else {
    72.         imagecopyresampled ($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    73.     }
    74.  
    75.     
    76.     return true;
    77. }
    78.  
    79. function trans_watermark($src_img) {
    80.     $xi = imagesx($src_img);
    81.     $yi = imagesy($src_img);
    82.     $logo = imagecreatefrompng("chatsnwatermark.png");
    83.     $xl = imagesx($logo);
    84.     $yl = imagesy($logo);
    85.     $xi = ($xi - 16) - ($xl);
    86.     $yi = ($yi - 16) - ($yl);
    87.     imagecopy($src_img, $logo, $xi, $yi, 0, 0, $xl, $yl);
    88.     imagedestroy($logo);
    89.     return $src_img;
    90. } 
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    круто, малачина :)

    а ты думаешь если ты одну функцию к другой "подселишь" они совокупляться начнут?
     
  5. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Зачем этот символ?

    function fastImageCopyResampled(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h, $quality = 3) 

    & ?
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это передача переменной в функцию по ссылке. При этом переменная не копируется, а функцию получает доступ к оригиналу переменной в памяти. Подробней можно почитать тут
    http://www.php.ru/manual/language.references.html
     
  7. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ссылка это

    Код (Text):
    1.  
    2. <?php
    3. $img = $_GET['img']; /// путь к картинке которую копирайтим
    4. $im = imagecreatefromjpeg($img);  
    5. $lg = imagecreatefrompng('copyrite.png'); /// наша картинка копирайта
    6. $img_x = imagesx($im);
    7. $img_y = imagesy($im);
    8. $img_x_copy = imagesx($lg);
    9. $img_y_copy = imagesy($lg);
    10. imagecopy($im, $lg, $img_x-$img_x_copy, $img_y-$img_y_copy, 0, 0, $img_x_copy, $img_y_copy);  
    11. header('Content-Type: image/jpeg');  
    12. imagejpeg($im);  
    13. imagedestroy($im); /// чистим мусор
    14. imagedestroy($lg); /// чистим мусор
    15. ?>
     
  8. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    О спс
    посмотрю
     
  9. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Чета невыходит