Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma galeria e quero gerar uma thumb quadrada do centro da imagem para exibição na galeria! E ao clicar na foto, aparece a imagem full.
O upload da imagem full já funciona tranquilo e exibição também, mas a thumb atual que utilizo é a imagem full redimensionada pra 180x180. Quando a imagem é retangular, fica horrorosa.
Preciso COPIAR uma parte quadrada (180x180) do centro da imagem e copiar para uma pasta.
Como fazer?
Meu codigo atual de upload:
<div class="esconde">
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="imagem" required class="file" accept="image/*">
<input type="submit" class="submit" name="adicionar" value="Adicionar Imagem">
</form>
</div>
<?php if (isset($_POST['adicionar'])) {
if (strlen($_FILES['imagem']['name']) > 2) {
$imagem = remove_acentos($_FILES['imagem']['name']);
$imagem_tamanho = $_FILES['imagem']['size'];
$imagem_tipo = $_FILES['imagem']['type'];
$filecheck = basename($imagem);
$ext = strtolower(substr($filecheck, strrpos($filecheck, '.') + 1));
if (!(($ext == "jpg" || $ext == "gif" || $ext == "png") && ($_FILES["imagem"]["type"] == "image/jpeg" || $_FILES["imagem"]["type"] == "image/gif" || $_FILES["imagem"]["type"] == "image/png")))
{ ?>
<div class="red_alert">
<p> Arquivos de extensão <strong>.<?php echo $ext; ?></strong> não podem ser aceitos. Apenas .jpg, .png e .gif são permitidos.</p>
</div>
<?php mysql_close(); } elseif (!($_FILES["imagem"]["size"] < 2120000)) { ?>
<div class="red_alert">
<p>A foto deve ter no máximo 2MB. Tente novamente.</p>
</div>
<?php mysql_close(); }
elseif (empty($_FILES['imagem'])) { ?>
<div class="red_alert">
<p>Você não selecionou nenhuma foto. Tente novamente.</p>
</div>
<?php mysql_close(); } else {
// sucesso! cadastra a imagem
$imagem_data = date_default_timezone_set('America/Sao_Paulo');
$uploaddir = "../uploads/fotos/";
$rename = mktime();
if ($imagem != "")
{
if (file_exists($uploaddir.$imagem))
{
$imagem = $rename."_".$imagem;
}
}
move_uploaded_file($_FILES['imagem']['tmp_name'], $uploaddir . $imagem);
$query_ft = mysql_query("INSERT INTO fotos (imagem, id_galeria) VALUES ('$imagem','$id_m')");
}
?>
Funciona bem.
Faz o upload pra pasta. Salva o nome dela no banco e eu puxo pela pagina de exibição, normal.
Agora só falta o thumb, como expliquei acima.
Obrigado!
Legal, gera a thumb, mas acho que não é bem isso.
Eu não quero visualizar o thumb na hora do upload nem nada disso.
Quero apenas que o sistema gere a foto da variavel $imagem na pasta "/thumbs/".
Aí no inicio mostra 2.jpg e no final voce diz para salvar o arquivo, rs.
Como faço o que quero?
oBrigado pela força!
Você leu os comentários no código e os links das documentações que passei?
Esse código está bem mastigado mano... dá uma lida nos comentários e nos links das documentações que ele já tem tudo o que você pediu no seu tópico :thumbsup:
>
Tenho uma galeria e quero gerar uma thumb quadrada do centro da imagem para exibição na galeria! E ao clicar na foto, aparece a imagem full.
O upload da imagem full já funciona tranquilo e exibição também, mas a thumb atual que utilizo é a imagem full redimensionada pra 180x180. Quando a imagem é retangular, fica horrorosa.
Preciso COPIAR uma parte quadrada (180x180) do centro da imagem e copiar para uma pasta.
Como fazer?
Para saber como salvar em uma pasta, é só ler na documentação o que a função imagejpeg faz (como disse no comentário: "exibe na tela. aqui você pode salvar em arquivo").
@braços e fique com Deus!
Desculpe, eu li a documentação e não entendi muito bem.
No meu código, como faço para duplicar essa imagem:
move_uploaded_file($_FILES['imagem']['tmp_name'], $uploaddir . $imagem);
e começar o tratamento da thumb?
Não consegui interpretar muito bem ainda, to bem confuso.
Troque
$imagePath = '/www/2.jpg';
por
$imagePath = $_FILES['imagem']['tmp_name'];
e troque
imagejpeg($thumbRes);
por
imagejpeg($thumbRes, $uploaddir . $imagem);
Nota: recomendo estudar e ler com calma os tópicos e documentações que são passadas à você, assim ficará mais fácil para você ampliar seu conhecimento e desenvolver novas soluções a partir de problemas que encontrar :thumbsup: .
@braços e fique com Deus!
Está dando erro.
A pasta é outra, entao digitei manualmente.
o imagePath ta dando erro. Só gera uma imagem preta!
Veja como está:
<div class="esconde">
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="imagem" required class="file" accept="image/*">
<input type="submit" class="submit" name="adicionar" value="Adicionar Imagem">
</form>
</div>
<?php if (isset($_POST['adicionar'])) {
if (strlen($_FILES['imagem']['name']) > 2) {
$imagem = remove_acentos($_FILES['imagem']['name']);
$imagem_tamanho = $_FILES['imagem']['size'];
$imagem_tipo = $_FILES['imagem']['type'];
$filecheck = basename($imagem);
$ext = strtolower(substr($filecheck, strrpos($filecheck, '.') + 1));
if (!(($ext == "jpg" || $ext == "gif" || $ext == "png") && ($_FILES["imagem"]["type"] == "image/jpeg" || $_FILES["imagem"]["type"] == "image/gif" || $_FILES["imagem"]["type"] == "image/png")))
{ ?>
<div class="red_alert">
<p> Arquivos de extensão <strong>.<?php echo $ext; ?></strong> não podem ser aceitos. Apenas .jpg, .png e .gif são permitidos.</p>
</div>
<?php
mysql_close(); } elseif (!($_FILES["imagem"]["size"] < 2120000)) { ?>
<div class="red_alert">
<p>A foto deve ter no máximo 2MB. Tente novamente.</p>
</div>
<?php
mysql_close(); } elseif (empty($_FILES['imagem'])) { ?>
<div class="red_alert">
<p>Você não selecionou nenhuma foto. Tente novamente.</p>
</div>
<?php
mysql_close(); } else {
// sucesso! cadastra a imagem
$imagem_data = date_default_timezone_set('America/Sao_Paulo');
$uploaddir = "../uploads/fotos/";
$rename = mktime();
if ($imagem != "")
{
if (file_exists($uploaddir.$imagem))
{
$imagem = $rename."_".$imagem;
}
}
move_uploaded_file($_FILES['imagem']['tmp_name'], $uploaddir . $imagem);
// caminho da imagem que será a fonte
$imagePath = $_FILES['imagem']['tmp_name'];
// tamanho da miniatura a ser gerada
$thumbWidth = 180;
$thumbHeight = 180;// posição inicial de copia
$startX = $imgWidth/2 - $thumbWidth/2;
$startY = $imgHeight/2 - $thumbHeight/2;
// cria o resource de imagem da miniatura e da imagem fonte
$thumbRes = imagecreatetruecolor($thumbWidth, $thumbHeight);
$imageRes = imagecreatefromstring(file_get_contents($imagePath));
// copia da fonte para a miniatura
imagecopy($thumbRes, $imageRes, 0, 0, $startX, $startY, $thumbWidth, $thumbHeight);
// exibe na tela. aqui você pode salvar em arquivo
imagejpeg($thumbRes, '../uploads/thumbs/' . $imagem);
}
$query_ft = mysql_query("INSERT INTO fotos (imagem, id_galeria) VALUES ('$imagem','$id_m')");
}
?>
O erro que aparece:
Warning: getimagesize(/tmp/phpa5VApJ): failed to open stream: No such file or directory in /home/projetoa/public_html/eventosagora/painel/galeria.php on line 159 Warning: file_get_contents(/tmp/phpa5VApJ): failed to open stream: No such file or directory in /home/projetoa/public_html/eventosagora/painel/galeria.php on line 167 Warning: imagecreatefromstring(): Empty string or invalid image in /home/projetoa/public_html/eventosagora/painel/galeria.php on line 167 Warning: imagecopy() expects parameter 2 to be resource, boolean given in /home/projetoa/public_html/eventosagora/painel/galeria.php on line 170
O que fazer?
Mas não vai funcionar mesmo do jeito que você colocou :)
Você deu um move_uploaded_file antes de gerar o thumb!
Logo, a imagem não existe mais no mesmo caminho de $_FILES["imagem"]["tmp_name"].
Dá uma lida no seu código para ver onde você está errando.
@braços e fique com Deus!
Agora sim entendi!
Achei que seria um processo a parte para a imagem full e um só pra thumb.
Já sei que vai funcionar!
Obrigado mesmo, pela paciencia tambem. rs
Até mais!
imagecopy
imagecreatetruecolor
// caminho da imagem que será a fonte
$imagePath = '/www/2.jpg';
// tamanho da miniatura a ser gerada
// tamanho da imagem original
list($imgWidth, $imgHeight) = getimagesize($imagePath);
// posição inicial de copia
// cria o resource de imagem da miniatura e da imagem fonte
// copia da fonte para a miniatura
imagecopy($thumbRes, $imageRes, 0, 0, $startX, $startY, $thumbWidth, $thumbHeight);
// exibe na tela. aqui você pode salvar em arquivo
imagejpeg($thumbRes);
@braços e fique com Deus!