• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nuno

redimencionar automaticamente

11 mensagens neste tópico

Boas pessoal!

gostaria de saber se é possivel fazer em php ao fazer um upload de uma imagem da minha página internet redimensionar automaticamente a imagem com uma resolução

defenida por mim..

porque tar sempre que faço um upload de imagem tar a ir ao fotoshp meter a resolução certa e muito "amador" :biggrin:

cumps.. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não deve ser assim muito facil mas axo que é possivel mas pelo que vejo axo que não há ningm dentro desse assunto...lol  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não deve ser assim muito facil mas axo que é possivel mas pelo que vejo axo que não há ningm dentro desse assunto...lol  :dontgetit:

Ehem. Há uns tempos fiz um scrip para resolver esse mesmo problema, que infelizmente foi à vida num acidente dramático que envolveu o meu portátil e uma chávena monstruosa de café com leite... :thumbsup:

Se tiveres imagecopyresampled() à mão, é na boa :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já fiz um +- parecido com este exemplo que tá no manual php:

<?php
// The file
$filename = 'test.jpg';

// Set a maximum height and width
$width = 200;
$height = 200;

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

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
} else {
   $height = $width/$ratio_orig;
}

// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

// Output
imagejpeg($image_p, null, 100);
?> 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há uns tempos fiz um scrip para resolver esse mesmo problema, que infelizmente foi à vida num acidente dramático que envolveu o meu portátil e uma chávena monstruosa de café com leite... :P

Não o resgatei do disco ensopado, mas criei um novo, até porque vou precisar dele daqui a pouco tempo. Aqui fica, sempre pode dar uma ajuda a alguém. Algumas notas:

  • Ainda está mal testado, por isso qualquer bug que notem avisem pff!
  • Isto consome resmas de memória, especialmente a trabalhar com imagens grandes. Para um png de 8Mb tive que mudar o memory_limit para 256Mb. O tempo máximo de execução do script também pode ser um problema.
  • Requer a library GD. Script testado com GD2 (v2.0.34)

<?php
//#	Exemplo: 
//#	Reduzir o tamanho de um png para 25% e guardar no disco

$file = "./img/earth.png";
$temp = resize ($file, "%", 25);
//header("Content-Type: image/png"); 	//A1: Para mostrar no browser descomentar estas
//imagepng($temp); 					//A2: duas linhas e comentar a próxima
imagepng($temp, "./img/earth_resized.png");		//Guarda a imagem no disco

function resize ($file, $dimension_type, $value, $value2 = '', $filetype = '' ) {
/* 
/	$file: caminho até ao ficheiro, incluindo nome de ficheiro (path+filename)
/	$dimention_type: string indicando o tipo de redimensionamento. Pode ser:
/		"height" => O terceiro parâmetro, $value, contém a altura desejada. Respeita a proporção original
/  		"width" => $value contém a largura desejada. Respeita a proporção original
/		"%"		=> $value indica a percentagem desejada em relação ao tamanho original.
/		"both"	=> $value contém a nova largura, $value2 contém nova altura. Não tenta manter a proporção original
/	$filetype: força o tipo de ficheiro (gif, png, jpeg = jpg), no caso da detecção falhar.
*/

list ($oldwidth, $oldheight) = getimagesize ($file);
$ratio = $oldwidth/$oldheight;

switch ($dimension_type) {
case "height":
	$newheight = $value;
	$newwidth = $value*$ratio;
	break;
case "width":
	$newwidth = $value;
	$newheight = $value/ratio;
	break;
case "%":
	$newwidth = round($value*$oldwidth/100);
	$newheight = round($value*$oldheight/100);
	break;
case "both":
	$newwidth = $value;
	$newheight = $value2;
	break;
default: 
	return FALSE;
}

//TODO: Inspecionar o ficheiro para descobrir o tipo de imagem.
//Até lá, vamos confiar na extensão ou no que nos diz $filetype
if (empty ($filetype)) $filetype = $file;
$filetype = substr ($filetype, -3);

$newimage = imagecreatetruecolor ($newwidth, $newheight);

switch ($filetype) {
case "gif":
	$oldimage = imagecreatefromgif ($file);
	break;
case "png":
	$oldimage = imagecreatefrompng ($file);
	break;
case "jpg":
case "peg":
	$oldimage = imagecreatefromjpeg ($file);
	break;
}

imagecopyresampled($newimage, $oldimage, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);
return $newimage;
}

?> 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim por alto tens, case "peg": falta o "j"

Yah, mas tá certo. É por causa do substr ($filetype, -3), só apanha as últimas 3 letras :P

(Agora que falas nisso, espero que ninguém se lembre de tentar usar isto para redimensionar .mpeg...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes sempre utilizar o explode()


   function get_ext($filename) {   
      $ext = explode(".", $filename);
      return $ext[count($ext)-1];
   }

   $filetype = get_ext("filename.nice.jpeg");
   
   

Fiz agora a pressa nao testei!  :smoke:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho essa funcionalidade implementado no meu script nzFotolog! Podes dissecar o script à vontade e ver como fiz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora