Jump to content
Sign in to follow this  
ricardocoimbra

Resize Image

Recommended Posts

ricardocoimbra

Imaginemos que tenho uma imagem 600X400 e quero que ela fique 250X250 eu cria a imagem actual ela fizesse o resize a altura de maneira a que ficasse a altura com 250 e de largura que cortasse o resto da imagem... é possível? se alguém tiver um exemplo pra eu estudar agradecia. Obrigado

Share this post


Link to post
Share on other sites
ricardocoimbra

Tenho esse código que redimensiona proporcionalmente e depois

corta a imagem, não é só pra gerar miniaturas, pois a imagem final pode ser maior

que a original, nesse caso a imagem original é aumentado e cortada a área excedente,

também as dimensões finais podem ser o contrario das originais, tipo, original largura

maior que altura e imagem gerada altura maior que a largura. a imagem final tem que

se ajustar em qualquer situação sem distorcer. Pois bem o código faz isso,

mas não consigo encontrar a fórmula para centralizar as imagens em qualquer situação.

Alguem sabe como fazer de forma a centralizar a imagem?

<? 
$LIMG=100;
$AIMG= 310;
$g_srcfile="200x400.jpg";
$destino="poxa.jpg";

if(file_exists($g_srcfile)) {

   $g_is = getimagesize($g_srcfile);   	 	

$g_ih=$AIMG;
   $g_iw=($g_ih/$g_is[1])*$g_is[0];	 

if($LIMG>$g_iw){
   $g_iw=$LIMG;
      $g_ih=($LIMG/$g_is[0])*$g_is[1];	  	 
}

// se a largura redimensionada($g_iw)  for
// maior ou igual a altura redimensionada($g_ih)
if($g_iw>=$g_ih){	
   $scr_x=0; 				     
   $src_y=0;			
}else{
   $scr_x=0;			     
   $src_y=0; 		 	  
}
  
  
//|||||||||||||||||||||| INFORMAÇÕES SOBRE A IMAGEM |||||||||||||||||||||||||||

// Descomente abaixo, apenas para teste, mostra as dimensões originais, 
// da imagem redimensionada e da área de corte, a imagem não aparecerá
// até que coloque os comentários novamente.

/*
echo "<b><font color='red'>Imagem original</font> ".$g_is[0]."x".$g_is[1]."</b><br>
 <b><font color='red'>Imagem redimensionada</font> ".$g_iw."x".$g_ih."</b><br>".
"<b><font color='red'>Área do crop</font> ".$LIMG."x".$AIMG."</b><br>";
if($g_iw==$LIMG){
   $al=$g_ih-$AIMG;
   echo "<font color='red'><b>Corte de <font color='black'>".$al."</font> px na altura</b></font>" ;
}elseif($g_ih==$AIMG){
   $la=$g_iw-$LIMG;
   echo "<font color='red'><b>Corte de <font color='black'>". $la ."</font> px na largura</b></font>" ;
}
die();
*/

//||||||||||||||||||||||| FIM INFORMAÇÕES SOBRE A IMAGEM |||||||||||||||||||||||


   $img_src=imagecreatefromjpeg($g_srcfile);
   $img_dst=imagecreatetruecolor($LIMG, $AIMG);
   imagecopyresampled($img_dst, $img_src, 0, 0, $scr_x, $src_y, $g_iw, $g_ih, $g_is[0], $g_is[1]);
   
   Header( "Content-type:  image/JPEG");
   imagejpeg($img_dst);	
   imagedestroy($img_dst);

}
?>

Share this post


Link to post
Share on other sites
ruimcosta

Esta classe redimensiona jpg, bmp, gif e png

class SimpleImage {

   var $image;
   var $image_type;

   function load($filename) {
      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {
         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {
         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {
         $this->image = imagecreatefrompng($filename);
      }
   }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=100, $permissions=null) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image,$filename);
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image,$filename);
      }
      if( $permissions != null) {
         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image);
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image);
      }
   }
   function getWidth() {
      return imagesx($this->image);
   }
   function getHeight() {
      return imagesy($this->image);
   }
   function resizeToHeight($height) {
      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }
   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }
   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100;
      $this->resize($width,$height);
   }
   function resize($width,$height) {
      $new_image = imagecreatetruecolor($width, $height);
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;
   }
}

Mode de utilização:

$image = new SimpleImage();
                            $image->load("../ficheiros/imagem.jpg");
                            $image->resizeToWidth(600); // redimensiona para 600px largura
                             //$image->resizeToHeight(600);
                            $image->save("../ficheiros/imagem2.jpg");


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
ricardocoimbra

Olá Rui,

Mas com esta classe por exemplo uma imagem que tivesse 600x400 tu nunca conseguias pô-la com 250x250 e esse é o meu objectivo.

Ou seja fazer o resize a partir do centro e ficar com 250 de altura e o que tiver a mais d largura curtar. Percebes o que estou a tentar fazer?

Pk nessa class ele faz o resize mas ia ficar 250X167 e eu quero 250 por 250.

Esta classe redimensiona jpg, bmp, gif e png

class SimpleImage {

   var $image;
   var $image_type;

   function load($filename) {
      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {
         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {
         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {
         $this->image = imagecreatefrompng($filename);
      }
   }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=100, $permissions=null) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image,$filename);
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image,$filename);
      }
      if( $permissions != null) {
         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image);
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image);
      }
   }
   function getWidth() {
      return imagesx($this->image);
   }
   function getHeight() {
      return imagesy($this->image);
   }
   function resizeToHeight($height) {
      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }
   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }
   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100;
      $this->resize($width,$height);
   }
   function resize($width,$height) {
      $new_image = imagecreatetruecolor($width, $height);
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;
   }
}

Mode de utilização:

$image = new SimpleImage();
                            $image->load("../ficheiros/imagem.jpg");
                            $image->resizeToWidth(600); // redimensiona para 600px largura
                             //$image->resizeToHeight(600);
                            $image->save("../ficheiros/imagem2.jpg");

Share this post


Link to post
Share on other sites
mjamado

O mal é que nao tenho essa extensão Imagick no servidor e como não é meu. Mas obrigado pela ajuda mjamado.

Pede para instalar. O ImageMagick/Imagick dá 100 a zero ao GD, tanto em performance, como em facilidade de utilização.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
fantasma

Tens este tutorial

http://net.tutsplus.com/tutorials/php/image-resizing-made-easy-with-php/

Saca a classe e depois, como no proprio tutorial diz:

include("resize-class.php");   //Faz o include da classe
  

$resizeObj = new resize('sample.jpg');  //Inicializa o objecto é a tua imagem, que chamas pelo caminho relativo ou absoluto
  

$resizeObj -> resizeImage(150, 100, 'crop');  //Define o tamanho (largura, altura, metodo_de_corte) e escolhe a opção de resize, neste caso queres um corte (crop) central
  

$resizeObj -> saveImage('sample-resized.gif', 100);  //Guarda o caminho novo da imagem 

Espero ter ajudado

Share this post


Link to post
Share on other sites
ruimcosta

Pede para instalar. O ImageMagick/Imagick dá 100 a zero ao GD, tanto em performance, como em facilidade de utilização.

Vou dar uma olhadela a isso. Por acaso desconhecia.

Obrigado


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
ricardocoimbra

Tens este tutorial

http://net.tutsplus.com/tutorials/php/image-resizing-made-easy-with-php/

Saca a classe e depois, como no proprio tutorial diz:

include("resize-class.php");   //Faz o include da classe
  

$resizeObj = new resize('sample.jpg');  //Inicializa o objecto é a tua imagem, que chamas pelo caminho relativo ou absoluto
  

$resizeObj -> resizeImage(150, 100, 'crop');  //Define o tamanho (largura, altura, metodo_de_corte) e escolhe a opção de resize, neste caso queres um corte (crop) central
  

$resizeObj -> saveImage('sample-resized.gif', 100);  //Guarda o caminho novo da imagem 

Espero ter ajudado

Olá "fantasma" eu testei e era mesmo isso.

Acontece que eu em vez de salvar apenas queria mostrar a imagem no browser faço isto mas não me funciona. Como poderia apenas mostrar no browser?

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

echo($resizeObj);

Share this post


Link to post
Share on other sites
yoda

Olá "fantasma" eu testei e era mesmo isso.

Acontece que eu em vez de salvar apenas queria mostrar a imagem no browser faço isto mas não me funciona. Como poderia apenas mostrar no browser?

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

echo($resizeObj);

É isso, mas não podes ter imprimido nada antes de apresentar a imagem, se queres que só apareça a imagem.

Share this post


Link to post
Share on other sites
fantasma

A imagem é  guardada, conforme o tutorial, na pasta onde esta o ficheiro que trata do upload.

A partir daí tens de construir o html para mostrar a imagem com o caminho da imagem.

Se queres apresentar logo a imagem, fazes um echo do html para o caminho (guardas numa variavel ou na base de dados) da imagem após o upload


echo '<img src="'$caminho_img'"></img>'

Share this post


Link to post
Share on other sites
ricardocoimbra

Sim isso assim funciona mas acontece que eu nao quero gravar as imagens, o exemplo que me deste ele funciona e era isso o pretendido mas eu em vez de gravar quero é mostrar as imagens que tenho numa pasta e ele ao mostrar no browser fazer resize e ao abrir abrir pra o tamanho real.

Ou seja a minha duvida consiste como posso fazer para mostrar a imagem 250x250 mas sem gravar.

A imagem é  guardada, conforme o tutorial, na pasta onde esta o ficheiro que trata do upload.

A partir daí tens de construir o html para mostrar a imagem com o caminho da imagem.

Se queres apresentar logo a imagem, fazes um echo do html para o caminho (guardas numa variavel ou na base de dados) da imagem após o upload


echo '<img src="'$caminho_img'"></img>'

Share this post


Link to post
Share on other sites
fantasma

Creio ter percebido. No entanto tens de ter algum sistema de guardar o caminho dos ficheiros que fazes upload! Ou guardas o caminho sequencialmente num ficheiro, ou mais fácil ainda, guardas o caminho na base de dados...

Share this post


Link to post
Share on other sites
ricardocoimbra

Mas as imagens ja estao na base de dados e estao numa pasta no servidor mas estao com o tamanho de 600X400 mas eu quero ao mostrar ao cliente no browser apareça com 250X250 ou seja eu quero no servidor com 600X400 mas ao mostrar no browser faça resize para 250X250.

Creio ter percebido. No entanto tens de ter algum sistema de guardar o caminho dos ficheiros que fazes upload! Ou guardas o caminho sequencialmente num ficheiro, ou mais fácil ainda, guardas o caminho na base de dados...

Share this post


Link to post
Share on other sites
fantasma

Ok já entendi...

tu não consegues criar um thumb virtual sem o guardar em algum lado. O que eu te aconselho a fazer é, para as imagens que tens na bd, criares outro campo "img_thumb" e guardares o caminho do thumb...

Repara, a imagem "cropada" não existe fisicamente até fazeres



resizeObj->saveImage($caminho,100);

Portanto, tendo em conta que obrigatoriamente tens de guardar a imagem em algum lado, nem que depois a apagues, o que tens de fazer é simplesmente atribuir à imagem um nome diferente, guardares em BD e mandares para o browser através o html.

Tendo em conta que tens de dar um caminho inicial para a imagem o que podes fazer é

$caminho ="caminho para a imagem";

$caminho_thumb = $caminho.'_thumb';  //Aqui tens o caminho para o thumb

$resizeObj = new resize($caminho);  //Inicializa o objecto é a tua imagem, que chamas pelo caminho relativo ou absoluto
  
$resizeObj -> resizeImage(150, 100, 'crop');  //Define o tamanho (largura, altura, metodo_de_corte) e escolhe a opção de resize, neste caso queres um corte (crop) central


//Depois de instanciares o objecto e"cropares"fazes

resizeObj->saveImage($caminho_thumb, 100);

Share this post


Link to post
Share on other sites
ricardocoimbra

Mas é que eu não cria estar a criar thumbs... Deve haver alguma maneira tipo uma classe que faça resize sem ter de andar a criar thumbs....

Ok já entendi...

tu não consegues criar um thumb virtual sem o guardar em algum lado. O que eu te aconselho a fazer é, para as imagens que tens na bd, criares outro campo "img_thumb" e guardares o caminho do thumb...

Repara, a imagem "cropada" não existe fisicamente até fazeres



resizeObj->saveImage($caminho,100);

Portanto, tendo em conta que obrigatoriamente tens de guardar a imagem em algum lado, nem que depois a apagues, o que tens de fazer é simplesmente atribuir à imagem um nome diferente, guardares em BD e mandares para o browser através o html.

Tendo em conta que tens de dar um caminho inicial para a imagem o que podes fazer é

$caminho ="caminho para a imagem";

$caminho_thumb = $caminho.'_thumb';  //Aqui tens o caminho para o thumb

$resizeObj = new resize($caminho);  //Inicializa o objecto é a tua imagem, que chamas pelo caminho relativo ou absoluto
  
$resizeObj -> resizeImage(150, 100, 'crop');  //Define o tamanho (largura, altura, metodo_de_corte) e escolhe a opção de resize, neste caso queres um corte (crop) central


//Depois de instanciares o objecto e"cropares"fazes

resizeObj->saveImage($caminho_thumb, 100);

Share this post


Link to post
Share on other sites
mjamado

Mas é que eu não cria estar a criar thumbs... Deve haver alguma maneira tipo uma classe que faça resize sem ter de andar a criar thumbs....

Há, com o Imagick... :smoke:

(mas essa também deve dar - em vez de a guardares, cospes o output; para isso, só tens de chamar o caminho do para um controlador dessa classe, com os parâmetros relevantes, como nome da imagem, no atributo src de uma tag img)


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
ricardocoimbra

Pois gostava de saber fazer isso mas não sei .... ja tou a testar a horas e horas :P infelizmente sem sucesso! Não sei como fazer...

Há, com o Imagick... :smoke:

(mas essa também deve dar - em vez de a guardares, cospes o output; para isso, só tens de chamar o caminho do para um controlador dessa classe, com os parâmetros relevantes, como nome da imagem, no atributo src de uma tag img)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.