Classe para manipulação de imagem
/**
* Classe para manipulacao de imagem
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
*
*/
class Hufersil_Image {
/**
* metodo de copia resample
* @var string
*/
const RESAMPLE = 'resample';
/**
* metodo de copia resize
* @var string
*/
const RESIZE = 'resize';
/**
* flip na horizontal
* @var string
*/
const FLIP_HORIZONTAL = 'horizontal';
/**
* flip na vertical
* @var string
*/
const FLIP_VERTICAL = 'vertical';
/**
* flip na horizontal e na vertical
* @var string
*/
const FLIP_BOTH = 'both';
/**
* posicionamento no topo e na esquerda
* @var string
*/
const TOP_LEFT = 'TL';
/**
* posicionamento no topo e ao centro
* @var string
*/
const TOP_CENTER = 'TC';
/**
* posicionamento no topo e na direita
* @var string
*/
const TOP_RIGHT = 'TR';
/**
* posicionamento no meio e a esquerda
* @var string
*/
const CENTER_LEFT = 'CL';
/**
* posicionamento no meio e ao centro
* @var string
*/
const CENTER_CENTER = 'CC';
/**
* posicionamento no meio e a direita
* @var string
*/
const CENTER_RIGHT = 'CR';
/**
* posicionamento abaixo e na esquerda
* @var string
*/
const BOTTOM_LEFT = 'BL';
/**
* posicionamento abaixo e ao centro
* @var string
*/
const BOTTOM_CENTER = 'BR';
/**
* posicionamento abaixo e na direita
* @var string
*/
const BOTTOM_RIGHT = 'BR';
/**
* Adiciona uma marca dagua na imagem de origem.
*
* Exemplo
*
* <code>
* Hufersil_Image::waterMark('origem.jpg','marca.png',null,Hufersil_Image::CENTER_CENTER);
* </code>
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
* @param string $original Nome do arquivo original
* @param string $water nome do arquivo da marca d'agua
* @param string $target Nome do arquivo de destino. NULL para enviar para a tela
* @param string $position posicionamento da marca d'agua
* @return void
*/
public static function waterMark($original, $water, $target = null, $position = self::BOTTOM_RIGHT){
if( !file_exists($original) ){
throw new Exception('Imagem original nao encontrada: ' . $original);
}
if( !file_exists($water) ){
throw new Exception('Imagem marca dagua nao encontrada: ' . $water);
}
if( strlen($position) != 2 ){
throw new Exception('O posicionamento deve ter duas letras');
}
// cria o handler de imagem da imagem fonte
$img_src = imagecreatefromstring( file_get_contents($original) );
// cria o handler de imagem da marca d'agua
$img_wat = imagecreatefromstring( file_get_contents($water) );
// posicao inicial onde colocaremos a marca d'agua
$inix = null;
$iniy = null;
// verificando posicao em Y
switch( $position{0} ){
case 'T':
$iniy = 0;
break;
case 'C':
$iniy = imagesy($img_src)/2 - imagesy($img_wat)/2;
break;
case 'B':
$iniy = imagesy($img_src) - imagesy($img_wat);
break;
}
// verificando posicao em X
switch( $position{1} ){
case 'L':
$inix = 0;
break;
case 'C':
$inix = imagesx($img_src)/2 - imagesx($img_wat)/2;
break;
case 'R':
$inix = imagesx($img_src) - imagesx($img_wat);
break;
}
// copia a marca d'agua para a posicao correta
imagecopy($img_src, $img_wat, $inix, $iniy, 0, 0, imagesx($img_wat), imagesy($img_wat));
self::create($img_src, $original, $target);
}
/**
* Redimensiona uma imagem
*
* Exemplo
*
* <code>
* Hufersil_Image::resize('origem.jpg',200,200,NULL);
* </code>
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
* @param string $original Nome do arquivo original
* @param int $maxWidth largura maxima
* @param int $maxHeight altura maxima
* @param string $target Nome do arquivo de destino. NULL para enviar para a tela
* @param string $method metodo de redimensionamento
* @return void
*/
public static function resize($original, $maxWidth, $maxHeight, $target = null, $method = self::RESAMPLE){
if( !file_exists($original) ){
throw new Exception('Imagem original nao encontrada: ' . $original);
}
// cria o handler de imagem da imagem fonte
$img_src = imagecreatefromstring( file_get_contents($original) );
$zoom = 0;
$width = imagesx($img_src);
$height = imagesy($img_src);
// se a largura for maior / igual que a altura
if( $width >= $height ){
$zoom = $maxWidth / $width;
$width = $maxWidth;
$height = $height * $zoom;
} else {
$zoom = $maxHeight / $height;
$width = $width * $zoom;
$height = $maxHeight;
}
$img = imagecreatetruecolor($width, $height);
if( $method == self::RESAMPLE ){
imagecopyresampled($img, $img_src, 0, 0, 0, 0, $width, $height, imagesx($img_src), imagesy($img_src));
} else {
imagecopyresampled($img, $img_src, 0, 0, 0, 0, $width, $height, imagesx($img_src), imagesy($img_src));
}
self::create($img, $original, $target);
}
/**
* Rotaciona uma imagem
*
* Exemplo
*
* <code>
* Hufersil_Image::rotate('origem.jpg',180,array(133,0,255),NULL);
* </code>
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
* @param string $original caminho do arquivo original
* @param int $angle angulo para rotacao
* @param array $bgcolor cor de fundo para espaco nao preenchido
* @param string $target nome do arquivo de destino. NULL para saida na tela
* @return void
*/
public static function rotate($original, $angle, array $bgcolor = array(), $target = null){
if( !file_exists($original) ){
throw new Exception('Imagem original nao encontrada: ' . $original);
}
if( count($bgcolor) != 3 ){
$bgcolor = array(255,255,255);
}
$img = imagecreatefromstring(file_get_contents($original));
$color = imagecolorallocate($img,$bgcolor[0],$bgcolor[1],$bgcolor[2]);
imagerotate($img, $angle, $color, 0);
self::create($img, $original, $target);
}
/**
* Espelha uma imagem
*
* Exemplo
* <code>
* Hufersil_Image::flip('original.jpg', NULL, Hufersil_Image::FLIP_BOTH);
* </code>
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
* @param string $original nome do arquivo original
* @param string $target nome do arquivo de destino. NULL para enviar para a tela
* @param string $type tipo de espelhamento
* @return void
*/
public static function flip($original, $target = null, $type = self::FLIP_HORIZONTAL){
if( !file_exists($original) ){
throw new Exception('Imagem original nao encontrada: ' . $original);
}
$imgsrc = imagecreatefromstring(file_get_contents($original));
$width = imagesx ( $imgsrc );
$height = imagesy ( $imgsrc );
$src_x = 0;
$src_y = 0;
$src_width = $width;
$src_height = $height;
switch ( $type )
{
case self::FLIP_VERTICAL:
$src_y = $height -1;
$src_height = -$height;
break;
case self::FLIP_HORIZONTAL:
$src_x = $width -1;
$src_width = -$width;
break;
case self::FLIP_BOTH:
$src_x = $width -1;
$src_y = $height -1;
$src_width = -$width;
$src_height = -$height;
break;
}
$imgdest = imagecreatetruecolor ( $width, $height );
imagealphablending($imgdest, false);
imagesavealpha($imgdest, true);
imagecopyresampled ( $imgdest, $imgsrc, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height );
self::create($imgdest, $original, $target);
}
/**
* Gera a imagem de saida
*
* Usada internamente
*
* @author Hugo Ferreira da silva
* @link http://www.hufersil.com.br
* @param resource $img_handle resource da imagem
* @param string $original nome do arquivo original
* @param string $target nome do arquivo de destino. NULL para enviar para a tela
* @return void
*/
private static function create($img_handle, $original, $target){
// se nao informou o destino
if( empty($target) ){
$info = pathinfo( $original );
// se informou
} else {
$info = pathinfo( $target );
}
switch(strtolower($info['extension'])){
case 'png':
// criando o arquivo final
imagepng( $img_handle, $target, 90 );
break;
case 'gif':
// criando o arquivo final
imagegif( $img_handle, $target );
break;
case 'jpg':
case 'jpeg':
default:
// criando o arquivo final
imagejpeg( $img_handle, $target, 90 );
}
}
}
@braços e fiquem com Deus!
Discussão (1)
Carregando comentários...