Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Nadrukowanie" "wzorku" na obrazek
Forum PHP.pl > Forum > PHP
Najki
Mam obrazek 80x80 pikseli. Chciałbym, aby php, tuż po wygenerowaniu go (to możemy pominąć), zapisał na nim kilka rzeczy i dopiero wtedy zachował go na dysku.

Dokładniej to chcę, aby na obrazek 80x80 został naniesiony taki wzorek, lub taki obrazek, jak poniżej (jeden z dwóch):





Proszę o pomoc w wykonaniu takiego skryptu.
.dragonfly
Twoj problem rozwiaze napewno funkcja: imagecreatefromgif
Najki
Może po prostu jestem tępy, ale przeczytanie całej zawartości tego linka mi nie pomogło i nie dowiedziałem się jak nanieść GIF'a (z przeźroczystością) na JPG.
mls
Otwarcie obrazka zapisanego w GIFie:
imagecreatefromgif" title="Zobacz w manualu PHP" target="_manual
Skopiowanie jednego obrazka na drugi:
imagecopy" title="Zobacz w manualu PHP" target="_manual
walker
Cytat( Chaos Zen napisał )
// Combine the images into a single output image. Some people
// prefer to use the imagecopy() function, but more often than
// not, it sometimes does not work. (could be a bug)


.. po czym sugestia autora zeby uzywac imagecopymerge()
Najki
No to OK. To teraz mam coś takiego:
  1. <?php
  2. function img_resize($img_path,$dest_path,$max_width,$max_height)
  3. {
  4. if(file_exists($img_path)){
  5. $img_size = GetImageSize($img_path);
  6. $img_width = $img_size[0];
  7. $img_height = $img_size[1];
  8.  
  9. $new_width = $max_width;#
  10. $new_height = $max_height;#
  11.  
  12. $zrd = ImageCreateFromJpeg($img_path);
  13. $prz = ImageCreateTrueColor($new_width,$new_height);
  14.  
  15. ImageCopyResized($prz,$zrd,0,0,0,0,$new_width,$new_height,$img_width,$img_height);
  16.  
  17. ImageJpeg($prz, $dest_path, 80);
  18. ImageDestroy($zrd);
  19. ImageDestroy($prz);
  20.  
  21. ####
  22. $background = imagecreatefromjpeg($dest_path);
  23. $insert = imagecreatefrompng(&#092;"bg.png\");
  24.  
  25. imagecolortransparent($insert,imagecolorexact($insert,0,255,30));
  26.  
  27. $insert_x = imagesx($insert);
  28. $insert_y = imagesy($insert);
  29.  
  30. imagecopymerge($background,$insert,0,0,0,0,$insert_x,$insert_y,100);
  31. imagejpeg($background,&#092;"\",100);
  32. ####
  33. }
  34. }
  35.  
  36. function img_big($img_path,$dest_path) {
  37. if(file_exists($img_path)){
  38. $img_size = GetImageSize($img_path);
  39. $img_width = $img_size[0];
  40. $img_height = $img_size[1];
  41. $new_width = $max_width;
  42. $new_height = $max_height;
  43. $zrd = ImageCreateFromJpeg($img_path);
  44. $prz = ImageCreateTrueColor($img_width,$img_height);
  45.  
  46. ImageCopyResized($prz,$zrd,0,0,0,0,$img_width,$img_height,$img_width,$img_height);
  47.  
  48. ImageJpeg($prz, $dest_path, 80);
  49. ImageDestroy($zrd);
  50. ImageDestroy($prz);
  51. }
  52. }
  53.  
  54.  
  55. ##################
  56.  
  57. $file_path = $_FILES['file']['tmp_name'];
  58. $file_name = $_FILES['file']['name'];
  59. $file_size = $_FILES['file']['size'];
  60. $file_type = $_FILES['file']['type'];
  61. $file_error = $_FILES['file']['error'];
  62.  
  63. $error_msg=&#092;" \";
  64. if($file_error>0){
  65. switch($file_error)
  66. {
  67. case 1: $error_msg.=&#092;"- Za duży plik.<br>\";
  68. case 2: $error_msg.=&#092;"- Za duży plik.<br>\";
  69. case 3: $error_msg.=&#092;"- Plik niedoszedł w całości (spróbuj ponownie).<br>\";
  70. case 4: $error_msg.=&#092;"- Nie wysłałeś żadnego pliku.<br>\";
  71. }
  72. }else{
  73. if(strlen($file_name)>3){
  74. if($file_size>10){
  75. if($file_type==&#092;"image/pjpeg\" || $file_type==\"image/jpeg\"){
  76. if(is_uploaded_file($file_path)){
  77. $foto_id = '1';
  78.  
  79. $dest_path = &#092;"./upload/\". $foto_id . \".jpg\";
  80. $resized = img_big($file_path,$dest_path);
  81.  
  82. $dest_path = &#092;"upload/mini/\". $foto_id . \".jpg\";
  83. $resized = img_resize($file_path,$dest_path,80,80);
  84. }else{
  85. $error_msg.=&#092;"- Plik niezostał załadowany.<br>\";
  86. }
  87. }else{
  88. $error_msg.=&#092;"- Zły typ pliku (tylko JPEGi).<br>\";
  89. }
  90. }else{
  91. $error_msg.=&#092;"- Niewysłałeś żadnego pliku.<br>\";
  92. }
  93. }else{
  94. $error_msg.=&#092;"- Niewysłałeś żadnego pliku.<br>\";
  95. }
  96. }
  97. if(strlen($error_msg)>5){
  98. $msg = &#092;"<span class=gold_s>Wystąpiły błędy:</span><br>\" . $error_msg;
  99. }else{
  100. $msg = &#092;"Co by niebyło, Fotka dodana.\";
  101. }
  102. echo $msg;
  103.  
  104. ?>


Problem w tym, że to mi na stronie wyświetla pełno "krzaczków", a obrazka nie nakłada na miniaturkę.
walker
a wysyłasz headery do przeglądarki, bo w twoim skrypcie nie zauważyłem?
Najki
Owszem, nie miałem.
Dodałem na początku
  1. <?php
  2. header(&#092;"Content-Type: image/JPEG\");
  3. ?>

Ale teraz mam i tak:
Kod
Obrazek "http://najas.wsx.pl/~najki/php/upload_mini/upload.php" nie może zostać wyświetlony, ponieważ zawiera błędy.
e4you
  1. <?php
  2. Header(&#092;"Content-type: image/gif\");
  3.  $photoImage = ImageCreateFromJPEG(&#092;"http://www.netklinik.com/img_prg/$url_img\");
  4.  ImageAlphaBlending($photoImage, true); 
  5.  
  6.  $logoImage = ImageCreateFromPNG('logo.png'); 
  7.  $logoW = ImageSX($logoImage); 
  8.  $logoH = ImageSY($logoImage); 
  9.  
  10.  ImageCopy($photoImage, $logoImage, 0, 0, 0, 0, $logoW, $logoH); 
  11.  IMAGEPNG($photoImage);
  12.  
  13.  ImageDestroy($photoImage); 
  14.  ImageDestroy($logoImage); 
  15.  ?>
Najki
e4you: tyle mi wychodi z twojego skryptu:

e4you
Logo.png musi być przeźroczym obrazkiem

PS . Header .. na początku strony musi działać. Może nie masz Zainstalowanej biblioteki GD2 sprawdz to

w pliki wpisz <? phpinfo(); ?> i tam powinno pisać jak nie ma nic o GD2 to nie zadziała chyby nie wiem co..
Najki
1) logo.png ma przeźroczyste wszystko oprócz oczywiście żądanego napisu i ramki
2) GD2 mam zarówno u siebie, jak i na drugim serwerze, na którym to sprawdzałem
mls
Oczywiście, że podany skrypt nie działa, jeśli zwracany jest nagłówek image/gif a obrazek generowany jest przez imagepng" title="Zobacz w manualu PHP" target="_manual winksmiley.jpg
Najki
Obrazek "........./upload.php" nie może zostać wyświetlony, ponieważ zawiera błędy.

sad.gif
Bakus
Najki:
Najpierw na samym początku pliku wpisz:
error_reporting(E_ALL);
Później skomentuj wywołania funkcji header...
Zobacz co się pokaże w przedlądarce... ale chodzi nie o obrazek na stronie, ale sam, bez niczego innego (u Ciebie to będzie chyba: upload.php) i powiedz co zobaczyłeś...
e4you
zrob tak masz osobny plik ze skryptem do grafiki

a jeżeli chcesz wyśwetlić obrazek z wkomponowanmym innym obrazkiem wklej na stronie cos takiego.

  1. <img src='plik.php?nazwa=obraz.jpg' border='0'>


wtedy przerob troszke ten skrypt co Ci dałem wyżęj...

mls : mi działa, bez problemu
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.