Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelo2605

Criando uma cópia redimensionada da imagem

Recommended Posts

Tenho um script que faz upload de imagens e preciso criar uma cópia rediemsionada desta imagem.

 

Tentei o seguinte:

 

 

 
$nome_final = md5(time()).'_imagem.jpg';
 
$new_width = 125;
$new_height = 125;
 
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($nome_final);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $largura, $altura);

 

A imagem original é carregada na pasta. Mas a cópia não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rockrgo,não deu certo. Vou colocar o script inteiro para ver se ajuda:

 

 

 
<?php
session_start();
if(isset($_SESSION['admin']) && $_SESSION['admin'] == true ) { 
 
if ($_FILES['arquivo']['name'] == "") {
echo "<script>alert('Voce não carregou o arquivo.');history.go(-1);</script>";
}else if ($_POST['galeria'] == ""){
echo "<script>alert('Selecione a galeria.');history.go(-1);</script>";
}else{
 
$_UP['pasta'] = '../teste/';
 
$_UP['tamanho'] = 1024 * 1024; // 1Mb
 
list($largura, $altura) = getimagesize($_FILES['arquivo']['tmp_name']);
 
$_UP['altura'] = 700; 
 
$_UP['extensoes'] = array('jpg', 'png', 'gif');
 
$_UP['renomeia'] = true;
 
$_UP['erros'][0] = 'Não houve erro';
$_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
$_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
$_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
$_UP['erros'][4] = 'Não foi feito o upload do arquivo';
 
if ($_FILES['arquivo']['error'] != 0) {
die("Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['arquivo']['error']]);
exit;
}
 
$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
if (array_search($extensao, $_UP['extensoes']) === false) {
echo "<script>alert('Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif.');history.go(-1);</script>";
}
 
else if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {
echo "<script>alert('O arquivo enviado é muito grande, envie arquivos de até 1Mb.');history.go(-1);</script>";
}
 
else if ($altura != $_UP['altura']) {
echo "<script>alert('A imagem deve ter 700px de altura.');history.go(-1);</script>";
}
 
else {
if ($_UP['renomeia'] == true) {
 
$nome_final = md5(time()).'_imagem.jpg';
 
$new_width = 125;
$new_height = 125;
 
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($nome_final);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $largura, $altura);
 
imagejpeg($image_p,$_UP['pasta'],75);
 
}
 
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
 
 
require_once('../connecting.php');
 
$stmt = $conn->prepare('INSERT INTO teste (galeria, imagem, largura, altura) VALUES(:galeria, :imagem, :largura, :altura)');
$stmt->execute(array(
 ':galeria' => $_POST['galeria'],
 ':imagem' => $nome_final,
 ':largura' => $largura,
 ':altura' => $altura,
));
header("Location: upload.php?addImagem=true");
 
} else {
echo "Não foi possível enviar o arquivo, tente novamente";
}
 
}
}
 
}else{
header("Location: index.php?login=false");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
$nome_final = md5(time()).'_imagem.jpg';
$image = imagecreatefromjpeg($nome_final); 

$new_width = 125;
$new_height = 125;
 
$image_p = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $largura, $altura); 
imagejpeg($image_p,$_UP['pasta'],75);
 
}

 

tenta assim como coloquei.....esse script ta retornando algum erro ? ou só não cria a cópia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é porque aqui só está sendo passado o caminho.

 

imagejpeg($image_p,$_UP['pasta'],75);

 

o caminho deve conter junto o nome da imagem

 

exemplo:

 

$caminho = "../teste/imagem.jpg";

Compartilhar este post


Link para o post
Compartilhar em outros sites

rockrgo,

 

Consegui salvar uma cópia do arquivo, mas apareceram alguns problemas:

 

1. O arquivo está preto.

 

2. Tentei usar o mesmo sistema de nomeação que uso para o arquivoi original e não deu certo:

 

 

 
$new_width = 125;
$new_height = 125;
 
$image_p = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $largura, $altura);
$image_p = md5(time()).'_thumb.jpg'; 
imagejpeg($image_p,"../teste/".$image_p,75);

Compartilhar este post


Link para o post
Compartilhar em outros sites
Oque o nosso amigo escreveu lah em cima esta correto! Mais no imagecreatefromjpeg deveria especificar o arquivo que foi enviado não?

 

$nome_final = md5(time()).'_imagem.jpg';
$image = imagecreatefromjpeg($_FILES['arquivo']['tmp_name']); //Nesta Linha
$new_width = 125; 
$new_height = 125; 

$image_p = imagecreatetruecolor($new_width, $new_height); 

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $largura, $altura); imagejpeg($image_p,$_UP['pasta'],75); }

 

dica que lhe Dou!

 

 

$validos = array("image/jpeg", "image/pjpeg", "image/png", "image/gif");
$extensao = $_FILES['arquivo']['type'];
if(!(in_array($extensao, $validos))){
   //seu erro

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dellacurtais,

 

Fiquei em dúvida agora: é necessário usar imagecreatefromjpeg e o imagecreatetruecolor juntos? Um só não basta?

 

Nesta linha:

 

$image = imagecreatefromjpeg($_FILES['arquivo']['tmp_name']);

Você copia a imagem do upload, certo?

 

Qual a necessidade desta linha?

 

$image_p = imagecreatetruecolor($new_width, $new_height); 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Qual a necessidade desta linha?

 

$image_p = imagecreatetruecolor($new_width, $new_height); 

 

esta linha está criando o identificador de imagem com as novas dimensões....ela que está criando a imagem preta que vc disse!

 

não tinha percebido este detalhe que o amigo Dellacurtais mencionou, mas acho que é por isso q não está copiando a imagem....nesta linha tem que passar o endereço completo da imagem original que vai ser copiada.

 

$image = imagecreatefromjpeg($_FILES['arquivo']['tmp_name']); //Nesta Linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

este exemplo funciona corretamente, mas ele grava na mesma imagem de origem. Vê se com base nele vc consegue corrigir o seu script

 

<?php

$destino = "../catalogos/avioes/mel1.jpg";

$origem = imagecreatefromjpeg("../catalogos/avioes/mel1.jpg");
$origem_x=imagesx($origem);//pega o width da imagem de origem
$origem_y=imagesy($origem);//pega o height da imagem de origem

$wid_final = $origem_x * 0.70;
$hei_final = $origem_y * 0.70;


$thumb = imagecreatetruecolor($wid_final, $hei_final );

imagecopyresampled($thumb , $origem, 0, 0, 0, 0, $wid_final, $hei_final, $origem_x, $origem_y);

imagejpeg($thumb,$destino,75);

imagedestroy($origem);
imagedestroy($thumb);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

rockrgo, parece que agora deu certo:

 

 

 
$nome_final = md5(time()).'_imagem.jpg';
$destino = $_UP['pasta'] . md5(time()).'_thumb.jpg';
$origem = imagecreatefromjpeg($_FILES['arquivo']['tmp_name']);
$width_thumb = 125;
$height_thumb = 125;
$thumb = imagecreatetruecolor($width_thumb, $height_thumb );
imagecopyresampled($thumb , $origem, 0, 0, 0, 0, $width_thumb, $height_thumb, $largura, $altura);
imagejpeg($thumb,$destino,75);

 

Uma dúvida: é necessário incluir essas duas linhas?

 

 

imagedestroy($origem);
imagedestroy($thumb);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

 

Uma dúvida: é necessário incluir essas duas linhas?

 

 

imagedestroy($origem);
imagedestroy($thumb);

 

é bom utilizar sim, porque ela libera o espaço na memória utilizado pela imagecreate...isso melhora o desempenho do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim

$origem_x=imagesx($origem);//pega o width da imagem de origem
$origem_y=imagesy($origem);//pega o height da imagem de origem

$wid_final = $origem_x * 0.70;
$hei_final = $origem_y * 0.70;

 

 

ele pega os valores originais da imagem e neste caso está reduzindo em 30%.....aí vc ajusta qual a porcentagem de redução que vc quer!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.