Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skalowanie obrazka i jego zapis
Forum PHP.pl > Forum > PHP
wgrzelak
No więc mój problem polega na tym że mam upload obrazka i potrzebuje żeby obrazek się skalował i zapisywał proporcjonalnie i żeby była funkcja utraty jakosci.

  1. <?php
  2. $userfile = $_FILES["userfile"];
  3. $uploadfile = $GLOBALS["uploaddir"] . "".$hash.".jpg";
  4. $image_types = Array ("image/bmp","image/jpeg", "image/pjpeg","image/gif","image/x-png");
  5. $file_name = "".$hash.".jpg";
  6. $file_size = $_FILES["userfile"]["size"];
  7. $file_type = $_FILES["userfile"]["type"];
  8. $file_size = makesize1($file_size);
  9.  
  10. if (isset($_FILES["userfile"]))
  11. {
  12. if (!$file_name)
  13. {
  14. // do nothing...
  15. }
  16. else
  17. {
  18. if ($file_size > $GLOBALS["file_limit"])
  19. {
  20. err_msg (ERROR,FILE_UPLOAD_TO_BIG."$file_limit KB, ".IMAGE_WAS." $file_size");
  21. blocksx_end();
  22. stdfoot();
  23. }
  24. if (in_array (strtolower ($file_type), $image_types, TRUE))
  25. {
  26. if (@move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
  27. {
  28. echo"<center>Upload obrazka pomyślny</center><br />";
  29. }
  30. else
  31. {
  32. err_msg (ERROR,MOVE_IMAGE_TO.$GLOBALS["uploaddir"].$file_name.CHECK_FOLDERS_PERM);
  33. blocksx_end();
  34. stdfoot();
  35. }
  36. }
  37. else
  38. {
  39. err_msg (ERROR,ILEGAL_UPLOAD);
  40. blocksx_end();
  41. stdfoot();
  42. }
  43. }
  44. }
  45. ?>
czachor
imagecopyresampled(), od razu są przykłady
wgrzelak
a mógł by ktoś dać troche więcej niz link bo ja to wcześniej czytałem i nic nie pomogło bardzo bym prosił o gotowca
dadexix
  1. <?php
  2. $filename = //nazwa pliku
  3. $nowy_ser = //szerkosc tego co ma wyjsc docelowo
  4. $nowy_wys = //wysokosc docelowego
  5. $rozmiar = getimagesize('obraz.jpg');
  6. $monoznik = $rozmiar[0]/$nowy_szer;
  7. $monoznik2 = $rozmiar[1]/$nowy_wys;
  8. if($mnoznik2 == $mnoznik){
  9. $newwidth = $rozmiar['0']*$mnoznik;
  10. $newheight = $rozmiar['1']*$mnoznik2;
  11. $source = imagecreatefromjpeg($filename);
  12. imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $rozmiar[0], $rozmiar[1]);
  13.  
  14. }
  15. ?>


tak to na moje oko:P pewnie nie działa..

robi nowy obrazek z zachowaniem proporcji i ten obrazek nie jest większy niż ustalona wysokosc/szerokość
wgrzelak
to niestety nie działa...
czachor
Przecież w linku do manuala, który podałem, jest mnóstwo przykładów. Zajrzyj, wybierz odpowiedni i dostosuj do swojego skryptu.
wgrzelak
ale mi nie wychodzi naprawde sobie nie poradze blinksmiley.gif wstydnis.gif
czachor
No to napisz, co Ci nie wychodzi smile.gif Skrypt generuje miniaturkę i masz ją tylko zapisać do pliku. W którym miejscu nie radzisz sobie?
wgrzelak
ogólnie czy to tak cięszko wkleić jak ma to wyglądać sadsmiley02.gif po za tym chcę mieć porządnie zrobione dry.gif
dadexix
Cytat
to niestety nie działa...
no teraz patrze... nie może dzialać;p(w jendnym miejscu nazwie zmiennej brak literki "z") sprawdzić tego jak nie mam ale literówkę widzę;] nie możesz zawsze sądzić że ten kto daje przykład jest nie omylny... do tego musisz doać jeszcze pare rzeczy(np. imagejpg" title="Zobacz w manualu PHP" target="_manual) i sprawdzić czy nie ma blędów
wgrzelak
i ja nadal nie wiem co mam zrobic dostal.gif
Nattfarinn
Dane wejściowe:
Kod
$imageFile - plik wejściowy (np. $_FILES["plik"]["tmp_name"])
$maxImageWidth - maksymalna szerokość obrazka wyjściowego (np. '100')
$maxImageHeight - maksymalna wysokość obrazka wyjściowego (np. '80')
$newImageName - nazwa pliku wyjściowego (bez rozszerzenia .jpg) (np. "miniatura")
$imageQuality - jakość obrazka wyjściowego (zakres 1..100) (np. '80')


  1. <?php
  2.  
  3. $imageData = imagecreatefromjpeg($imageFile);
  4. list($imageWidth, $imageHeight) = getimagesize($imageFile);
  5. $imageRatioWidth = $imageWidth > $maxImageWidth ? $maxImageWidth / $imageWidth : 1;
  6. $imageRatioHeight = $imageHeight * $imageRatioWidth > $maxImageHeight ? $maxInameHeight / $imageHeight : 1;
  7. $newImageSizeWidth = floor($imageWidth * $imageRatioWidth * $imageRatioHeight);
  8. $newImageSizeHeight = floor($imageHeight * $imageRatioWidth * $imageRatioHeight);
  9. $newImage = imagecreatetruecolor($newImageSizeWidth, $newImageSizeHeight);
  10. imagecopyresampled($newImage, $imageData, 0, 0, 0, 0, $newImageSizeWidth, $newImageSizeHeight, $imageWidth, $imageHeight);
  11. $savePath = $newImageName.".jpg";
  12. imagejpeg($newImage, $savePath, $imageQuality);
  13.  
  14. ?>


Maksymalny rozmiar docelowy ($maxImageWidth i $maxImageHeight) to właściwie rozmiar pliku który chcesz uzyskać po zmianie rozmiaru z tą tylko różnicą, że jeśli grafika wejściowa będzie mniejsza niż wyjściowa, nie ulegnie zmianie (zapobiega rozciąganiu małych obrazków).
andrew1985
Tu masz moją funkcję która to robi:
Opis paramterów:
$img_name = nazwa pliku (np. obraz.jpg)
$photo_dir = katalog z plikiem
$thumb_dir = katalog so którego zostanie zapisany przekonwertowany plik
$max_width = maksymalna szerokosc
$max_height = maksymalna wysokosc
$proportion=false = czy ma zachowac proporcje czy nie - w twoim przypadku true

W przypadku prawidłowego skonwertowania obrazka zwraca ściezke do niego.

Kod
function ImageConvert($img_name,$photo_dir,$thumb_dir, $max_width,$max_height,$proportion=false){
    $img_path = $photo_dir.$img_name;
    $thumb_path = $thumb_dir.$img_name;
    
    if(file_exists($img_path)) {
        $img_attr = getimagesize($img_path);
        
        if($proportion){
            if($img_attr[0]>$img_attr[1])
                $scale = $img_attr[0] / $max_width;
            else $scale = $img_attr[1] / $max_height;
            
            $w = floor($img_attr[0]/$scale);
            $h = floor($img_attr[1]/$scale);
        }else{
            $w = $max_width;
            $h = $max_height;
        }
        
        $thumb = imagecreatetruecolor($w,$h);
        
        $result = @imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);        
        if($result)
            @imagejpeg($thumb,$thumb_path,85);

        if($result) return $thumb_path; else return $result;
    } else return -1;
}
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.