Ir para conteúdo

Arquivado

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

dokkalfr

Imagens + Banco de dados + OO

Recommended Posts

Acho que já postei isso, mas eu não achei o post ... como eu já tava dormindo quando terminei pode ser qeu eu tenha sonhado ... ahahahahaha http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

 

Estou em um projeto que necessita que eu trabahe com imagens JPEG em um banco de dados mySQL. Optei pelo PEAR_DB na camada de dados.

 

Utilizei DAO e VO e consegui resultados muito bons. Como clareza de código e facilidade de manutenção.

 

O PEAR_DB também é bastante poderoso e fácil de utilizar!!

 

Mostro isso com 2 proprositos:

1) incentivar o uso de OO o/

2) incentivar a leitura dos manuais (deixem a preguiça de lado!!). eu nunca tinha trabalhado com imagens no PHP ou com as classes do PEAR até este trabaho, mas encontrei tudo que precisei no manual do PHP e do PEAR. Alguns artigos encontrados pelo Google me ajudaram a fazer melhorias.

 

Vou mostrar dois scripts que fazem parte do sistema:

 

Para inserir fotos no banco de dados: Este arquivo é o action de um formulario que contem n campos do tipo "file".

PHP [/tr][tr]<?php

 

require '../dataaccess/Fotos.php';

$Fotos = new daoFotos;

 

if ($_POST['form'] == 'sent') {

 

//O formulario envia 5 campos com fotos

$error = $Fotos->insertFromForm(5);

//verifica erros

if (!empty ($error))

{

print '<pre>';

print_r ($error);

exit;

}

}

 

?>

[/tr]

 

Para mostrar thumbnail: Para mostrar a imagem ampliada é só trocar a propriedade thumbnail para imagem_ampiada.

PHP [/tr][tr]<?php

 

header ("Content-type: image/jpeg");

 

require 'dataaccess/Fotos.php';

$Fotos = new daoFotos;

 

$img = $Fotos->getById($_GET['id']);

echo $img->thumbnail;

 

?>

[/tr]

 

Segue o fonte da classe pra quem quiser estudar:

PHP [/tr][tr]/**

* Estas classes formam uma camada entre os dados e visualização.

* @author Alexandre Gravem <gravem@gmail.com>

*/

 

define ("IMAGEM_AMPLIADA_X",320);

define ("IMAGEM_AMPLIADA_Y",240);

define ("THUMBNAIL_X",60);

define ("THUMBNAIL_Y",60);

 

require_once dirname(__FILE__) .'/'. '../database.php';

 

/**

* Abstração da tabela fotos.

*/

class daoFotos

{

/**

* Busca uma foto pelo seu id.

* @param int $id identificador da foto desejada

* @return obj objeto da classe Foto

*/

function & getById ($id)

{

global $DB;

 

$sql = "SELECT mime_type,imagem_ampliada,thumbnail, descricao "

. "FROM fotos "

. "WHERE foto_id = $id";

 

$data = $DB->getRow($sql,array(),DB_FETCHMODE_ASSOC);

 

if (DB::isError ($data)) die ($data->getMessage());

 

$vo = new Foto;

if (!$vo->import($data)) die ("Erro importando resultado");

return $vo;

}

 

/**

* Insere fotos no banco de dados apartir de

* dados enviados por formulário.

* @param int $NUM_FILES numero de arquivos enviados

* @return mixed false caso tudo ocorra bem ou um array com detalhes dos erros

*/

function insertFromForm ($NUM_FILES)

{

global $DB;

$a = array();

$fails = array();

 

for ($i = 0; $i < $NUM_FILES; $i++) {

//executa tarefa baseada nas possiveis mensagens de erro

switch ($_FILES['arquivo']['error'][$i]) {

case UPLOAD_ERR_INI_SIZE:

echo 'foo';

$fails[]['arquivo'] = $_FILES['arquivo']['name'][$i];

$fails[]['mensagem'] = "Arquivo maior que " . ini_get ('upload_max_filesize') + 0 . "Megabytes";

$fails[]['codigo'] = UPLOAD_ERR_INI_SIZE;

break;

 

//não processa campos vazios

case UPLOAD_ERR_NO_FILE:break;

 

case UPLOAD_ERR_PARTIAL:

$fails[]['arquivo'] = $_FILES['arquivo']['name'][$i];

$fails[]['mensagem'] = "O arquivo foi carregado parcialmente";

$fails[]['codigo'] = UPLOAD_ERR_PARTIAL;

break;

 

default:

 

//transforma a imagem carregada em um binário trabalhavel

$img= imagecreatefromjpeg ($_FILES['arquivo']['tmp_name'][$i]);

$SX = imagesx($img);

$SY = imagesy($img);

 

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#

 

//cria a imagem de tamanho ampliado

$tmp_en = tempnam('/tmp','IMG');

$enlarged = imagecreatetruecolor (IMAGEM_AMPLIADA_X,IMAGEM_AMPLIADA_Y);

imageCopyResized ($enlarged,$img,0,0,0,0,IMAGEM_AMPLIADA_X,IMAGEM_AMPLIADA_Y,$SX,$SY);

imagejpeg($enlarged,$tmp_en);

imagedestroy ($enlarged);

 

//binário que será guardado

$image = addslashes (file_get_contents ($tmp_en));

 

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#

 

//cria thumbnail

$tmp_th = tempnam('/tmp','IMG');

$thumb = imagecreatetruecolor (THUMBNAIL_X,THUMBNAIL_Y);

imageCopyResized ($thumb,$img,0,0,0,0,THUMBNAIL_X,THUMBNAIL_Y,$SX,$SY);

imagejpeg($thumb, $tmp_th);

imagedestroy ($thumb);

 

//thumbnail a ser guardado

$thumbnail = addslashes (file_get_contents ($tmp_th));

 

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#

 

//Inserção no banco de dados

$sql = "INSERT "

. "INTO fotos (album_id,descricao,mime_type,data_upload,upload_por,thumbnail,imagem_ampliada) "

. "VALUES (%d,'%s','%s',%d,%d,'%s','%s')";

$insert_string = sprintf (

$sql,

1,

$_POST['descricao'][$i],

$_FILES['arquivo']['type'][$i],

mktime(),

1,

$thumbnail,

$image

);

if (DB::isError ( $e = $DB->query ($insert_string) )) {

die ($e->getMessage());

}

 

}

}

 

return $fails;

}

}

 

/**

* Value Object. Abstrai uma linha da tabela

*/

class Foto

{

#-=-=-=-=-=-=-=-=-=-=-#

# Campos da tabela #

#-=-=-=-=-=-=-=-=-=-=-#

var $album_id;

var $thumbnail;

var $mime_type;

var $imagem_ampliada;

var $descricao;

var $data_upload;

var $upload_por;

 

/**

* Importa dados da linha a partir de um array

* associativo. Com este método o objeto pode ser

* populado com resultados de uma busca.

* @param array $row dados da linha atual

* @return bool

*/

function importDataFromArray (&$row)

{

if (! is_array($row)) return false;

 

$this->thumbnail = $row['thumbnail'];

$this->mime_type = $row['mime_type'];

$this->imagem_ampliada = $row['imagem_ampliada'];

$this->descricao = $row['descricao'];

$this->album_id = $row['album_id'];

$this->data_upload = $row['data_upload'];

$this->upload_por = $row['upload_por'];

 

return true;

}

}

[/tr]

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.