Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Znak wodny
Forum PHP.pl > Forum > Przedszkole
szymek001
Witam, znalazłem na http://www.webtips.pl/post14180.html instrukcje jak zrobić znak wodny na pliku:

znak.php
  1. <?php
  2.  
  3. // znaku wodnego mozna uzywac tylko na obrazkach .jpg. gif .png
  4. // jako znak wodny mozna uzyc tylko przezroczysty obrazek
  5. // b.michalski@dstudio.pl
  6.  
  7.  
  8. $imagesource = $_GET['obraz'];
  9. $watermarkPath = $_GET['znak'];
  10. $filetype = substr($imagesource,strlen($imagesource)-4,4);
  11. $filetype = strtolower($filetype);
  12. $watermarkType = substr($watermarkPath,strlen($watermarkPath)-4,4);
  13. $watermarkType = strtolower($watermarkType);
  14.  
  15. if($filetype == ".gif")
  16. $image = @imagecreatefromgif($imagesource);
  17. else
  18. if($filetype == ".jpg" || $filetype == "jpeg")
  19. $image = @imagecreatefromjpeg($imagesource);
  20. else
  21. if($filetype == ".png")
  22. $image = @imagecreatefrompng($imagesource);
  23. else
  24. die();
  25.  
  26. if(!$image)
  27. die();
  28.  
  29. if($watermarkType == ".gif")
  30. $watermark = @imagecreatefromgif($watermarkPath);
  31. else
  32. if($watermarkType == ".png")
  33. $watermark = @imagecreatefrompng($watermarkPath);
  34. else
  35. die();
  36.  
  37. if(!$watermark)
  38. die();
  39.  
  40. $imagewidth = imagesx($image);
  41. $imageheight = imagesy($image);
  42. $watermarkwidth = imagesx($watermark);
  43. $watermarkheight = imagesy($watermark);
  44. $startwidth = (($imagewidth - $watermarkwidth) );
  45. $startheight = (($imageheight - $watermarkheight) );
  46. imagecopy($image, $watermark, $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
  47. imagejpeg($image);
  48. imagedestroy($image);
  49. imagedestroy($watermark);
  50. ?>


użycie:
Kod
<img src="znak.php?obraz=obrazek.jpg&znak=znaczek.jpg" border="0">


lecz jak zrobić by znak był zawsze bez dopisywania &znak=znaczek.jpg w linku?

próbowałem podmienić zmienną
  1. <?php
  2. $watermarkPath = $_GET['znak'];
  3. ?>


na
  1. <?php
  2. $watermarkPath = http://adres.obrazka.pl/znak_wodny.jpg;
  3. ?>


ale to nie działało.



Z góry dziękuje za odpowiedzi winksmiley.jpg
luniak
Spróbuj
  1. <?php
  2. $watermarkPath = "znaczek.jpg";
  3. ?>
szymek001
nie pomogło.. a co więcej zauważyłem że nawet gdy wysyłam znak wodny GET'em dodając do linku &znak=znaczek.jpg to też wyświetla się biała strona. Sprawdzałem na 2 serwerach, oba obsługują biblioteki GD.

OK, znalazłem coś takiego:

  1. <?php
  2. // This script will show image with logo on it
  3. // Supported are PNGs,GIFs,JPEGs
  4. // ------------------------------------------------------
  5. // call it: <a href=\"http://www.domain.com/showimage.php?img=<name>\" target=\"_blank\">http://www.domain.com/showimage.php?img=<name></a>
  6. // where <name> is name of image...
  7. // example:
  8. // <a href=\"http://www.domain.com/showimage.php?img=001.jpg\" target=\"_blank\">http://www.domain.com/showimage.php?img=001.jpg</a>
  9. // ------------------------------------------------------
  10. // You have to set parameters here:
  11. // ------------------------------------------------------
  12. $image_quality="80";
  13. // quality of JPEG conpression [0-100]
  14. // ------------------------------------------------------
  15. $image_path="./images/";
  16. // path to images
  17. // examples:
  18. // $image_path="./images/";
  19. // $image_path="../../images/";
  20. // ------------------------------------------------------
  21. $logo_path="./logo.png";
  22. // path and name of the LOGO image (PNG,GIF,JPEG)
  23. // examples:
  24. // $logo_path="./logos/img_logo.png";
  25. // $logo_path="../../logos/img_logo.png"
  26. // ------------------------------------------------------
  27. $logo_pos_x="right";
  28. // left, right, center
  29. $logo_pos_y="bottom";
  30. // top, middle, bottom
  31. // ------------------------------------------------------
  32. $error_not_found="Nie ma takiego obrazka";
  33. // where image is not found, show this error text
  34. $error_not_supported="This image type isn't supported";
  35. // where image is not supported, show this error text
  36. $error_bg_color=array(255,255,255);
  37. // image background color in RGB - (RED,GREEN,BLUE)
  38. $error_text_color=array(255,0,0);
  39. // text color in RGB - (RED,GREEN,BLUE)
  40. // ------------------------------------------------------
  41. // YOU DON'T HAVE TO EDIT CODE BELOW THIS LINE
  42. // ------------------------------------------------------
  43. // SCRIPT written by Ladislav Soukup, [root@soundboss.cz]
  44. // ------------------------------------------------------
  45. function NewImage($width,$height,$text=""){
  46. global $error_bg_color,$error_text_color;
  47. if (function_exists("imagecreatetruecolor")){
  48. if (!@$img=imagecreatetruecolor($width,$height)){
  49. $img=imagecreate($width,$height);
  50. }
  51. } else {
  52. $img=imagecreate($width,$height);
  53. }
  54. $imgbgcolor=ImageColorAllocate($img,$error_bg_color[0],$error_bg_color[1],$error_bg_color[2]);
  55. $imgtextcolor=ImageColorAllocate($img,$error_text_color[0],$error_text_color[1],$error_text_color[2]);
  56. imagefilledrectangle($img,0,0,$width,$height,$imgbgcolor);
  57. imagestring($img,5,10,10,$text,$imgtextcolor);
  58. return($img);
  59. }
  60. Header("Content-type: image/jpeg");
  61. $exp=GMDate("D, d M Y H:i:s",time()+999);
  62. Header("Expires: $exp GMT");
  63. $rep_from=array("./","../");
  64. $rep_to=array("","",);
  65. $_GET["img"]=str_replace($rep_from,$rep_to,$_GET["img"]);
  66. $file=$image_path . $_GET["img"];
  67. if (file_exists($file)){
  68. $info=getimagesize($file);
  69. $width=$info[0];
  70. $height=$info[1];
  71. if ($info[2]==1){
  72. $img=@imagecreatefromgif($file);
  73. } else if ($info[2]==2){
  74. $img=@imagecreatefromjpeg($file);
  75. } else if ($info[2]==3){
  76. $img=@imagecreatefrompng($file);
  77. } else {
  78. $width=640;
  79. $height=480;
  80. $img=NewImage($width,$height,$error_not_supported);
  81. }
  82. } else {
  83. $width=640;
  84. $height=480;
  85. $img=NewImage($width,$height,$error_not_found);
  86. }
  87. if (file_exists($logo_path)){
  88. $info=getimagesize($logo_path);
  89. $logo_width=$info[0];
  90. $logo_height=$info[1];
  91. if ($info[2]==1){
  92. $img_logo=imagecreatefromgif($logo_path);
  93. } else if ($info[2]==2){
  94. $img_logo=imagecreatefromjpeg($logo_path);
  95. } else if ($info[2]==3){
  96. $img_logo=imagecreatefrompng($logo_path);
  97. } else {
  98. $logo_width=120;
  99. $logo_height=20;
  100. $img=NewImage($logo_width,$logo_height,$error_not_supported);
  101. }
  102. // positioning - X
  103. if ($logo_pos_x=="left"){
  104. $dst_x=10;
  105. } else if ($logo_pos_x=="center"){
  106. $dst_x=round(($width-$logo_width)/2);
  107. } else if ($logo_pos_x=="right"){
  108. $dst_x=$width-10-$logo_width;
  109. } else {
  110. $dst_x=round(($width-$logo_width)/2);
  111. }
  112. // positioning - Y
  113. if ($logo_pos_y=="top"){
  114. $dst_y=5;
  115. } else if ($logo_pos_y=="middle"){
  116. $dst_y=round(($height-($logo_height/2))/2);
  117. } else if ($logo_pos_y=="bottom"){
  118. $dst_y=$height-5-$logo_height;
  119. } else {
  120. $dst_y=round(($height-($logo_height/2))/2);
  121. }
  122. imagecopy($img,$img_logo,$dst_x,$dst_y,0,0,$logo_width,$logo_height);
  123. }
  124. ImageJpeg($img,"",$image_quality);
  125. ?>


działa ok, ale czy jest możliwość przerobienia tego tak, by można było wyświetlać obrazki umieszczone na innych serwerach? Chodzi mi o coś takiego jak http://stronajakas.pl/showimage.php?img=ht...ik.pl/fotka.jpg
Jest to wykonalne?

Edit: szukełem tego znak.php i znalazłem coś takiego: http://siemensjava.pl/znak.php?obraz=http:....com/osbzub.png
Wie ktoś może jak uzyskać taki efekt?

Ha, już prawie mam..

Na jakim¶ zagranicznym forum znalazłem:

  1. <?php
  2. // this script creates a watermarked image from an image file - can be a .jpg .gif or .png file
  3. // where watermark.gif is a mostly transparent gif image with the watermark - goes in the same directory as this script
  4. // where this script is named watermark.php
  5. // call this script with an image tag
  6. // <img src="watermark.php?path=imagepath"> where path is a relative path such as subdirectory/image.jpg
  7. $imagesource =  $_GET['path'];
  8. $filetype = substr($imagesource,strlen($imagesource)-4,4);
  9. $filetype = strtolower($filetype);
  10. if($filetype == ".gif")  $image = @imagecreatefromgif($imagesource);  
  11. if($filetype == ".jpg")  $image = @imagecreatefromjpeg($imagesource);  
  12. if($filetype == ".png")  $image = @imagecreatefrompng($imagesource);  
  13. if (!$image) die();
  14. $watermark = @imagecreatefromgif('watermark.gif');
  15. $imagewidth = imagesx($image);
  16. $imageheight = imagesy($image);  
  17. $watermarkwidth =  imagesx($watermark);
  18. $watermarkheight =  imagesy($watermark);
  19. $startwidth = ((0) );
  20. $startheight = (($imageheight - $watermarkheight) );
  21. imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
  22. imagejpeg($image);
  23. imagedestroy($image);
  24. imagedestroy($watermark);
  25. ?>



Adres podajemy w taki sposób:
Kod
http://adresjaki¶.pl/obrazek.php?path=http://fotosik.pl/obrazek.jpg


Tyle że mam jeszcze 2 problemy:
1. Gdy jest to gif animowany tworzy się tylko 1 klatka, które jest nieruchoma.
2. Gdy klikam ppm/pokaż obrazek to wyskakuje co¶ w rodzaju:
Cytat
˙Ř˙ŕ�JFIF������˙ţ�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ˙Ű�C�    $.' ",#(7),01444'9=82<.342˙Ű�C  2!!22222222222222222222222222222222222222222222222222˙Ŕ��F,"�˙Ä����������� ˙Ä�µ���}�!1AQa"q2��ˇ#B±ÁRŃđ$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�����������������˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä�������� ˙Ä�µ��w�!1AQaq"2�B�ˇ±Á #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú� ��?�·ŻëşĚ>%Ô �WżP·r��.\�»Č� đ*¬ëĚđŔ�ľ¤ŇĘÁxş|äţ?çůgř¦g�â%ČM­��D�8 ĄĎĚO×ů~]�§Ľ7 >Hş1ę[úcÓü�´±�S«�ú÷rˇ»¸fĆ8���<Őé®o�� Ç�ů÷9%Ç ôŞ�ČĘKF0ËÎqŇ®4Kq�,����ą¨,˝-ĐýÓGu6Aňç ��P�|żé·HęĽć#qíŢł.ďî"�FÔ�r{�L׫ř�95Ytń.|ł�sß?Ď˙�­Ĺ\�;ő®©),ÓLĹÎÖÂĘHÚ}zć¶�Ľ�2Ěü�ďW�XëIhʨ x®»Lń%»(�ĎON TŁŘ�Ëą©©Z^Ną�ţh�ű.GňŞ�I«Yżďn�ć3ÔI#ó«­�o±��{üÝ+ă\�fU¶ą,Ţ�xüé$ö*éj_şŐ.»#2p>`X�Xw×:�7�őćŢčen?Zصaw0�ŮKb®\ŮDčA^˘�d&Ű



Ma kto¶ jaki¶ pomysł jak to naprawić?
marcio
Ja uzywam cos takiego:
  1. <?php
  2. function img_on_img($plik, $znaczek, $pozycja) {
  3.  
  4. $image1 = imagecreatefromjpeg($znaczek);
  5. $image2 = imagecreatefromjpeg($plik);
  6. $plik_w = imagesx($image2);
  7. $plik_h = imagesy($image2);
  8. $znaczek_w = imagesx($image1);
  9. $znaczek_h = imagesy($image1);
  10.  
  11. if($pozycja == "tl") {
  12. $od_x = 0;
  13. $od_y = 0;
  14. }
  15. if($pozycja == "tr") {
  16. $od_x = $plik_w - $znaczek_w;
  17. $od_y = 0;
  18. }
  19. if($pozycja == "bl") {
  20. $od_x = 0;
  21. $od_y = $plik_h - $znaczek_h;
  22. }
  23. if($pozycja == "br") {
  24. $od_x = $plik_w - $znaczek_w;
  25. $od_y = $plik_h - $znaczek_h;
  26. }
  27.  
  28. imagecopy($image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h);
  29. imagejpeg($image2);
  30. imagedestroy($image1);
  31. imagedestroy($image2);
  32.  
  33. }
  34. ?>

Dziala tylko dla jpeg wiec sobie zmien funkcje zeby dzialalo na wszystkich typach.
szymek001
ok, ale nadal pozostaje mi jeden niewyja¶niony problem: zawsze gdy tworzę obrazek GIF przy użyciu biblioteki GD nie jest on animacj±. Czy trzeba co¶ specjalnego użyć by obrazek był animowany? Na pewno jest to wykonalne, bo często można takie co¶ zobaczyć, nawet na reklamach tworz±cych kartę Visa z naszym zdjęciem itp.
nexis
Pogooooooooglaj
szymek001
szukałem już, znajduję tylko tutoriale jak zrobić z kilku klatek animacje gif w php (klatka po klatce), a nie o to mi chodzi.
To jest wersja lo-fi głównej zawarto¶ci. Aby zobaczyć pełn± wersję z większ± zawarto¶ci±, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.