Ir para conteúdo
Fórum Script Brasil
  • 0

Não Consigo Acessar Classe


griphon

Pergunta

bom,

Estou fazendo uma classe de manipulação de imagem...

Só que está dando um problema, se eu coloco essas linhas no final dessa classe, ocorre tudo bem, conforme o que planegei:

$imagem = new Thumbnail('caminho/da/imagem');
$imagem->Mirror();
$imagem->Show();
mas, se coloco essas mesmas linhas num outro arquivo, e dou um include 'thumb.php' no início não dá certo... arquivo teste.php - instancia um objeto Thumb
include 'thumb.php'

$imagem = new Thumbnail('caminho/da/imagem');
$imagem->Mirror();
$imagem->Show();
alguém sabe onde estou errando? Desde já agradeço. arquivo thumb.php - classe Thumbnail
<?PHP

define("MIRROR_HORIZONTAL", 1);
define("MIRROR_VERTICAL", 2);
define("MIRROR_BOTH", 3);

class Thumbnail {

var $original;
var $thumbnail;
var $textcolor;

/*******************************************************************
 Construtor da classe
*******************************************************************/
function Thumbnail($filename) {

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

	// cria um thumbnail igual a imagem original
	// (caso mostre a imagem, não dá erro)
	$this->thumbnail = imagecreatefromjpeg($filename);

	// aloca branco para o background
	// pelo que li na documentação a primeira cor alocada 
	// va para o background
	$this->SetTextColor(0, 0, 0);

	// cria um resource da imagem original
	if ($this->original = imagecreatefromjpeg($filename)) {
  return 1;
	} else {
  return 0;
	}
}

/*******************************************************************
 Faz um espelhamento com a imagem
 $tipe define se o espelhamento será horizontal, vertical ou ambos
*******************************************************************/
function Mirror($type = MIRROR_HORIZONTAL) {
	$imgsrc = $this->thumbnail;
	$width = imagesx($imgsrc);
	$height = imagesy($imgsrc);
	$imgdest = imagecreate($width, $height);
  
	for ($x=0; $x<$width; $x++) {
  for ($y=0; $y<$height; $y++) {
  	if ($type == MIRROR_HORIZONTAL) imagecopy($imgdest, $imgsrc, $width-$x-1, $y, $x, $y, 1, 1);
  	if ($type == MIRROR_VERTICAL) imagecopy($imgdest, $imgsrc, $x, $height-$y-1, $x, $y, 1, 1);
  	if ($type == MIRROR_BOTH) imagecopy($imgdest, $imgsrc, $width-$x-1, $height-$y-1, $x, $y, 1, 1);
  }
	}
  
	$this->thumbnail = $imgdest;
  
	imagedestroy($imgsrc);
}

/*******************************************************************
 Cria uma outra imagem com as cordenadas $x, $y e largura e altura
 $w, $h
*******************************************************************/
function SplitImage($x, $y, $w, $h) {
	$src  = $this->thumbnail;
	//$dest = ImageCreateTrueColor($x, $y
}

/*******************************************************************
 Modifica a largura somente
*******************************************************************/
function SetWidth($width) {
	$img = $this->thumbnail;

	$this->thumbnail = imagecreate($width, ImageSY($img));

	imagecopyresized($this->thumbnail, $img, 0, 0, 0, 0, $width, ImageSY($img), ImageSX($img), ImageSY($img));
}

/*******************************************************************
 Modifica a altura somente
*******************************************************************/
function SetHeight($height) {
	$img = $this->thumbnail;

	$this->thumbnail = imagecreate(ImageSX($img), $height);

	imagecopyresized($this->thumbnail, $img, 0, 0, 0, 0, ImageSX($img), $height, ImageSX($img), ImageSY($img));
}

/*******************************************************************
 Cria um thumbnail com uma largura aproximada do valor passado
 e modifica também a altura a partir da imagem original
*******************************************************************/
function PWidth($width) {
	$div_x = ImageSX($this->original) / $width;
	if ($div_x < 1) $div_x = 1; 
	$thumb_x = floor(ImageSX($this->original) / $div_x);
	$thumb_y = floor(ImageSY($this->original) / $div_x);

	$this->thumbnail = imagecreate($thumb_x, $thumb_y);

	imagecopyresized($this->thumbnail, $this->original, 0, 0, 0, 0, $thumb_x, $thumb_y, ImageSX($this->original),ImageSY($this->original));
}

/*******************************************************************
 Cria um thumbnail com uma altura aproximada do valor passado
 e modifica também a largura a partir da imagem original
*******************************************************************/
function PHeight($height) {
	$div_y = ImageSY($this->original) / $height;
	if ($div_y < 1) $div_y = 1;
	$thumb_x = floor(ImageSX($this->original) / $div_y);
	$thumb_y = floor(ImageSY($this->original) / $div_y);

	$this->thumbnail = imagecreate($thumb_x, $thumb_y);

	imagecopyresized($this->thumbnail, $this->original, 0, 0, 0, 0, $thumb_x, $thumb_y, 
	ImageSX($this->original),ImageSY($this->original));
}

/*******************************************************************
 Mostra a imagem no navegador
*******************************************************************/
function SetTextColor($r = 0, $g = 0, $b = 0) {
	$cor = imagecolorallocate($this->thumbnail, $r, $g, $b);
	if ($cor == -1) {
  $cor = ImageColorClosest($this->thumbnail, $r, $g, $b);
	}
	$this->textcolor = $cor;
}

/*******************************************************************
 Mostra a imagem no navegador
*******************************************************************/
function SetText($text, $size = 3, $x = 20, $y = 20) { // size de 1 a 5
	// escreve o texto na imagem
	imagestring($this->thumbnail, $size, $x, $y, $text, $this->textcolor);
}

/*******************************************************************
 Volta a imagem original
*******************************************************************/
function OriginalImage() {
	$this->thumbnail = $this->original;
}

/*******************************************************************
 Mostra a imagem no navegador
*******************************************************************/
function Show() {
	//header("Content-Type: image/jpeg");
	imagejpeg($this->thumbnail);
}

/*******************************************************************
 Salva imagem
*******************************************************************/
function Save($dest) {
	header("Content-Type: image/jpeg");
	imagejpeg($this->thumbnail, $dest);
}

/*******************************************************************
 Destrói a imagem criada
*******************************************************************/
function Destroy() {
	imagedestroy($this->thumbnail);
}

} // fecha class


?> 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Cara, eu acredito que seja por isto:

Se quando você faz:

$imagem = new Thumbnail('caminho/da/imagem');

$imagem->Mirror();

$imagem->Show();

dá certo, é porque o código dessa classe já foi incluído ao documento atual, certo? Aí, quando você coloca o "include 'thumb.php'", ele vai redefinir essa classe... e o PHP dá um erro, do tipo:

Fatal error: Cannot redeclare class Thumbnail in C:\Arquivos de programas\Apache Group\Apache2\htdocs\teste.php on line 9

É isso que tá acontecendo? Se você precisar dar esse "include", só mude o nome de uma das classes. smile.gif

Falou!

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Illidan,

Aqui, na verdade, eu tenho um arquivo "teste.php", que tem as seguintes linhas:

<?php

include 'thumb.php';

$imagem = new Thumbnail('C:\Meus documentos\Minhas imagens\chow-chow\chow.jpg');
$imagem->Mirror();
$imagem->Show();

?>

é um arquivo só para testar a classe...

o erro é o seguinte:

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\sitedocao\thumb.php:178) in c:\apache\htdocs\sitedocao\thumb.php on line 152

e a linha é esta:

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

pelo que estou vendo, ele gera alguma saída e não consegue inserir o header.

Mas, se você olhar o código, eu não vejo nenhuma saída...

Link para o comentário
Compartilhar em outros sites

  • 0

ae galera,

descobri o erro...

Se interessar a alguém, o erro falando que "o header já foi envidado" dava porque eu estava deixando uma linha a mais no final do arquivo thumbnail.php

se você tiver por exemplo:

(vou numerar as linhas)

1- <?php
2- function Show() {
3- header("Content-Type: image/jpeg");
4- imagejpeg($image, '', 100);
5- imagedestroy($image);
6- }
7- ?>
8-
9- <?php
10- Show();
11- ?>
irá dar o erro:
Cannot add header information - headers already sent by (output started at ...
pois entre as linhas: 7 e 8, e 8 e 9 há um carriage return que na verdade é uma saída para o html, e quando e tentar mudar o header, ele não irá conseguir... agora, se você fizer:
1- <?php
2- function Show() {
3- header("Content-Type: image/jpeg");
4- imagejpeg($image, '', 100);
5- imagedestroy($image);
6- }
7- ?><?php
8- Show();
9- ?>

não dará nenhum erro, pois não houve nenhuma saída...

Para quem se interessar, isso pode evitar alguns erros futuros, que me deram uma boa dor de cabeça.... wink.gif

Obrigado pela ajuda...

Link para o comentário
Compartilhar em outros sites

  • 0

ae galera,

descobri o erro...

Se interessar a alguém, o erro falando que "o header já foi envidado" dava porque eu estava deixando uma linha a mais no final do arquivo thumbnail.php

se você tiver por exemplo:

(vou numerar as linhas)

1- <?php
2- function Show() {
3- header("Content-Type: image/jpeg");
4- imagejpeg($image, '', 100);
5- imagedestroy($image);
6- }
7- ?>
8-
9- <?php
10- Show();
11- ?>
irá dar o erro:
Cannot add header information - headers already sent by (output started at ...
pois entre as linhas: 7 e 8, e 8 e 9 há um carriage return que na verdade é uma saída para o html, e quando e tentar mudar o header, ele não irá conseguir... agora, se você fizer:
1- <?php
2- function Show() {
3- header("Content-Type: image/jpeg");
4- imagejpeg($image, '', 100);
5- imagedestroy($image);
6- }
7- ?><?php
8- Show();
9- ?>

não dará nenhum erro, pois não houve nenhuma saída...

Para quem se interessar, isso pode evitar alguns erros futuros, que me deram uma boa dor de cabeça.... wink.gif

Obrigado pela ajuda...

sem dúvida me ajudou mais ainda!!!! esse esquema SAÍDA é coisa boba, mas q muita gente bobeia! Por exemplo, EU! ....... SEMPRE oO

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...