Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]move_uploaded_file
Forum PHP.pl > Forum > PHP
Mayger
Mam takie pytanie.. gdyż mam funkcje do tworzenia znaku wodnego na miniaturkach wyglądającą tak:
  1. <?php
  2. function watermark($sourcefile, $watermarkfile) {
  3.  
  4.  #
  5.  # $sourcefile = Filename of the picture to be watermarked.
  6.  # $watermarkfile = Filename of the 24-bit PNG watermark file.
  7.  #
  8.  
  9.  //Get the resource ids of the pictures
  10.  $watermarkfile_id = imagecreatefrompng($watermarkfile);
  11.  
  12.  imageAlphaBlending($watermarkfile_id, false);
  13.  imageSaveAlpha($watermarkfile_id, true);
  14.  
  15.  $fileType = strtolower(substr($sourcefile, strlen($sourcefile)-3));
  16.  
  17.  switch($fileType) {
  18.  case('gif'):
  19.  $sourcefile_id = imagecreatefromgif($sourcefile);
  20.  break;
  21.  
  22.  case('png'):
  23.  $sourcefile_id = imagecreatefrompng($sourcefile);
  24.  break;
  25.  
  26.  default:
  27.  $sourcefile_id = imagecreatefromjpeg($sourcefile);
  28.  }
  29.  
  30.  //Get the sizes of both pix 
  31. $sourcefile_width=imageSX($sourcefile_id);
  32. $sourcefile_height=imageSY($sourcefile_id);
  33. $watermarkfile_width=imageSX($watermarkfile_id);
  34. $watermarkfile_height=imageSY($watermarkfile_id);
  35.  
  36.  $dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 );
  37.  $dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 );
  38.  
  39.  // if a gif, we have to upsample it to a truecolor image
  40.  if($fileType == 'gif') {
  41.  // create an empty truecolor container
  42.  $tempimage = imagecreatetruecolor($sourcefile_width,
  43.  $sourcefile_height);
  44.  
  45.  // copy the 8-bit gif into the truecolor image
  46.  imagecopy($tempimage, $sourcefile_id, 0, 0, 0, 0,
  47.  $sourcefile_width, $sourcefile_height);
  48.  
  49.  // copy the source_id int
  50.  $sourcefile_id = $tempimage;
  51.  }
  52.  
  53.  imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0,
  54.  $watermarkfile_width, $watermarkfile_height);
  55.  
  56.  //Create a jpeg out of the modified picture
  57.  switch($fileType) {
  58.  
  59.  // remember we don't need gif any more, so we use only png or jpeg.
  60.  // See the upsaple code immediately above to see how we handle gifs
  61.  case('png'):
  62.  header("Content-type: image/png");
  63.  imagepng ($sourcefile_id);
  64.  break;
  65.  
  66.  default:
  67.  header("Content-type: image/jpg");
  68.  imagejpeg ($sourcefile_id);
  69.  }  
  70.  
  71.  imagedestroy($sourcefile_id);
  72.  imagedestroy($watermarkfile_id);
  73.  
  74. }
  75. ?>

I teraz pytanie, co zrobić aby można było to uploadować, bo jeśli napisze tak:
  1. <?php
  2. $screen = watermark( $_FILES['plik']['tmp_name'] , 'watermark.png' );
  3.  move_uploaded_file( $screen , 'blebleble.jpg');
  4. ?>

To miniaturka się nie ulpoaduje na serwer, a napewno nie jest to wina uploadu, ponieważ kiedy zrobię kod bez robienia znaku wodnego czyli:
  1. <?php
  2. move_uploaded_file( $_FILES['plik']['tmp_name'] , 'blebleble.jpg');
  3. ?>

To miniaturka wysyła się normalnie, więc co dopisać żeby można było wysyłać tą miniaturkę ze znakiem wodnym. Za pomoc z góry dziękuje.
siemakuba
move_uploaded_file" title="Zobacz w manualu php" target="_manual
pierwszy parametr - ścieżka do pliku, który został uploadowany na serwer
drugi paramter - ścieżka do pliku docelowego, w jakim ma zostac zapisany plik uploadowany

teraz zastanów sie, czy twoja funkcja watermark() zwraca ścieżkę do uploadowanego pliku? Nie, nie zwraca.

Sugestia: najpierw przenieś plik do katalogu docelowego, potem wykonaj na nim robienie znaku wodnego.

pozdr.
Mayger
A dokładniej co zmienić winksmiley.jpg?
siemakuba
Spróbuj tak:

  1. <?php
  2. $plik_docelowy = 'sciezka/do/pliku.jpg';
  3. $plik_ze_znakiem_wodnym = 'sciezka/do/pliku/ze/znakiem.png';
  4.  
  5. move_uploaded_file( $_FILES['plik']['tmp_name'] , $plik_docelowy);
  6. watermark($plik_docelowy, $plik_ze_znakiem_wodnym);
  7. ?>


pozdr.
Mayger
Nie działa. Według mnie dlatego ze to tylko piszemy watermark() a musimy to chyba jeszcze wysłać na serv tongue.gif
legorek
Nie wiem, czy zwróciłeś uwagę ale masz w funkcji watermark():
  1. <?php
  2. imagejpeg ($sourcefile_id);
  3. ?>

Czyli nie zapisujesz (na serwerze) nigdzie tego pliku, ale wysyłasz go do użytkownika.
jeśli chcesz zapisac obrazek ze znakiem wodnym musisz zrobić tak:
  1. <?php
  2. imagejpeg ($sourcefile_id, "/sciezka/plik.jpg");
  3. ?>


Analogicznie dla PNG.
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.