Proszę o ocenę skryptu oraz sugestie co do ewentualnych poprawek lub rozszerzenia jego mozliwości.
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
Klasa podzielona jest na metody tak, aby można było używać jedynie wybranych jej możliwości.
<?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 );
imagecopyresampled
( $miniatura, $obraz, 0
, 0
, 0
, ( $kadrowanie ) ?
$przesuniecie : 0
, round( $nowa_szerokosc ), round( $nowa_wysokosc ), $this -> szerokosc
, $this -> 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:
header( 'Content-type: image/gif' ); return imagegif( $this -> obraz );
break;
case IMAGETYPE_JPEG:
header( 'Content-type: image/jpeg' ); return imagejpeg( $this -> obraz, '', $jakosc );
break;
case IMAGETYPE_PNG:
header( 'Content-type: image/png' ); return imagepng( $this -> obraz );
break;
default:
return false;
break;
}
}
else
{
}
}
/* Zapisywanie obrazu do pliku */
public function zapisz_obraz( $sciezka = '', $jakosc = 100 )
{
{
$rozszerzenie = explode( '.', $sciezka, 3
);
}
switch( $this -> typ_pliku )
{
case IMAGETYPE_GIF:
header( 'Content-type: image/gif' ); return imagegif
( $this -> obraz
, ( !empty( $sciezka ) )?
$sciezka .'gif': $this -> sciezka
); break;
case IMAGETYPE_JPEG:
header( 'Content-type: image/jpeg' ); return imagejpeg
( $this -> obraz
, ( !empty( $sciezka ) )?
$sciezka .'jpg': $this -> sciezka
); break;
case IMAGETYPE_PNG:
header( 'Content-type: image/png' ); return imagepng
( $this -> obraz
, ( !empty( $sciezka ) )?
$sciezka .'png': $this -> sciezka
); break;
default:
return false;
break;
}
}
}
?>
Ten post edytował CzesLaW'ek 9.05.2005, 10:08:58