Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Joomla] Brak przekazywania wartości do funkcji?
Forum PHP.pl > Forum > Przedszkole
emajl22
Witam,

piszę skrypt nakładania znaku wodnego na uploadowane zdjęcia. Sam skrypt działa poprawnie, nakłada znak na obrazek, itd. Jednak teraz gdy przyszło mi to zintegrować z Joomlą, zaczęły się pojawiać problemy. Skrypt niby nie wyrzuca błędów, dodaje poprawnie obrazek, ale bez znaku wodnego.


Żeby było łatwiej i czytelniej, zrobiłem funkcję odpowiadającą za umieszczanie znaku wodnego. Oto ona:

  1. function watermarkImage($location, $type) {
  2.  
  3. //get file type
  4.  
  5. $image_type = $pic_upload['tmp_name'];
  6.  
  7. //load watermark image
  8.  
  9. $watermark = imagecreatefromgif("http://modbase.pl/logo.png");
  10. $watermark_height = imagesy($watermark);
  11. $watermark_width = imagesx($watermark);
  12.  
  13. $image = imagecreatetruecolor($watermark_width, $watermark_height);
  14.  
  15. var_dump( $image_type );
  16. var_dump ( $pic_upload['tmp_name']; );
  17. var_dump ( $type );
  18.  
  19. switch( $image_type ) {
  20.  
  21. case "image/png":
  22. $image = imagecreatefrompng($location);
  23. break;
  24. case "image/gif":
  25. $image = imagecreatefromgif($location);
  26. break;
  27. case "image/jpeg":
  28. $image = imagecreatefromjpeg($location);
  29. break;
  30. default:
  31. echo 'Zły format pliku!';
  32. }
  33.  
  34. //get image size
  35.  
  36. $size = getimagesize($location);
  37.  
  38. $x_pos = $size[0] - $watermark_width - 30;
  39. $y_pos = $size[1] - $watermark_height - 30;
  40.  
  41. //save
  42.  
  43. imagecopymerge($image, $watermark, $x_pos, $y_pos, 0, 0, $watermark_width, $watermark_height, 60);
  44. imagejpeg($image, $location);
  45.  
  46. imagedestroy($image);
  47. imagedestroy($watermark);
  48.  
  49. }


A teraz kod joomli odpowiadający za upload obrazków + wywołanie funkcji nakładającej znak wodny:

  1. $pic_types = 'gif|jpg|png';
  2. if($pic_upload['tmp_name']!=''){
  3. $pictype = strtolower(substr(strrchr($pic_upload['name'],"."),1));
  4. if (eregi( $pictype, $pic_types )) {
  5. // replace special chars in filename
  6. $pic_filename = checkFileName($pic_upload['name']);
  7. // rename the file with date
  8. $pic_date = date("Y-m-d");
  9. $zmienna1 = rand(1, 9999);
  10. $pic_filename = $zmienna1.'_'.$pic_date.'_www_ModBase_PL_'.$pic_filename;
  11. $target_path = JPATH_SITE.'/images/jdownloads/screenshots/'.$pic_filename;
  12. if(@move_uploaded_file($pic_upload['tmp_name'], $target_path)) {
  13. //watermark
  14. $image_uploaded = $pic_filename;
  15. $image_uploaded_temp = $pic_upload['tmp_name'];
  16. $type = $pic_upload['tmp_name'];
  17. watermarkImage("/images/jdownloads/screenshots/$pic_filename", $pic_upload['tmp_name']);
  18. // set chmod
  19. @chmod($target_path, 0655);
  20. // create thumb
  21. create_new_thumb($target_path);
  22. $thumbnail = basename($target_path);
  23. }
  24. }
  25. }


Nie mam pojęcia co może być przyczyną, dlatego zwracam się do Was z prośbą co robić.
Pozdrawiam.
proton
Dlaczego w funkcji którą stworzyłeś typ obrazka pobierasz w ten sposób:

Kod
$image_type = $pic_upload['tmp_name'];


Po to przyjmujesz w funkcji $type żeby to na nim operować. Dodatkowo nie wydaje mi się też aby $pic_upload['tmp_name']; zwracał ci typ pliku... Przypatrz się jak Joomla wyciąga typ pliku:

Kod
$pictype = strtolower(substr(strrchr($pic_upload['name'],"."),1));
emajl22
Skorzystałem z Twoich rad i teraz poprawnie zwraca mi format pliku, odpowiednio przechodzi przez switch(). Jednak nadal nie nakłada znaku wodnego na obrazek. Co może być przyczyną?
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.