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:
<?php
/* */
// koncowa akcja, upload zdjecia, utworzenie miniatury jesli trzeba, utworzenie no
ej grupy lub/i wpis do tabeli obrazow
if(isset($_POST['cid']) && (isset($_POST['gid']) || isset($_POST['gdesc']))) { echo 'zapis obrazka (3/3).<br /><br />';
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;
if(move_uploaded_file($_FILES['plik']['tmp_name'], $SFG['picturedir'].$newpid.'.'.$imgType)) { // 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
if(isset($_POST['gdesc']) && !isset($_POST['gid'])) { // jesli puste pole gdesc to gdesc otrzyma wpis o wartosci domyslnej ustalonwej pr
ez tabele sfg_groups
if(empty($_POST['gdesc'])) { $sql = sprintf(\"INSERT INTO sfg_groups (gcid, guid, gtype) VALUES (%d, %d, '%s')\", $_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
if(isset($_POST['gdesc']) && !isset($_POST['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__);
}
echo 'Dodano, albo i nie.'; }
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
elseif(isset($_POST['cid']) && isset($_POST['addgid'])) { echo 'wybór obrazka (2/3).<br /><br />'; echo '<form enctype=\"multipart/form-data\" action=\"'.$_SERVER['PHP_SELF'].'?p=addphoto\" method=\"post\">';
// nowy obrazek
if($_POST['addgid']) {
echo '<input type=\"text\" name=\"gdesc\" value=\"\" /> Opis co przedstawia obrazek<br /><br />'; }
// 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__);
}
echo '<select name=\"gid\">';
while(list($gid, $gdesc) = $q->getrow($result)) {
echo '<option value=\"'.$gid.'\">'.$gdesc.'</option>'; }
echo '</select> Do której grupy nowa rozdzielczość<br /><br />'; }
echo '<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"1048576\" />'; echo '<input name=\"plik\" type=\"file\" /> Wybierz nowe zdjęcie<br /><br />'; echo '<input type=\"hidden\" name=\"cid\" value=\"'.$_POST['cid'].'\" />'; echo '<input type=\"submit\" value=\"Wyślij\" />'; }
// pierwsza akcja, umozliwia wybranie kategorii oraz czy bedziemy dodawac nowa roz
zielczosc, albo calkiem nowy obrazek
else {
echo 'wybór kategorii (1/3).<br /><br />';
$sql = \"SELECT cid, cname FROM sfg_categories\";
$result = $q->query($db, $sql);
if($q->error()) {
err('Query.', __LINE__);
}
echo '<form action=\"'.$_SERVER['PHP_SELF'].'?p=addphoto\" method=\"post\">'; echo '<select name=\"cid\">';
while(list($cid, $cname) = $q->getrow($result)) {
echo '<option value=\"'.$cid.'\">'.$cname.'</option>'; }
echo '</select> Kategoria<br /><br />'; // 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 />'; echo '<input type=\"submit\" value=\"Dalej\" />'; }
?>