Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Miniaturki PHP
Forum PHP.pl > Forum > PHP
northwest
Witam serdecznie,
Potrzebuję zrobić generator miniaturek w PHP. chciałbym skryptem nakładać zrobioną już miniaturkę na pusty kwadrat i łączysz w jeden obrazek. (chce uzyskać w galerii jednakową wielkość miniaturek)

Wie ktoś może jak to ugryźć?

Łukasz
blooregard
http://pl2.php.net/manual/pl/book.image.php

A próbowałeś już coś? Czy czekasz na gotowca?
Pokaż jakiś kod.
podgur
Kod
<?php
//Autor: Podgur

class ImageException extends Exception {
        public function __toString() {

            $ret = 'Powstal blad<br />
                    Komunikat: '.$this->getMessage().'<br />Plik: '.$this->getFile().'<br />Wiersz: '.$this->getLine();
            return $ret;
        }
    }
    
    class ImageClass
    {
        
        public $image;

        
        //konstruktor pobierający obrazek
        function __construct($url)
            {    
                //Sprawdzanie czy istnieje plik graficzny podany w konstruktorze
                if(!file_exists($url))
                    {
                            //W przypadku nie istnienia pliku
                            throw new ImageException('Podany plik nie istnieje');
                        }else{
                                
                                $this->image=$url;

                                }
                
                
                
                }

        public function resize($height,$width,$quality=60)
            {
                //Brak obsługi formatu png i bmp
                //Pobranie nazwy pliku
                $namefile = $this->image;
                //Wycięcie rozszerzenia
                $type = substr(strstr($namefile,'.'),1);
                //Tablica z formatami
                $rozszerzenia=array("jpg","jpeg","gif");
                
                if(!in_array($type,$rozszerzenia))
                {
                    throw new ImageException('Zly format pliku');
                    }
                //Nagłówek
                header("Content-Type: image/$type");
                
                switch($type){
                
                //Rozszerzenie *.jpg/jpeg
                case "jpg":
                $img = imagecreatefromjpeg($this->image);    
                break;
                
                //Rozszerzenie *.gif
                case "gif":
                $img = imagecreatefromgif($this->image);
                break;
                
                }
                
                $mini = imagecreatetruecolor($width,$height);
                
                //Stworzenie miniatury
                imagecopyresized($mini,$img,0,0,0,0,$width,$height,imagesx($img),imagesy($img));          
                
                
                switch($type){
                
                //Rozszerzenie *.jpg/jpeg
                case "jpg":
                imagejpeg($mini, "mini".rand(1,100)."_$namefile", 70);        
                break;
                
                //Rozszerzenie *.gif
                case "gif":
                imagegif($mini, "mini".rand(1,100)."_$namefile", 70);
                break;
                
                }
                
            }
    }

    try
        {
            //wywolanie obiektu klasy. Jako parametr dajemy scieżke, bądź nazwę pliku
            $photo = new ImageClass('a.jpg');
            
            //wywolanie metody resize()
            $photo->resize(1000,1000); //Przyjmuje 3 parametry: wysokosc,szerokosc i jakość miniatury
            }
    
    catch(ImageException $error)
        {
            echo $error;
            }
?>


Trochę sobie zmodyfikujesz i będzie dobrze.
northwest
a co zrobić żeby wyświetlić od razu tą mniaturkę - bez zapisu?
Wicepsik
Cytat(blooregard @ 2.04.2010, 19:18:56 ) *
http://pl2.php.net/manual/pl/book.image.php

A próbowałeś już coś? Czy czekasz na gotowca?
Pokaż jakiś kod.

blooregard dał ci odpowiedź
northwest
dzięki Padgur za kod - extra działa smile.gif

muszę jeszcze zrobić miniaturki które będą działały tak: jeśli zdjęcie jest pionowe, kwadratowe, etc. pojawiają się marginesy boczne; a jeśli dodane zostanie zdjęcie panoramiczne, to pojawią sie marginesy górny i dolny.

Macie może pomysł jak to zrobić?

chciałbym uzyskać taki efekt:

- chodzi o te marginesy :/
VGT
Jezeli odpowiada Ci skorzystanie z czyjejs biblioteki, zamiast surowy kod, to kiedys zrobilem sobie narzedzie m.in wlasnie do takich miniatur:
download: http://php.vgtworld.pl/html/download
przyklady: http://php.vgtworld.pl/class/vgtgd

ogolnie na stronie z przykladami drugi akapit w miniaturach, to rezultat, ktorego oczekujesz. Sposob uzyskania:

  1. $oImg = new VgtGd();
  2. $oImg->open('plik.jpg');
  3. $oImg->thumbnail(348, 244, new VgtGdColor(255, 255, 255));
  4.  
  5. $oImg->display();
  6. //lub
  7. $oImg->save('output.jpg');
northwest
super dzięki smile.gif

ps. znalazłem jeszcze taką funkcję:
Kod
function generateThumbnail($fname, $thwidth, $thheight, $fnname)     
   {

      $src = imagecreatefromjpeg($fname);
      list($imgwidth,$imgheight)=getimagesize($fname);
      $imgratio = $imgwidth / $imgheight;
      $thratio = $thwidth / $thheight;
      
    
      if ($imgratio < $thratio)
      {
         $newwidth = $thheight * $imgratio;
         $offsetx = ($thwidth - $newwidth) / 2;
         $newheight = $thheight;
         $offsety = 0;
      }
      else
      {
         $newwidth = $thwidth;
         $offsetx = 0;
         $newheight = $thwidth / $imgratio;    
         $offsety = ($thheight - $newheight) / 2;
      }
      
      $tmp=imagecreatetruecolor($thwidth,$thheight);
      
      imagecopyresampled($tmp,$src,$offsetx,$offsety,0,0,$newwidth,$newheight,$imgwidth,$imgheight);
      
      $p = strpos($_SERVER['REQUEST_URI'], 'index.php');

      $subpath = '/hmip/_thumb/';
      $tmpfilename = $_SERVER['DOCUMENT_ROOT'].$subpath.$fnname;
      
      imagejpeg($tmp,$tmpfilename,100);
      imagedestroy($src);
      imagedestroy($tmp);
      
      return $tmpfilename;
      
   }


ten kod też nadaje marginesy :-) tylko są czarne... da się je ustawić jakoś na białe?
VGT
Sprawdzic teraz nie mam jak, ale typuje, ze za:
  1. $tmp=imagecreatetruecolor($thwidth,$thheight);


dopisanie:

  1. imagefill($tmp, 0, 0, imagecolorallocate($tmp, 255, 255, 255));


powinno pomóc.
boryna91
w
northwest
VGT - działa, dzięki smile.gif))))))
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.