[PHP]Funkcja pomniejszająca obrazki

Witam ponownie!

Mam taką funkcje do tworzenia miniaturek:

function thumb($file, $folder)

wg mnei są 2 sposoby z użyciem funkcji takich jak wyżej tylko z analogiczną zmianą wszędzie gdzie trzeba imagecreatefromjpeg->imagecreatefrompng->imagecreatefromgif - itp itd

Przede wszytskim musisz wyciągnąś rozszerzenie z $file i do nowej zmiennej wpisać typ pliku.

if( $rozszerzenie=='jpg' )

  $typ_pliku=='jpeg';

... // itd itp

Potem #1

if( $typ_pliku=='jpeg' )

  $img = imagecreatefromjpeg("gallery/$folder/$file"); 

... // analogicznie dalej

lub #2

eval('$img = imagecreatefrom'.$typ_pliku.'("gallery/$folder/$file");');

// i analogicznie niżej

Nie daje gwarancji że ruszy, nie sprawdzałem kodu. Masz podany algorytm, a napisz już sobie sam - przy okazji się nauczysz.

Tylko po co tworzyć zmienną $typ_pliku, skoro zmienna $rozszerzenie spełnia dokładnie tą samą funkcję?

Ostatecznie możesz przepisywać wszystkie obrazki na jpg, a później tworzyć miniatury.

a bezpieczniej by było uzyć takiej oto funkcji do identyfikacji typu pliku:

http://php.net/manual/en/function.getimagesize.php

a tak w ogole to unikam eval jak sie tylko da… już wole switch zrobić…

Ponieważ nie ma funkcji imagecreatefromjpg() jest tylko imagecreatefromjpeg()

Ja też unikam evala, ale jak jest to już można zastosować. Switch może dla niektórych i jest czytelniejsze, ale if jest na pewno szybsze i krótsze.

Funkcja o jakiej pisze @mrbungle byłaby najlepszą, tylko trzeba sprawdzić jak się zachowuje na obrazkach, bo już miałem różne problemy, chyba zależne od serwera. A w ogóle najwygodniejsze byłoby użycie exec(‘convert …’), tylko to też zależy od tego czy jest możliwość wykonywania poleceń basha w PHP oraz czy jest pakiet ImageMagick.

Działa zarówno na .jpg jak i .jpeg.

Miałem okazję to sprawdzić wiele razy. Zarówno w php4 jak i w php5.

imagejpeg();

imagejpg();

@leone - na php.net nie ma więc sam musiałem sprawdzić, nie ma tej drugiej …no można zawsze zrobić alias…

Pewnie, że nie ma :wink:

jpeg to praktycznie to samo co jpg (szczególnie dla php).

No wiec po co mi piszesz takie rzeczy:) próbuje wytłumaczyć dlaczego użyłem właśnie zmiennej typ pliku, żeby się na jpeg i jpg nie sypnął:)

Temat dosyć stary, ale jednak…

__

A imagecreatefromstring() ? I potem na końcu imagepng() - bo to nie ma znaczenia, jaki obrazek będzie wynikowy, a PNG są IMO najlepszej (z tej trójki) jakości…

ra-v , a nie można dać po prostu

if( $rozszerzenie=='jpeg' OR $rozszerzenie=='jpg')

?

Bo jeśli nie, to szczerze mówiąc, nie wiem już sam, co chcesz osiągnąć.

A ja i tak do obróbki zdjęć polecam ImageMagick - raz, że zżera znacznie mniej pamięci, dwa, że ma znacznie większe możliwości.

Ale bez sensu się rozdrabniać na te różne rozszerzenia, gdy można to dać na jedną funkcję!..

Kod (po przerobieniu tego z tematu wyżej):

function thumb($file, $folder)

    {

        $img = imagecreatefromstring(file_get_contents("gallery/$folder/$file"));

        $width = imagesx($img);

        $height = imagesy($img);

        if($width > 100 or $height > 100) {

            if($width > $height) {

                $ratio = $width/$height;

                $width_mini = 100;

                $height_mini = $width_mini/$ratio;

            }

            else if($height > $width) {

                $ratio = $height/$width;

                $height_mini = 100;

                $width_mini = $height_mini/$ratio;

            }

            $img_mini = imagecreatetruecolor($width_mini, $height_mini);

            imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);

            imagepng($img_mini, "gallery/$folder/thumbs/$file", 80);

            imagedestroy($img);

            imagedestroy($img_mini);

        }

    }

Może lekki OT, ale O WIELE ŁATWIEJ jest tak: html>

Teraz żadne zdjęcie się nie pomniejsza.

Marcin1147 , rób tak dalej :stuck_out_tongue: tu chodzi o wagę pliku, jak ktoś wrzuci 1280x1024 to wiesz ile by się to ładowało? I to tego obraz byłby zniekształcony.

bo dałem imagepng() , a z nim imagecreatetruecolor() niezbyt współpracuje… - spróbuj z imagejpeg() , to powinno zadziałać…

function thumb($file, $folder)

        {

            $img = imagecreatefromstring(file_get_contents("gallery/$folder/$file"));

            $width = imagesx($img);

            $height = imagesy($img);

            if($width > 100 or $height > 100) {

                if($width > $height) {

                    $ratio = $width/$height;

                    $width_mini = 100;

                    $height_mini = $width_mini/$ratio;

                }

                else if($height > $width) {

                    $ratio = $height/$width;

                    $height_mini = 100;

                    $width_mini = $height_mini/$ratio;

                }

                $img_mini = imagecreatetruecolor($width_mini, $height_mini);

                imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);

                imagejpeg($img_mini, "gallery/$folder/thumbs/$file", 80);

                imagedestroy($img);

                imagedestroy($img_mini);

            }

        }

Dzięki. :slight_smile: