Niektóre niewielkie części kodu zaczerpnąłem z funkcji którą ktoś już podawał na forum, uznałem że są dobrze przemyślane. Rozszerzyłem jednak nieco jej możliwości.
Przeznaczenie:
- tworzenie miniatur "w locie"
- ewentualne kadrowanie obrazów pionowych
- obracanie obrazka o podany kąt
- dodawanie logotypów
- zapisywanie zmienionych obrazków
<?php ######################################## ## ## ImageWorkshop v1.0 b ## Written by CzesLaW ## ## E-Mail: czesio@e-clubbing.net ## Website: http://e-clubbing.net ## ######################################## ## ## Jeśli masz jakieś sugestie odnośnie skryptu, ## napisz do mnie e-mail'a. ## ######################################## class obraz { /* */ /* Pola */ /* */ public $sciezka = ''; public $sciezka_logo = ''; private $wysokosc = 0; private $szerokosc = 0; private $wysokosc_logo = 0; private $szerokosc_logo = 0; private $typ_pliku = 0; private $typ_pliku_logo = 0; private $obraz = null; /* */ /* Metody */ /* */ /* Tworzenie miniatury obrazu */ public function utworz_miniature( $max_wysokosc = 0, $max_szerokosc = 0, $kadrowanie = 0 ) { if( $this -> obraz == null ) { list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka ); $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku ); } else { $obraz = $this -> obraz; } if( $obraz ) { return $this -> skalowanie( $obraz, $max_szerokosc, $max_wysokosc, $kadrowanie ); } else { return false; } } /* Dodawanie logotypu */ public function dodaj_logo( $sciezka_logo, $margines = 2, $przezroczystosc = 100 ) { $this -> sciezka_logo = $sciezka_logo; list( $this -> szerokosc_logo, $this -> wysokosc_logo, $this -> typ_pliku_logo ) = getimagesize( $this -> sciezka_logo ); if( $this -> obraz == null ) { list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka ); $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku ); } else { $obraz = $this -> obraz; } $logo = $this -> zaladuj_plik( $this -> sciezka_logo, $this -> typ_pliku_logo ); if( $obraz && $logo ) { return $this -> laczenie_plikow( $obraz, $logo, $margines, $przezroczystosc ); } else { return false; } } /* Obracanie obrazu o podany kąt */ public function obroc_obraz( $stopnie = 90 ) { $this -> sciezka_logo = $sciezka_logo; if( $this -> obraz == null ) { list( $this -> szerokosc, $this -> wysokosc, $this -> typ_pliku ) = getimagesize( $this -> sciezka ); $obraz = $this -> zaladuj_plik( $this -> sciezka, $this -> typ_pliku ); } else { $obraz = $this -> obraz; } if( $obraz ) { $this -> obraz = imagerotate( $obraz, $stopnie, 0 ); { $wysokosc = $this -> wysokosc; $this -> wysokosc = $this -> szerokosc; $this -> szerokosc = $wysokosc; } return true; } else { return false; } } /* Wczytywanie pliku */ private function zaladuj_plik( $sciezka, $typ_pliku ) { switch( $typ_pliku ) { case IMAGETYPE_GIF: $obraz = imagecreatefromgif( $sciezka ); break; case IMAGETYPE_JPEG: $obraz = imagecreatefromjpeg( $sciezka ); break; case IMAGETYPE_PNG: $obraz = imagecreatefrompng( $sciezka ); break; default: return false; break; } if ( !$obraz ) { return false; } else { return $obraz; } } /* Nakładanie logotypu na obraz */ private function laczenie_plikow( $obraz, $plik_nakladany, $margines, $przezroczystosc ) { $przesuniecie_x = $margines; $przesuniecie_y = $this -> wysokosc - $this -> wysokosc_logo - $margines; imagecolortransparent( $plik_nakladany, imagecolorat( $plik_nakladany, 0, 0 ) ); imagecopymerge( $obraz, $plik_nakladany, $przesuniecie_x, $przesuniecie_y, 0, 0, $this -> szerokosc_logo, $this -> wysokosc_logo, $przezroczystosc ); $this -> obraz = $obraz; return $true; } /* Tworzenie miniatury obrazu */ private function skalowanie( $obraz, $max_szerokosc, $max_wysokosc, $kadrowanie ) { if( ( $max_szerokosc > 1 && $max_wysokosc > 1 ) ) { if( $this -> szerokosc > $this -> wysokosc ) { $ratio = $max_szerokosc / $this -> szerokosc; $nowa_szerokosc = $max_szerokosc; $nowa_wysokosc = $ratio * $this -> wysokosc; } else { if( !$kadrowanie ) { $ratio = $max_wysokosc / $this -> wysokosc; $nowa_szerokosc = $ratio * $this -> szerokosc; $nowa_wysokosc = $max_wysokosc; } else { $ratio = $max_wysokosc / $this -> wysokosc; $nowa_szerokosc = $max_wysokosc; $nowa_wysokosc = $ratio * $this -> szerokosc; $przesuniecie = $this -> wysokosc / 5; $this -> wysokosc = $this -> wysokosc - ( $this -> szerokosc / 2 ); } } } else { $nowa_szerokosc = $this -> szerokosc; $nowa_wysokosc = $this -> wysokosc; } $miniatura = imagecreatetruecolor( $nowa_szerokosc, $nowa_wysokosc ); imagedestroy( $obraz ); $this -> obraz = $miniatura; $this -> wysokosc = $nowa_wysokosc; $this -> szerokosc = $nowa_szerokosc; return true; } /* Wyświetlanie obrazu \"w locie\" */ public function wyswietl_obraz( $jakosc = 100 ) { if( $this -> obraz !== null ) { switch( $this -> typ_pliku ) { case IMAGETYPE_GIF: return imagegif( $this -> obraz ); break; case IMAGETYPE_JPEG: return imagejpeg( $this -> obraz, '', $jakosc ); break; case IMAGETYPE_PNG: return imagepng( $this -> obraz ); break; default: return false; break; } } else { } } /* Zapisywanie obrazu do pliku */ public function zapisz_obraz( $sciezka = '', $jakosc = 100 ) { { } switch( $this -> typ_pliku ) { case IMAGETYPE_GIF: break; case IMAGETYPE_JPEG: break; case IMAGETYPE_PNG: break; default: return false; break; } } } ?>