Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Miniaturki PHP
northwest
post 2.04.2010, 17:53:22
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
blooregard
post 2.04.2010, 18:18:56
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




http://pl2.php.net/manual/pl/book.image.php

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


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
podgur
post 2.04.2010, 18:38:15
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
northwest
post 2.04.2010, 22:41:45
Post #4





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


a co zrobić żeby wyświetlić od razu tą mniaturkę - bez zapisu?
Go to the top of the page
+Quote Post
Wicepsik
post 2.04.2010, 22:42:33
Post #5





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


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ź


--------------------
Go to the top of the page
+Quote Post
northwest
post 13.04.2010, 20:13:56
Post #6





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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 :/

Ten post edytował northwest 13.04.2010, 20:15:36
Go to the top of the page
+Quote Post
VGT
post 14.04.2010, 11:06:55
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 9
Dołączył: 19.11.2004
Skąd: Iława

Ostrzeżenie: (0%)
-----


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');


Ten post edytował VGT 14.04.2010, 11:53:02
Go to the top of the page
+Quote Post
northwest
post 14.04.2010, 12:07:05
Post #8





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
VGT
post 14.04.2010, 12:20:45
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 9
Dołączył: 19.11.2004
Skąd: Iława

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
boryna91
post 14.04.2010, 20:00:51
Post #10





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 14.04.2010

Ostrzeżenie: (0%)
-----


w
Go to the top of the page
+Quote Post
northwest
post 14.04.2010, 20:49:20
Post #11





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


VGT - działa, dzięki smile.gif))))))
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 15:19