Jump to content


Manipulação De Imagem


  • Faça o login para participar
6 replies to this topic

#1 flavionogueiranery

flavionogueiranery
  • Visitantes

Posted 31/10/2006, 10:51

Olá,

existe como fazer manipulação de imagem via php de maneira que se eu enviar imagens, mesmo que com dimensões diferentes (300x400, 600x234 ...), seja criado um thumb sempre com a mesma dimensão por exemplo 100 x 80, sem ditorcer a imagem ?

ou ainda,

fazer o upload da imagem, independente da dimensão tb, e ele mostra somente uma parte da imagem (tipo fazer um crop na imagem), e mostrar com dimensões iguais, por exemplo 100 x 80.

e qual a lógica disso, como seria feito?

pesquisei alguns tutorias na internet, no hotscripts, no kirupa, mas não achei exatamente sobre isso, quando eu acho, ele faz o upload, mas geralmente mexe somente na largura da imagem, mas a altura não. isto é, a altura pode variar em determinados casos, e eu não quero que ela varie. ela tem que ser sempre uma medida, por exemplo 100 x 80

se alguém puder esclarecer, valeu

Edição feita por: flavionogueiranery, 31/10/2006, 10:53.


#2 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 31/10/2006, 12:53

procure aqui no fórum por miniatura de imagem

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#3 flavionogueiranery

flavionogueiranery
  • Visitantes

Posted 31/10/2006, 12:59

Procurei anteriormente por "Redimensionar" e achei algumas coisas legais, uma delas foi o código de uma garota, fiz uma modificação pra testar uma imagem qualquer sem enviar pelo formulário ainda. só pra testar.

<?php

// variável da imagem
$imagem = 'teste.jpg';

// se
if (!empty($imagem["name"])) {

// caminho onde ficará a imagem. barra no final
$caminho = "teste/";

// pegando do campo arquivo do form
$img_form = "teste.jpg";

// aqui a url da imagem que sera criada a miniatura
$imagem= $img_form;

// cabeçalho - imagem tipo jpg
header("Content-type: image/jpeg");

// cria amostra da imagem original
$im = imagecreatefromjpeg($imagem);

// pega a largura da amostra
$largurao = imagesx($im);

// pega a altura da amostra
$alturao = imagesy($im);

// define a altura mínima
$alturad = 200;

// calcula a largura da imagem a partir da altura da miniatura
$largurad = ($largurao*$alturad)/$alturao;

// cria imagem em branco
$nova = imagecreatetruecolor($largurad,$alturad);

// copia
imagecopyresized($nova,$im,0,0,0,0,$largurad,$alturad,$largurao,$alturao);

//cria imagem jpeg
$img_thumb = imagejpeg($nova, $caminho);

// libera a memoria usada na miniatura
imagedestroy($nova);

// libera a memoria usada na amostra
imagedestroy($im);

}

if ($img_thumb){

print 'Deu tudo certinho ! \o/';

}

else {

print 'Algo deu errado ... ¬¬';

}


?>


só que tá dando esse erro:

Warning: imagejpeg(): Unable to open 'teste/' for writing in /home/www/teste.php on line 43
Algo deu errado ... ¬¬


Edição feita por: flavionogueiranery, 31/10/2006, 13:00.


#4 gifs.kit.net

gifs.kit.net

    Saulo Petri

  • Usuários
  • 457 posts
  • Sexo:Não informado
  • Localidade:Niterói, RJ

Posted 31/10/2006, 14:00

a pasta teste existe?
nome: Saulo Petri
email: saulopetri@gmail.com

Sites:

O melhor Axé do Rio
sakeiaboa


#5 flavionogueiranery

flavionogueiranery
  • Visitantes

Posted 31/10/2006, 14:08

sim

#6 hisamu

hisamu

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado

Posted 31/10/2006, 21:16

<?php

// variável da imagem
$imagem = 'teste.jpg';

// se
if (!empty($imagem["name"])) {

// caminho onde ficará a imagem. barra no final
$caminho = "teste/";

// pegando do campo arquivo do form
$img_form = "teste.jpg";

// aqui a url da imagem que sera criada a miniatura
$imagem= $img_form;


// cabeçalho - imagem tipo jpg
header("Content-type: image/jpeg");

// cria amostra da imagem original
$im = imagecreatefromjpeg($imagem);

// pega a largura da amostra
$largurao = imagesx($im);

// pega a altura da amostra
$alturao = imagesy($im);

// define a altura mínima
$alturad = 200;

// calcula a largura da imagem a partir da altura da miniatura
$largurad = ($largurao*$alturad)/$alturao;

// cria imagem em branco
$nova = imagecreatetruecolor($largurad,$alturad);

// copia
imagecopyresized($nova,$im,0,0,0,0,$largurad,$alturad,$largurao,$alturao);

//cria imagem jpeg
$img_thumb = imagejpeg($nova, $caminho);

// libera a memoria usada na miniatura
imagedestroy($nova);

// libera a memoria usada na amostra
imagedestroy($im);

}

if ($img_thumb){

print 'Deu tudo certinho ! \o/';

}

else {

print 'Algo deu errado ... ¬¬';

}


?>


É, esse código ta confuso...

<?php

// variável da imagem
$imagem = 'teste.jpg';

// se
if (!empty($imagem["name"])) {

// caminho onde ficará a imagem. barra no final
$caminho = "teste/";

// aqui a url da imagem que sera criada a miniatura
$img = $caminho.substr($imagem,0,-4)."_thumb";

// cabeçalho - imagem tipo jpg
header("Content-type: image/jpeg");

// cria amostra da imagem original
$im = imagecreatefromjpeg($imagem);

// pega a largura da amostra
$largurao = imagesx($im);

// pega a altura da amostra
$alturao = imagesy($im);

// define a altura mínima
$alturad = 200;

// calcula a largura da imagem a partir da altura da miniatura
$largurad = ($largurao*$alturad)/$alturao;

// cria imagem em branco
$nova = imagecreatetruecolor($largurad,$alturad);

// copia
imagecopyresized($nova,$im,0,0,0,0,$largurad,$alturad,$largurao,$alturao);

//cria imagem jpeg
$img_thumb = imagejpeg($nova,$img);

// libera a memoria usada na miniatura
imagedestroy($nova);

// libera a memoria usada na amostra
imagedestroy($im);

}

if ($img_thumb){

print 'Deu tudo certinho ! \o/';

}

else {

print 'Algo deu errado ... ¬¬';

}


?>


Testa aí...

#7 flavionogueiranery

flavionogueiranery
  • Visitantes

Posted 31/10/2006, 22:03

nossa, to tentando aqui e nada ainda, deu o mesmo erro.

de qualquer maneira consegui esse script que de fato está gerando a thumb e salvando com outro nome numa pasta etc... enfim normal,

o problema é que só da pra definir a altura da thumb. e eu precisava definir altura e largura. para serem sempre iguais, como faz pra adaptar?

segue o código:

<?

if(isset($_POST['Submit'])){

// altura
$altura = 55;

// diretório do arquivo original
$dir = 'image/';

// diretório do arquivo thumbnail
$thumbdir = 'image/';

// prefixo da imagem thumb
$prefixo = 'thumb_';

// tamanho máximo do arquivo
$tamanho = '2000000';

// parâmetros da imagem para upload
$userfile_name = $_FILES['image']['name'];
$userfile_tmp = $_FILES['image']['tmp_name'];
$userfile_size = $_FILES['image']['size'];
$userfile_type = $_FILES['image']['type'];

// se arquivo para upload ok
if (isset($_FILES['image']['name'])) {

// cria caminho imagem original
$prod_img = $dir.$userfile_name;

// cria caminho imagem thumb
$prod_img_thumb = $thumbdir.$prefixo.$userfile_name;

// faz upload
move_uploaded_file($userfile_tmp, $prod_img);

// pega as dimensoes da imagem principal
$dimensoes = getimagesize($prod_img);

// variável mexe tamanho para produzir thumb
$proporcional = $dimensoes[1]/$dimensoes[0];

// se
if ($dimensoes[1] <= $altura){
$new_width = $dimensoes[0];
$new_height = $dimensoes[1];
}

else{
$new_height = $altura;
$new_width = abs($new_height/$proporcional);
}

// cria a thumb com as novas dimensões de largura e altura
$destimg=imagecreatetruecolor($new_width,$new_height);

// cria nova imagem a partir de um arquivo
$srcimg=imagecreatefromjpeg($prod_img);

if(function_exists('imagecopyresampled')){
imagecopyresampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg));
}

else{
imagecopyresized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg));
}

// imagem thumb
imagejpeg($destimg,$prod_img_thumb,90);

// libera
imagedestroy($destimg);
}

echo '

<a href="'.$prod_img.'">

<img src="'.$prod_img_thumb.'" width="'.$new_width.'" heigt="'.$new_height.'">

</a>

';

}

?>

<html>

<form method="post" action="" enctype="multipart/form-data">

<input type="file" name="image"><p>

<input type="Submit" name="Submit" value="Submit">

</form>

</html>


valeu

alguma idéia?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq