Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Niechciana kompresja po wgraniu na serwer, Problem z tapetami.
d12
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 25.08.2003
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z (autorskim) skryptem tapet. Mianowice po wgraniu na serwer fotka jest poddawana kompresji. Przykładowo fotka zajmowałą 472 KB,a jak wgrałem przez skrypt na serwer zajmuje 71,5 KB (znaczne pogorszenie jakości).

Poniżej prezentuję plik addphoto.php:

  1. <?php
  2.  
  3. if(!defined('SFG')) return;
  4.  
  5. echo 'Dodaj obrazek - ';
  6.  
  7. /*  */
  8.  
  9. // koncowa akcja, upload zdjecia, utworzenie miniatury jesli trzeba, utworzenie no
  10. ej grupy lub/i wpis do tabeli obrazow
  11. if(isset($_POST['cid']) && (isset($_POST['gid']) || isset($_POST['gdesc']))) {
  12. echo 'zapis obrazka (3/3).<br /><br />';
  13.  
  14.     switch($_FILES['plik']['error']) {
  15.         case 0:
  16.             //echo 'Plik został poprawnie wczytany..<br />';
  17.             break;
  18.         case 1:
  19.             err('Rozmiar pliku przekracza wartość maksymalną wksazaną przez php.ini.');
  20.             break;
  21.         case 2:
  22.             err('Rozmiar pliku przekracza wartość maksymalną wksazaną przez MAX_FILE_SIZE.');
  23.             break;
  24.         case 3:
  25.             err('Została wysłana tylko część pliku.');
  26.             break;
  27.         case 4:
  28.             err('Żaden plik nie został wysłany.');
  29.             break;
  30.     }
  31.  
  32.     switch($_FILES['plik']['type']) {
  33.         case 'image/jpeg':
  34.         case 'image/pjpeg':
  35.             $imgType = 'jpg';
  36.             break;
  37.         case 'image/png':
  38.         case 'image/x-png':        
  39.             $imgType = 'png';
  40.             break;
  41.         default:
  42.             err('Można wysyłać tylko pliki typu jpg i png. ('.$_FILES['plik']['type'].')');
  43.     }
  44.  
  45.     if(is_uploaded_file($_FILES['plik']['tmp_name'])) {
  46.         // nalezy utworzyc nazwe dla obrazka, bedzie to ostatni numer pid powiekszony o je
  47. en + rozszezenie
  48.         $sql = &#092;"SELECT MAX(pid) FROM sfg_pictures\";
  49.         $result = $q->query($db, $sql);
  50.         if($q->error()) {
  51.          err('Query.', __LINE__);
  52.         }
  53.         list($newpid) = $q->getrow($result);
  54.         ++$newpid;
  55.  
  56.         if(move_uploaded_file($_FILES['plik']['tmp_name'], $SFG['picturedir'].$newpid.'.'.$imgType)) {
  57.             // tworzymy obrazek by pobrac jego rozmiary, a takze jesli trzeba to do stworzenia
  58. miniatury
  59.             switch($imgType) {
  60.                 case 'jpg':
  61.                     $img = imagecreatefromjpeg($SFG['picturedir'].$newpid.'.'.$imgType);
  62.                     break;
  63.                 case 'png':
  64.                     $img = imagecreatefrompng($SFG['picturedir'].$newpid.'.'.$imgType);
  65.                     break;
  66.             }
  67.             
  68.             $imgW = imagesx($img); // szerokosc
  69.             $imgH = imagesy($img); // wysokosc
  70.  
  71.    // jest okreslony gdesc, nie ma gid, czyli tworzymy nowa grupe, a takze miniature 
  72. o tej grupy
  73.             if(isset($_POST['gdesc']) && !isset($_POST['gid'])) {
  74.              // jesli puste pole gdesc to gdesc otrzyma wpis o wartosci domyslnej ustalonwej pr
  75. ez tabele sfg_groups
  76.              if(empty($_POST['gdesc'])) {
  77.                     $sql = sprintf(&#092;"INSERT INTO sfg_groups (gcid, guid, gtype) VALUES (%d, %d, '%s')\",
  78.                      $_POST['cid'], $_SESSION['uid'], $imgType); 
  79.                 }
  80.                 else {
  81.                  $sql = sprintf(&#092;"INSERT INTO sfg_groups (gcid, guid, gtype, gdesc) VALUES (%d, %d, '%s', '%s')\",
  82.                   $_POST['cid'], $_SESSION['uid'], $imgType, $_POST['gdesc']);
  83.                 }
  84.                 $q->query($db, $sql);
  85.                 if($q->error()) {
  86.            err('Query.', __LINE__);
  87.           }
  88.           
  89.           $sql = &#092;"SELECT MAX(gid) FROM sfg_groups\";
  90.                 $result = $q->query($db, $sql);
  91.                 if($q->error()) {
  92.            err('Query.', __LINE__);
  93.           }          
  94.     list($newgid) = $q->getrow($result);
  95.                  
  96.              // tworzymy miniature, miniatura ma nazwe zlozona z numeru grupy (gid) + rozszezenia
  97.                 $imgMiniature = imagecreatetruecolor($SFG['minipictureW'], $SFG['minipictureH']);
  98.                 imagecopyresampled($imgMiniature, $img, 0, 0, 0, 0, $SFG['minipictureW'], $SFG['minipictureH'], $imgW, $imgH);
  99.  
  100.                 // zapisujemy miniature do pliku
  101.                 switch($imgType) {
  102.                     case 'jpg':
  103.                         imagejpeg($imgMiniature, $SFG['minipicturedir'].$newgid.'.'.$imgType);
  104.                         break;
  105.                     case 'png':
  106.                         imagepng($imgMiniature, $SFG['minipicturedir'].$newgid.'.'.$imgType);
  107.                         break;
  108.                 }
  109.                 imagedestroy($imgMiniature);
  110.             }
  111.             
  112.             // przygotowania do stworzenia znaku wodnego
  113.             $imgWM = imagecreatefromgif($SFG['watermark']);
  114.             $imgWMW = imagesx($imgWM);
  115.             $imgWMH = imagesy($imgWM);
  116.             
  117.    // utworz znak wodny w prawym dolnym rogu, magines 5 pikseli
  118.             imagecopymerge($img, $imgWM, ($imgW - $imgWMW - 5), ($imgH - $imgWMH - 5), 0, 0, $imgWMW, $imgWMH, 40);
  119.             
  120.    // zapisz zmiany
  121.             switch($imgType) {
  122.             case 'jpg':
  123.                 imagejpeg($img, $SFG['picturedir'].$newpid.'.'.$imgType);
  124.                 break;
  125.             case 'png':
  126.                 imagepng($img, $SFG['picturedir'].$newpid.'.'.$imgType);
  127.                 break;
  128.             }
  129.             imagedestroy($img);
  130.  
  131.             // ... gid gid gid
  132.             if(isset($_POST['gdesc']) && !isset($_POST['gid'])) {
  133.              $pgid = $newgid;
  134.             }
  135.             else {
  136.              $pgid = $_POST['gid'];
  137.             }
  138.  
  139.             // zapisujemy dane o nowym obrazku
  140.             $sql = &#092;"INSERT INTO sfg_pictures (pgid, psizex, psizey) VALUES ($pgid, $imgW, $imgH)\";
  141.             $q->query($db, $sql);
  142.             if($q->error()) {
  143.           err('Query.', __LINE__);
  144.       }
  145.  
  146.             echo 'Dodano, albo i nie.';
  147.         }
  148.         else {
  149.             err('Plik nie może być skopiowany do wybranego katalogu.');
  150.         }
  151.     }
  152.     else {
  153.         err('Możliwy atak podczas wysyłania pliku (LUL).');
  154.     }
  155. }
  156. // akcja srodkowa, wybieramy obrazek do uploadu oraz opis lub grupe obrazkowa
  157. elseif(isset($_POST['cid']) && isset($_POST['addgid'])) {
  158. echo 'wybór obrazka (2/3).<br /><br />';
  159.     echo '<form enctype=\"multipart/form-data\" action=\"'.$_SERVER['PHP_SELF'].'?p=addphoto\" method=\"post\">';
  160.  
  161.     // nowy obrazek
  162.     if($_POST['addgid']) {
  163.             echo '<input type=\"text\" name=\"gdesc\" value=\"\" /> Opis co przedstawia obrazek<br /><br />';
  164.     }
  165.     // nowa rozdzielczosc
  166.     else {
  167.         $sql = sprintf(&#092;"SELECT DISTINCT gid, gdesc FROM sfg_categories, sfg_groups WHERE gcid = %d AND guid = %d\",
  168.          $_POST['cid'], $_SESSION['uid']);
  169.         $result = $q->query($db, $sql);
  170.         if($q->error()) {
  171.          err('Query.', __LINE__);
  172.         }
  173.  
  174.         echo '<select name=\"gid\">';
  175.  
  176.         while(list($gid, $gdesc) = $q->getrow($result)) {
  177.             echo '<option value=\"'.$gid.'\">'.$gdesc.'</option>';
  178.         }
  179.         echo '</select> Do której grupy nowa rozdzielczość<br /><br />';
  180.     }
  181.     echo '<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1048576\" />';
  182.     echo '<input name=\"plik\" type=\"file\" /> Wybierz nowe zdjęcie<br /><br />';
  183.     echo '<input type=\"hidden\" name=\"cid\" value=\"'.$_POST['cid'].'\" />';
  184.     echo '<input type=\"submit\" value=\"Wyślij\" />';
  185.     echo '</form>';
  186. }
  187. // pierwsza akcja, umozliwia wybranie kategorii oraz czy bedziemy dodawac nowa roz
  188. zielczosc, albo calkiem nowy obrazek
  189. else {
  190. echo 'wybór kategorii (1/3).<br /><br />';
  191.  
  192.     $sql = &#092;"SELECT cid, cname FROM sfg_categories\";
  193.     $result = $q->query($db, $sql);
  194.     if($q->error()) {
  195.         err('Query.', __LINE__);
  196.     }
  197.  
  198.     echo '<form action=\"'.$_SERVER['PHP_SELF'].'?p=addphoto\" method=\"post\">';
  199.     echo '<select name=\"cid\">';
  200.     
  201.     while(list($cid, $cname) = $q->getrow($result)) {
  202.         echo '<option value=\"'.$cid.'\">'.$cname.'</option>';
  203.     }
  204.     echo '</select> Kategoria<br /><br />';
  205.     // przy calkiem nowym obrazku nalezy dodac nowa grupe (gid)    
  206.     echo '<input type=\"radio\" name=\"addgid\" value=\"1\" checked=\"checked\" /> Całkiem nowy obrazek<br />';
  207.     echo '<input type=\"radio\" name=\"addgid\" value=\"0\" /> Nowa rozdzielczość do obrazka<br /><br />';
  208.     echo '<input type=\"submit\" value=\"Dalej\" />';
  209.     echo '</form>';
  210. }
  211.  
  212. ?>


--------------------
Pozdro D12
GG: 5455157; Email: redakcja@motoweb.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----



Zapoznaj się z funkcją imagejpeg" title="Zobacz w manualu PHP" target="_manual. Nie podałeś parametru jakość i została przyjęta domyślna wartość 75.


--------------------
Go to the top of the page
+Quote Post
d12
post
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 25.08.2003
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


A czy mógłbyś mi dołożyć ten tag, do addphoto.php, ponieważ ja nie potrafię?


--------------------
Pozdro D12
GG: 5455157; Email: redakcja@motoweb.pl
Go to the top of the page
+Quote Post
crash
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


O tagu było odnośnie forum. To już poprawiłem sam. Ty masz poczytać na temat funkcji imagejpeg() w manualu i wprowadzić ewentualną zmianę w swoim kodzie w linii 134 na tym listingu.


--------------------
Go to the top of the page
+Quote Post
tiraeth
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


do funkcji imagejpeg dodaj trzeci parametr, w którym wpiszesz procent jakości tworzonego JPGa. Domyślnie jest 75 a jak ustawisz na 100, jakość niepogorszy się.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 23:02