Posts tagged PHP

Classe php para postar no Twitter com encurtador de URL

Há algum tempo desenvolvi essa classe para postar no Twitter, e estudando a API do bit.ly fiz algumas alterações na classe para encurtar as urls antes de postá-las. A url que você passar dentro da mensagem será automaticamente encurtada. Ficou bem fácil de usar, espero que ajude alguém.
Não esqueça de mudar o “twitter_login” e “twitter_password” para seus dados do twitter, e o “bitly_login” e “bitly_key” para seus dados do Bit.ly. Se não possui conta no Bit.ly, acesse esse link para cadastrar-se: http://bit.ly/account/register?rd=/account/your_api_key . Você poderá acompanhar as estatísticas de cliques e popularidade dos links encurtados por você, é bem legal.

TwitMsg.php

<?php
class TwitMsg {

	var $msg;

	static $username = "twitter_login";
	static $password = "twitter_password";

	function __construct($msg)
	{
		$this->msg = utf8_encode($msg);
	}	

	function sendMsg()
	{

		$username = self::$username;
		$password = self::$password;

		$pos = strpos($this->msg,"http://");

		if ($pos !== false)
		{
			$aux = substr($this->msg,$pos);
			$split = explode(" ",$aux);
			$theUrl = $split[0];
			$small = $this->getSmallLink($theUrl);
			$this->msg= str_replace($theUrl,$small,$this->msg);
		}
		$message = urlencode($this->msg);

		$message = substr($message,0,140);
		$url = 'http://twitter.com/statuses/update.xml';

		$curl_handle = curl_init();
		curl_setopt($curl_handle, CURLOPT_URL, "$url");
		curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
		curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl_handle, CURLOPT_POST, 1);
		curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
		curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
		$buffer = curl_exec($curl_handle);
		curl_close($curl_handle);

		if (empty($buffer)) {
			return 0;
		} else {
			return 1;
		}

	}

	//bit.ly
	function getSmallLink($longurl)
	{
		$login = "bitly_login";
		$apiKey = "bitly_key";
		$url = "http://api.bit.ly/shorten?version=2.0.1&longUrl=$longurl&login=$login&apiKey=$apiKey&format=json&history=1";
		$result = file_get_contents($url);
		$obj = json_decode($result, true);
		return $obj ["results"] ["$longurl"] ["shortUrl"];
	}

}
?>

Para usar, é bem fácil:

<?php
include_once("TwitMsg.php");
$message = "Classe para postar no Twitter com encurtador de URL automático do bit.ly: http://www.erikafocke.com.br/php/classe-php-para-postar-no-twitter-com-encurtador-de-url/ por @erikaheidi";
$t = new TwitMsg($message);
if($t->sendMsg())
    echo "Mensagem postada com sucesso no twitter.";
else
   echo "Ocorreu um erro. Verifique se o login e senha do twitter estão corretos.";
?>

Pronto! Ao executar, a mensagem será postada no seu twitter, porém o link será automaticamente encurtado e você poderá acessar as suas estatísticas na sua conta do Bit.ly.

Função para usar a API do Bit.ly para encurtar urls no PHP

Eu nem sabia, mas é super fácil usar a api do Bit.ly para criar urls curtas. Excelente pra integrar com o seu site se você pretende utilizar o Twitter para divulgar links, por exemplo.
Neste exemplo, vamos ver como fazer isso no PHP.

Antes de mais nada, você precisa fazer um cadastro no bit.ly para obter um login e uma API KEY. Acesse: http://bit.ly/account/register?rd=/account/your_api_key

Agora vamos à função:

<?php

function getShortUrl($link)
{
    $apiLogin = "seulogin";
    $apiKey = "suaChave";
    $url = "http://api.bit.ly/shorten?version=2.0.1&longUrl=$link&login=$apiLogin&apiKey=$apiKey&format=json&history=1";
    $result = file_get_contents($url);
    $obj = json_decode($result, true);
    return $obj ["results"] ["$longurl"] ["shortUrl"];
}

?>

Para usar esta função, o seu servidor precisa aceitar a utilização da função “file_get_contents” com uma url externa. Caso tenha problemas, verifique a opção “allow_url_fopen” no seu php.ini, ela deve estar “On”.

Aplicando o efeito “Sepia” no PHP com a lib GD

Não existe uma função pronta para aplicar o efeito “sépia” (foto envelhecida) em imagens usando a GD no PHP, porém é bem fácil de conseguir esse efeito fazendo uma combinação de COLORIZE e GRAYSCALE :

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_GRAYSCALE))
{
        imagefilter($img, IMG_FILTER_COLORIZE, 90, 60, 40);
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Resultado – antes e depois:

Aplicando efeitos / filtros em imagens com a GD – Pt 2

Continuando o post anterior, onde mostrei a aplicação dos filtros GRAYSCALE, BRIGHTNESS, CONTRAST e COLORIZE, vamos ver agora a aplicação dos outros filtros disponíveis na função imagefilter() da GD .

Nos exemplos a seguir você verá do lado esquerdo a imagem original, e do lado direito o resultado após a aplicação do filtro. O código vem logo abaixo.

Negativo

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_NEGATE))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

EdgeDetect

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_EDGEDETECT))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Emboss (alto relevo)

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img,IMG_FILTER_GAUSSIAN_BLUR))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Gaussian Blur

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_EMBOSS))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Selective Blur

O efeito desse blur é mais suave que o Gaussian.

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_SELECTIVE_BLUR))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Mean Removal

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_MEAN_REMOVAL))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Smooth

Também funciona como uma espécie de Blur, porém nesse filtro você define a intensidade.  Quanto maior o valor, menor é a intensidade do blur aplicado.

Passando o valor “0″ :

Passando o valor “10″ :

Passando o valor “-5″ :

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_SMOOTH, 10))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Aplicando efeitos / filtros em imagens com a GD – Pt 1

Neste post irei mostrar como podemos aplicar efeitos e filtros em imagens utilizando a lib GD no PHP. Iremos usar basicamente a função “imagefilter”, que nos permite aplicar vários efeitos como preto e branco, mexer no brilho e contraste, etc.

Para não deixar o post gigantesco, irei dividí-lo em partes. Nesta primeira parte, teremos os efeitos: Preto e Branco, Brilho, Contraste e Colorize.

Nos exemplos a seguir você verá do lado esquerdo a imagem original, e do lado direito o resultado após a aplicação do filtro. O código vem logo abaixo.

1. Preto e Branco

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_GRAYSCALE))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

2. Brilho

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_BRIGHTNESS, 40))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Obs. O terceiro argumento aceita um valor positivo (para aumentar o brilho) ou negativo (para diminuir o brilho).

3. Contraste

O contraste tem uma pequena diferença em se tratando dos valores, pois para aumentar o contraste passamos um valor negativo, e para diminuir o contraste o valor deve ser positivo. O exemplo abaixo usa o valor “40″ no filtro IMG_FILTER_CONTRAST :

Já o exemplo abaixo utiliza o valor ” -40 ” como parâmetro, e aí sim, o contraste é aumentado:

Vamos ao código:

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_CONTRAST, -40))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Filtro de Cor

Este filtro é bem similar ao “grayscale”, sendo que você especifica a cor que deseja aplicar na imagem.  Exemplos abaixo:

Cor usada: #DDA0DD

Cor usada: #008B8B

Vamos ao código (a cor deve ser passada em hexa correspondente aos valores RGB)

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_COLORIZE, 0, 139, 139))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

O  filtro “IMG_FILTER_COLORIZE” aceita ainda um outro argumento, que corresponde ao canal ALPHA, ou seja, da transparência – vai de 0 a 127, onde “0″ é totalmente opaco (não vai fazer diferença) e “127″ é totalmente transparente (o efeito não vai aparecer, a foto vai ficar como a original). Você pode amenizar o efeito da cor usando esse canal. Exemplo abaixo, com a mesma cor usada anteriormente (verde cyan – 0,139,139), agora com transparência (90):

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_COLORIZE, 0, 139, 139,90))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

No próximo post continuarei com os outros filtros.

Criando thumbnails / miniaturas no PHP com a GD

Vamos então começar com o básico, que é utilizar a GD para criar thumbnails (miniaturas) de fotos.

Para isso, precisaremos criar uma função que calcule o tamanho proporcional da miniatura, de acordo com uma dada largura e altura máximas. Então, vamos à função:

function criaMiniatura($imagem,$destination,$larguraMax,$alturaMax)
{
  $tamanho = getimagesize($imagem);
  $largura = $tamanho[0];
  $altura = $tamanho[1]
  //agora vamos ao calculo da proporcao
  if($largura > $larguraMax)
  {
    $largura = $larguraMax;
    $altura = ($largura * $tamanho[1]) / $tamanho[0];
  }
  if($altura > $alturaMax)
  {
    $altura = $alturaMax;
    $largura = ($tamanho[0] * $altura) / $tamanho[1];
  }

  //abrir a imagem original
  $img = imagecreatefromjpeg($imagem);

  //criamos uma nova imagem em branco, q sera a miniatura
  $thumb = imagecreatetruecolor($largura, $altura);

  //agora, copiamos a foto pra nova imagem
  imagecopyresampled($thumb, $img, 0, 0, 0, 0, $largura, $altura, $tamanho[0], $tamanho[1]);

  //e agora eh soh salvar
  imagejpeg($thumb,$destination,90);
}

Para utilizar a função:

criaMiniatura("foto.jpg","fotothumb.jpg",120,90);

A nova miniatura será salva no formato 120×90,  com o nome “fotothumb.jpg” .

Manipulação de Imagens no PHP

Este é apenas um post introdutório para preceder os posts que vou fazer sobre manipulação de imagens no PHP.

Há basicamente duas bibliotecas que podemos utilizar para mexer com imagens no PHP:  GD, que geralmente já vem compilada por padrão na maioria das instalações e servidores web por aí afora, e a ImageMagick, que precisa ser instalada por fora, porém possui muito mais recursos do que a GD, além de ser mais rápida, na maioria dos casos.

Venho trabalhando com essas bibliotecas há alguns anos, procurando sempre criar ferramentas divertidas  / inusitadas além das funcionalidades básicas para o dia-a-dia (criar thumbnails, crop de imagem etc). Isso deu origem aos meus sites de montagens de fotos online (semfrescura.net e fotomontagens.net ) .

Vou começar a documentar aqui no blog meus testes e compartilhar um pouco da minha experiência no assunto, que eu adoro.  Quando comecei a mexer com essas bibliotecas, não havia muito material disponível na net, e hoje ainda é pouco o que se encontra principalmente a respeito da ImageMagick.  Espero que ajude alguém!