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:
<?php /* */ // koncowa akcja, upload zdjecia, utworzenie miniatury jesli trzeba, utworzenie no ej grupy lub/i wpis do tabeli obrazow switch($_FILES['plik']['error']) { case 0: //echo 'Plik został poprawnie wczytany..<br />'; break; case 1: err('Rozmiar pliku przekracza wartość maksymalną wksazaną przez php.ini.'); break; case 2: err('Rozmiar pliku przekracza wartość maksymalną wksazaną przez MAX_FILE_SIZE.'); break; case 3: err('Została wysłana tylko część pliku.'); break; case 4: err('Żaden plik nie został wysłany.'); break; } switch($_FILES['plik']['type']) { case 'image/jpeg': case 'image/pjpeg': $imgType = 'jpg'; break; case 'image/png': case 'image/x-png': $imgType = 'png'; break; default: err('Można wysyłać tylko pliki typu jpg i png. ('.$_FILES['plik']['type'].')'); } // nalezy utworzyc nazwe dla obrazka, bedzie to ostatni numer pid powiekszony o je en + rozszezenie $sql = \"SELECT MAX(pid) FROM sfg_pictures\"; $result = $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } list($newpid) = $q->getrow($result); ++$newpid; // tworzymy obrazek by pobrac jego rozmiary, a takze jesli trzeba to do stworzenia miniatury switch($imgType) { case 'jpg': $img = imagecreatefromjpeg($SFG['picturedir'].$newpid.'.'.$imgType); break; case 'png': $img = imagecreatefrompng($SFG['picturedir'].$newpid.'.'.$imgType); break; } $imgW = imagesx($img); // szerokosc $imgH = imagesy($img); // wysokosc // jest okreslony gdesc, nie ma gid, czyli tworzymy nowa grupe, a takze miniature o tej grupy // jesli puste pole gdesc to gdesc otrzyma wpis o wartosci domyslnej ustalonwej pr ez tabele sfg_groups $_POST['cid'], $_SESSION['uid'], $imgType); } else { $sql = sprintf(\"INSERT INTO sfg_groups (gcid, guid, gtype, gdesc) VALUES (%d, %d, '%s', '%s')\", $_POST['cid'], $_SESSION['uid'], $imgType, $_POST['gdesc']); } $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } $sql = \"SELECT MAX(gid) FROM sfg_groups\"; $result = $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } list($newgid) = $q->getrow($result); // tworzymy miniature, miniatura ma nazwe zlozona z numeru grupy (gid) + rozszezenia $imgMiniature = imagecreatetruecolor($SFG['minipictureW'], $SFG['minipictureH']); imagecopyresampled($imgMiniature, $img, 0, 0, 0, 0, $SFG['minipictureW'], $SFG['minipictureH'], $imgW, $imgH); // zapisujemy miniature do pliku switch($imgType) { case 'jpg': imagejpeg($imgMiniature, $SFG['minipicturedir'].$newgid.'.'.$imgType); break; case 'png': imagepng($imgMiniature, $SFG['minipicturedir'].$newgid.'.'.$imgType); break; } imagedestroy($imgMiniature); } // przygotowania do stworzenia znaku wodnego $imgWM = imagecreatefromgif($SFG['watermark']); $imgWMW = imagesx($imgWM); $imgWMH = imagesy($imgWM); // utworz znak wodny w prawym dolnym rogu, magines 5 pikseli imagecopymerge($img, $imgWM, ($imgW - $imgWMW - 5), ($imgH - $imgWMH - 5), 0, 0, $imgWMW, $imgWMH, 40); // zapisz zmiany switch($imgType) { case 'jpg': imagejpeg($img, $SFG['picturedir'].$newpid.'.'.$imgType); break; case 'png': imagepng($img, $SFG['picturedir'].$newpid.'.'.$imgType); break; } imagedestroy($img); // ... gid gid gid $pgid = $newgid; } else { $pgid = $_POST['gid']; } // zapisujemy dane o nowym obrazku $sql = \"INSERT INTO sfg_pictures (pgid, psizex, psizey) VALUES ($pgid, $imgW, $imgH)\"; $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } } else { err('Plik nie może być skopiowany do wybranego katalogu.'); } } else { err('Możliwy atak podczas wysyłania pliku (LUL).'); } } // akcja srodkowa, wybieramy obrazek do uploadu oraz opis lub grupe obrazkowa echo '<form enctype=\"multipart/form-data\" action=\"'.$_SERVER['PHP_SELF'].'?p=addphoto\" method=\"post\">'; // nowy obrazek if($_POST['addgid']) { } // nowa rozdzielczosc else { $sql = sprintf(\"SELECT DISTINCT gid, gdesc FROM sfg_categories, sfg_groups WHERE gcid = %d AND guid = %d\", $_POST['cid'], $_SESSION['uid']); $result = $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } while(list($gid, $gdesc) = $q->getrow($result)) { } } } // pierwsza akcja, umozliwia wybranie kategorii oraz czy bedziemy dodawac nowa roz zielczosc, albo calkiem nowy obrazek else { $sql = \"SELECT cid, cname FROM sfg_categories\"; $result = $q->query($db, $sql); if($q->error()) { err('Query.', __LINE__); } while(list($cid, $cname) = $q->getrow($result)) { } // przy calkiem nowym obrazku nalezy dodac nowa grupe (gid) echo '<input type=\"radio\" name=\"addgid\" value=\"1\" checked=\"checked\" /> Całkiem nowy obrazek<br />'; echo '<input type=\"radio\" name=\"addgid\" value=\"0\" /> Nowa rozdzielczość do obrazka<br /><br />'; } ?>