Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kakashi_Hatake

Manipulando e redimensionando imagens com PHP - Parte 5

Recommended Posts

Script para inserir marca d'água na imagem

<?php
/**
* Verifica se é um resource identificador da imagem
* @param resource $image O identificador da imagem
* @return void
*/
function error_image( $image )
{
if( ! is_resource( $image ) )
{
trigger_error( sprintf( '%s is not an image resource identifier!', $image ), E_USER_ERROR );
}
}
/**
* Insere marca d'água na imagem
* @param resource $image O identificador da imagem
* @param string $watermark A imagem que será utilizada como marca d'agua
* @param int|string $x Coordenada x superior à esquerda
* @param int|string $y Coordenada y superior à esquerda
* @param int $trans O nível de transparência entre 0 e 100
* @return resource O identificador da imagem modificada
*/
function watermark( $image, $watermark, $x = 0, $y = 0, $trans = 0 )
{
error_image( $image );
$x = ( is_numeric( $x ) ) ? ( int ) $x : ( string ) $x;
$y = ( is_numeric( $y ) ) ? ( int ) $y : ( string ) $y;
$trans = ( int ) $trans;

switch( strtolower( pathinfo( $watermark, PATHINFO_EXTENSION ) ) )
{
case( 'jpg' ):
case( 'jpeg' ):
$watermark = imagecreatefromjpeg( $watermark );
break;
case( 'png' ):
$watermark = imagecreatefrompng( $watermark );
break;
case( 'gif' ):
$watermark = imagecreatefromgif( $watermark );
break;
case( 'bmp' ):
$watermark = imagecreatefrombmp( $watermark );
break;
default:
trigger_error( 'Invalid watermark file', E_USER_ERROR );
}

$watermark_width = imagesx( $watermark );
$watermark_height = imagesy( $watermark );

if( is_string( $x ) and is_string( $y ) )
{
$image_width = imagesx( $image );
$image_height = imagesy( $image );

switch( strtoupper( sprintf( '%s-%s', $x, $y ) ) )
{
case( 'TOP-LEFT' ):
$x = 0;
$y = 0;
break;
case( 'TOP-CENTER' ):
$x = ( ( $image_width - $watermark_width ) / 2 );
$y = 0;
break;
case( 'TOP-RIGHT' ):
$x = ( $image_width - $watermark_width );
$y = 0;
break;
case( 'MIDDLE-LEFT' ):
$x = 0;
$y = ( ( $image_height / 2 ) - ( $watermark_height / 2 ) );
break;
case( 'MIDDLE-CENTER' ):
$x = ( ( $image_width - $watermark_width ) / 2 );
$y = ( ( $image_height / 2 ) - ( $watermark_height / 2 ) );
break;
case( 'MIDDLE-RIGHT' ):
$x = ( $image_width - $watermark_width );
$y = ( ( $image_height / 2) - ( $watermark_height / 2 ) );
break;
case( 'DOWN-LEFT' ):
$x = 0;
$y = ( $image_height - $watermark_height );
break;
case( 'DOWN-CENTER' ):
$x = ( ( $image_width - $watermark_width ) / 2 );
$y = ( $image_height - $watermark_height );
break;
case( 'DOWN-RIGHT' ):
$x = ( $image_width - $watermark_width );
$y = ( $image_height - $watermark_height );
break;
default:
$x = 0;
$y = 0;
break;
}
}

$x = ( int ) $x;
$y = ( int ) $y;

switch( $trans )
{
case( ( $trans >= 0 ) and ( $trans <= 100 ) ):
imagecopymerge( $image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, $trans );
break;
default:
imagecopy( $image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height );
break;
}

return $image;
}
?>



Teste:

<?php

$image = watermark( imagecreatefromjpeg( 'Chibi_Kakashi.jpg' ), 'title.png', 10, 100, 80 );
// ou
//$image = watermark( imagecreatefromjpeg( 'Chibi_Kakashi.jpg' ), 'title.png', 'MIDDLE', 'CENTER' );

header( 'Content-type: image/jpg' );
imagejpeg( $image, null, 100 );
imagedestroy( $image );
exit;

?>



Outra coisa, essas funções vão te retornar apenas o resource, se você quiser salvar a imagem alterada vai ter que usar:
seta.gifimagejpeg
seta.gifimagepng
seta.gifimagegif

Exemplo de uso:

<?php

$image = watermark( imagecreatefromjpeg( 'Chibi_Kakashi.jpg' ), 'title.png', 10, 100, 80 );
imagejpeg( $image, 'caminho/nome_da_imagem.jpg', 100 );

?>

 

Parte 1

That's all folks! laugh.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa cara, show demais suas classes de manipulação de imagens! Agradeço muito por compartilhar, uma pena que ninguém comentou outros tópicos, mas este aqui servirá para todos os outros dessa categorie, meus parabéns!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado! Que bom que este post vai ser de ajuda para a comunidade. :thumbsup:

 

Uma coisa verdadeira é que, se essa função e as outras dos outros posts tivesses algum erro, podes ter certeza que teriamos vários comentários (reclamando/tentando corrigir). <_<

 

Mas o importante é compartilhar sem esperar nada em troca. :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior que sim, infelizmente muitas pessoas só fazem críticas e só comentam quando tem erros no algorítmo. E eu errei, não tem classes, apenas funções, mas não importa, o importante foi sua contribuição!

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.