Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos,
Sou novata em PHP e gostaria de uma ajudinha.
Eu encontrei na internet um modo de enviar fotos locais para meu site e renomear o nome do arquivo baseado no ID da tabela, tudo funciona perfeitamente, porém, eu preciso que além do upload e do "rename", este arquivo fosse enviado já redimensionado para 320x240 px. Alguém pode me ajudar ?
Passei o dia inteiro procurando na internet sistemas assim mas não consegui adaptar nenhum para meu caso.
Agradeço de coração quem puder me ajudar.
<?php
// conectar a base dados
include('connect.php');
// Função para pegar extensão do arquivo
function getExtension($fileName){
$ext = substr(strrchr($fileName, '.'), 1);
// para lower case
$ext = "." . strtolower($ext);
return $ext;
}
// nova foto
if( isset($_POST['new']) ){
$sql ="INSERT INTO lista
VALUES(
''
)";
mysql_query($sql) or die(mysql_error());
// criar diretorio se nao existir
if(!file_exists("fotos") ){
mkdir("fotos");
}
// pegar ultimo id
$last_id = mysql_insert_id($link);
// fazer o upload
if( $_FILES['file']['name'] != ''){
// pegar extensao
$ext = getExtension($_FILES['file']['name']);
// copiar o arquivo
copy($_FILES['file']['tmp_name'], "fotos/".$last_id. $ext)
or die("OCORREU UM ERRO, TENTE NOVAMENTE!");
}
}
?>Olá Maciel, Obrigada pela sua ajuda.
Se você conseguir um exemplo que funcione com o código que eu já tenho seria ótimo, sou meio novata em PHP e não consegui adaptar alguns códigos de resize que encontrei ao meu.
Fico Aguardando, obrigada denovo. :)
faz assim crie uma pagina PHP com o nome :
redimenciona.php
<?php
function Redimensionar($imagem, $name, $largura, $pasta){
$img = imagecreatefromjpeg($imagem['tmp_name']);
$x = imagesx($img);
$y = imagesy($img);
$altura = ($largura * $y)/$x;
$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
imagejpeg($nova, "$pasta/$name");
imagedestroy($img);
imagedestroy($nova);
return $name;
}
?>
e no seu codigo php
coloque isso
onde tem 150 é o tamanho da largura ....
mude pra o valor que você quiser.....
//redimencionar
Redimensionar($foto, $name, 150, "images");
Duvidas.... http://forum.imasters.com.br/public/style_emoticons/default/joia.gif MEU MSN: macielc.ronaldo@hotmail.com
Olá Maciel,
Obrigada novamente pela ajuda, mas seu eu faço exatamente como você diz dá o seguinte erro.
"Fatal error: Call to undefined function redimensionar() in .... on line 34"
Alterei então o nome do arquivo criado de "redimensiona.php" para "redimensionar.php", coloquei o include para o arquivo no meu código e utilizei o código que você informou
<?php
// conectar a base dados
include('connect.php');
include('redimensionar.php');
function getExtension($fileName){
// pegar extensão
$ext = substr(strrchr($fileName, '.'), 1);
// para lower case
$ext = "." . strtolower($ext);
return $ext;
}
// nova foto
if( isset($_POST['new']) ){
$sql ="INSERT INTO list
VALUES(
''
)";
mysql_query($sql) or die(mysql_error());
// criar diretorio se nao existir
if(!file_exists("fotos") ){
mkdir("fotos");
}
// pegar ultimo id
$last_id = mysql_insert_id($link);
//Redimencionar
Redimensionar($foto, $name, 70, "images");
// fazer o upload
if( $_FILES['file']['name'] != ''){
// pegar extensao
$ext = getExtension($_FILES['file']['name']);
// copiar o arquivo
copy($_FILES['file']['tmp_name'], "fotos/".$last_id. $ext)
or die("FILE COULD NOT BE UPLOADED TRY AGAIN!");
}
}
?>
E nada, a imagem não é redimensionada, tentei mudar o campo "images" para o nome da minha pasta "fotos" onde são gravadas as fotos e nada também ?
O que estou fazendo de errado ?
Olha vou te mandar um exemplo feito...... beleza é só você ver e configurar pro seu codigo.......
index.php
<?php
if(isset($_POST['acao']) && $_POST['acao'] == 'cadastrar'){
$foto = $_FILES['foto'];
if($foto['type'] == 'image/jpeg'){
require("funcao_upload.php");
$name = md5(uniqid(rand(), true)).".jpg";
Redimensionar($foto, $name, 150, "images");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Redimensionar Imagem</title>
</head>
<body>
<form method="post" action="" enctype="multipart/form-data">
<label>Foto<input type="file" name="foto" /></label>
<input type="submit" value="Enviar" />
<input type="hidden" name="acao" value="cadastrar" />
</form>
</body>
</html>
<?php
function Redimensionar($imagem, $name, $largura, $pasta){
$img = imagecreatefromjpeg($imagem['tmp_name']);
$x = imagesx($img);
$y = imagesy($img);
$altura = ($largura * $y)/$x;
$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
imagejpeg($nova, "$pasta/$name");
imagedestroy($img);
imagedestroy($nova);
return $name;
}
?>MSN: macielc.ronaldo@hotmail.com
Obrigada Novamente Maciel,
Mas como disse antes eu já peguei diversos modelos de upload e resize na internet, consegui fazê-los funcionar também, mas preciso de um que funcione no código que já tenho e postei em minha primeira pergunta, porque já o utilizo em outras partes e considero mais fácil faze-lo funcionar do que adequar o resto do site a novos sistemas.
O modelo que você mandou cria um nome aleatório md5 e não baseado no ID de minha tabela. Por isso resolvi postar minha dúvida aqui no fórum, para que alguém possa me ajudar a implementar o Resize no código que já tenho, você consegue fazer isto ? Já tenho o código para upload focado no que preciso, preciso apenas que a imagem seja redimensionada e enviada para pasta fotos já setada.
>
Obrigada Novamente Maciel,
Mas como disse antes eu já peguei diversos modelos de upload e resize na internet, consegui fazê-los funcionar também, mas preciso de um que funcione no código que já tenho e postei em minha primeira pergunta, porque já o utilizo em outras partes e considero mais fácil faze-lo funcionar do que adequar o resto do site a novos sistemas.
O modelo que você mandou cria um nome aleatório md5 e não baseado no ID de minha tabela. Por isso resolvi postar minha dúvida aqui no fórum, para que alguém possa me ajudar a implementar o Resize no código que já tenho, você consegue fazer isto ? Já tenho o código para upload focado no que preciso, preciso apenas que a imagem seja redimensionada e enviada para pasta fotos já setada.
Ola amiga olha é o seguinte amanhã eu posto seu codigo resolvido tá bjs.!'
Olá Danielle,
Seguinte: Eu conheço dois scripts súper fáceis de se usar, e acredito que podem lhe servir. Na verdade são classes prontas, cheias de recursos e fazem um monte de coisa por você, sem que você tenha que quebrar muito a cabeça.
Tem esse: [Classe do Verot](http://www.verot.net/php_class_upload_samples.htm) (que eu gosto mais);
E este: [WideImage](http://wideimage.sourceforge.net/) (muito bom também);
A primeira classe, eu acho muito mais fácil de se usar, e se você der uma estudada rapidinho nela, dá para aplicar em suas páginas sem nenhuma dificuldade.
Todas as duas classes que citei tem opções de raname, upload, e resize, além de muitas outras funções interessantes.
Dica: quando for testar o seu upload em algum servidor de hospedagem, é importante verificar se a pasta onde você vai fazer o upload está com as propriedades de leitura e escrita ativada. Isso costuma dar bastante erro no inicio.
Fica aí a dica. Abraços. ;)
Boa noite galera!
To usando o script fornecido pelo nosso amigo lá no começo do tópico.
Dei apenas uma editada pra ficar como eu preciso! :)
$diretorio = '/full/';
$envia = $diretorio . $_FILES['arquivo']['name'];
$novonome = $diretorio.$referencia.".jpg";
$renomeia = rename($_FILES['arquivo']['tmp_name'],$diretorio.$referencia.".jpg");
$upload = move_uploaded_file($_FILES['arquivo']['tmp_name'],$envia);
$img = imagecreatefromjpeg($diretorio.$referencia.".jpg");
$x = imagesx($img);
$y = imagesy($img);
$altura = 100;
$largura = 100;
$thumbs = '/thumbs/'.$referencia.'.jpg';
$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
imagejpeg($nova, $thumbs);
imagedestroy($img);
imagedestroy($nova);
return $name;
A questão é, ta funcionando, ele faz o upload com o nome que eu quero pra dentro da pasta "full" e cria uma nova imagem do tamanho 100/100 na pasta "thumbs". Consigo visualizar as duas sem problema nenhum, porém aparece sempre dois erros.
>
Warning: move_uploaded_file(/home/matheusfelini/tmp/phpNqWbEv) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/matheusfelini/public_html/testes/Imagem.class.php on line 13
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/home/matheusfelini/tmp/phpNqWbEv' to 'full/147852.jpg' in /home/matheusfelini/public_html/testes/Imagem.class.php on line 13
Apesar desses erros, o upload e redimensionamento acontecem normalmente, podem dar uma ajuda aí?
Podem testar através do link abaixo:
http://www.matheusfe...stes/upload.php
Valeeeu!
[]s
felini
Obs: agora sim no tópico certo!
Funcionou porque não é um erro, é um aviso
WARNING != FATAL ERROR
isso acontece em alguns servidores, dependendo de como foi configurado
o que você pode fazer é calar as mensagens do comando, já que você sabe que ele esta funcionando correntamente.
$upload = @move_uploaded_file($_FILES['arquivo']['tmp_name'],$envia);
o @ na frente dos comandos faz o calar qualquer saida que el possa vir a ter. só aconselho em caso de WARNNG pois senao você nunca localizaria um determinado erro.
outra saida é usar o comando copy no lugar do move_uploaded_file. Servidores bem configurados limpa periodicamente a pasta temporaria. Não havendo necessidade de se preocupar com isso.
Quanto aarmazenar o THUMB no servidor, acho util dar uma lida na minha resposta nesse outro tópico:
http://forum.imasters.com.br/index.php?/topic/386156-variaveis-de-upload/
>
Funcionou porque não é um erro, é um aviso
WARNING != FATAL ERROR
isso acontece em alguns servidores, dependendo de como foi configurado
o que você pode fazer é calar as mensagens do comando, já que você sabe que ele esta funcionando correntamente.
$upload = @move_uploaded_file($_FILES['arquivo']['tmp_name'],$envia);
o @ na frente dos comandos faz o calar qualquer saida que el possa vir a ter. só aconselho em caso de WARNNG pois senao você nunca localizaria um determinado erro.
outra saida é usar o comando copy no lugar do move_uploaded_file. Servidores bem configurados limpa periodicamente a pasta temporaria. Não havendo necessidade de se preocupar com isso.
Quanto aarmazenar o THUMB no servidor, acho util dar uma lida na minha resposta nesse outro tópico:
http://forum.imaster...veis-de-upload/
Pois é, eu pensei em usar o @ e tal, mas não gosto muito de calar estas mensagens.
Vou fazer alguns testes de acordo com o tópico que tu me indico e utilizando a função "copy" pra ver qual tem melhor resultado! :)
Valeu aí cara!
[]s
Veja esse LINK
Clique aqui http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Garota depois eu posto o exemplo aqui bj http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif