• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zmniejszanie rozmiaru zdjęcia podczas uploadu

+1 głos
1,102 wizyt
pytanie zadane 10 sierpnia 2016 w PHP przez Peengie Początkujący (360 p.)

Witam serdecznie,

Staram się zrobić skrypt w którym użytkownik może zmieniać dane wizytówki na stronie. Bardzo prosta strona, kilka danych jak nazwa firmy email i nr tel oraz logo firmy. Udało mi się zrobić że po zalogowaniu użytkownik widzi zapisane dane w bazie i ma możliwość je edytować. Zdjęcie, wgrywa do folderu UPLOADS a ścieżkę do zdjęcia dopisuje do danego użytkownika w bazie. Wszystko ok. Problem polega na tym, że chciałbym ustawić aby zdjęcie które wgrywają użytkownicy zmieniało się do rozmiaru np 640px x 400 px. Ma to być tylko małe logo widoczne w wizytówce, a nie wielki obraz, który będzie mi zaśmiecał serwer.

Poniżej kod formularza:

 <?php if ($_SESSION['auth'] == TRUE) 
{
echo 'Zalogowany jest: '. $_SESSION['user'];
require_once('db.php');
$id_user=$_SESSION['user'];
$sql=mysql_query("select * from user where login='$id_user'");
$row = mysql_fetch_array($sql);
echo '<form enctype="multipart/form-data" method="POST" action="edytuj.php">';
echo '<b>Nazwa firmy:</b><br /> ';
echo '<input type="text" size=30 name="nazwa" disabled value="'.$row['nazwa'].'"><br />';
echo '<b>NIP:</b><br /> ';
echo '<input type="text" size=30 name="nip" disabled value="'.$row['nip'].'"><br />';
echo '<b>Kod pocztowy:</b><br /> ';
echo '<input type="text" size=30 name="kodp" value="'.$row['kodp'].'"><br />';
echo '<b>Miejscowość:</b><br /> ';
echo '<input type="text" size=30 name="miejscowosc" value="'.$row['miejscowosc'].'"><br />';
echo '<b>Adres:</b><br /> ';
echo '<input type="text" size=30 name="ulica" value="'.$row['ulica'].'"><br />';
echo '<b>Telefon:</b><br /> ';
echo '<input type="text" size=30 name="telefon" value="'.$row['telefon'].'"><br />';
echo '<b>E-mail:</b><br /> ';
echo '<input type="text" size=30 name="email" value="'.$row['email'].'"><br />';
echo '<b>Strona www:</b><br /> ';
echo '<input type="text" size=30 name="strona" value="'.$row['strona'].'"><br />';
echo '<b>Opis:</b><br /> ';
echo '<input type="text" size=30 name="opis" value="'.$row['opis'].'"><br />';
echo '<b>Logo:</b><br /> ';
echo '<input type="file" name="plik" id="plik"><br />';
echo '<img src="'. $row['logo'] . '"  /><br />'; 

echo '<input type="submit" value="Zmień" /> ';
echo '</form>';
echo ''.$row['nazwa'].'<br />';
echo '<a href="index.php?logout">Wyloguj się</a>';
}

a teraz kod z edytuj.php

 <?php if ($_SESSION['auth'] == TRUE) {

 	$id_user=$_SESSION['user'];
// odbieramy dane z formularza
$kodp = $_POST['kodp'];
$miejscowosc = $_POST['miejscowosc'];
$ulica = $_POST['ulica'];
$telefon = $_POST['telefon'];
$email = $_POST['email'];
$strona = $_POST['strona'];
$opis = $_POST['opis'];


    $connection = @mysql_connect($dbhost, $dblogin, $dbpass)
    or die('Brak połączenia z serwerem MySQL');
    $db = @mysql_select_db('adiseq_hf', $connection)
    or die('Nie mogę połączyć się z bazą danych');
    

$plik_tmp = $_FILES['plik']['tmp_name']; 
$plik_nazwa = $_FILES['plik']['name']; 
$plik_rozmiar = $_FILES['plik']['size']; 


    if(is_uploaded_file($plik_tmp)) { 
     move_uploaded_file($plik_tmp, "uploads/$id_user.$plik_nazwa"); 
    echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze 
    <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!"; 
    $ins1 = @mysql_query("UPDATE user SET logo='http://domena.pl/wizytowka/uploads/$id_user.$plik_nazwa' WHERE login='$id_user'");
} 
    
    $ins = @mysql_query("UPDATE user SET kodp='$kodp', miejscowosc='$miejscowosc', ulica='$ulica', telefon='$telefon' WHERE login='$id_user'"); 
    
    if($ins) 
	echo 'Dane zostały zmienione poprawnie <meta http-equiv="refresh" content="1; URL=hideus.php">';
	
    else echo "Błąd nie udało się zmienić danych";
    
    mysql_close($connection);
 }

elseif ($_SESSION['auth'] == TRUE) {

echo 'Treść dostępna tylko dla administratora<br />';
echo '<a href="index.php?logout">Wyloguj się</a>';
}

else {


echo '<meta http-equiv="refresh" content="1; URL=index.php">';
          echo '<p style="padding-top:10px;color:white";><strong>Próba nieautoryzowanego dostępu...</strong><br />trwa przenoszenie do formularza logowania</p>';
}

  ?>

Wiem, że w kodzie jest duży bałagan ale jestem początkującym i dużo rzeczy robiłem metodą prób i błędów także proszę o wyrozumiałość ;) Wiem, też że funkcja mysql_query jest już na wymarciu ale jak na razie mi wystarczy :)

Jak proponujecie rozwiązać sprawę z rozmiarem zdjęcia? Czy da się przeskalować zdjęcie do maksymalnego rozmiaru 640x400?

 

1
komentarz 10 sierpnia 2016 przez Peengie Początkujący (360 p.)

Próbowałem z funkcją:

function resize_image($file, $w, $h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($r-$w/$h)));
        } else {
            $height = ceil($height-($height*abs($r-$w/$h)));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h*$r;
            $newheight = $h;
        } else {
            $newheight = $w/$r;
            $newwidth = $w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $dst;
}

wywołanie

$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);

Niestety, nie wiem w którym miejscu i jak dokładnie zastosować w/w funkcję

2 odpowiedzi

0 głosów
odpowiedź 14 sierpnia 2016 przez PawełN Mądrala (5,340 p.)

Po move_uploaded_file() wywołaj

$img = resize_image("uploads/$id_user.$plik_nazwa", 640, 400);
imagejpeg($img, "uploads/$id_user.resized.$plik_nazwa", 75);

przy czym pamiętaj, że w zapytaniu SQL też masz nazwę pliku, do której należy dorzucić .resized.

0 głosów
odpowiedź 14 sierpnia 2016 przez WaxerStudio Bywalec (2,070 p.)
A czy nie lepiej na samym początku przekazać użytkownikowi informację o maksymalnym rozmiarze?

Podobne pytania

0 głosów
1 odpowiedź 363 wizyt
0 głosów
1 odpowiedź 450 wizyt
0 głosów
0 odpowiedzi 238 wizyt

93,778 zapytań

142,737 odpowiedzi

323,388 komentarzy

63,382 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...