Ir para conteúdo

POWERED BY:

Arquivado

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

Diego Velox

[Resolvido] Como cortar + redimensionar uma imagem sem perder a r

Recommended Posts

Bom galera é o seguinte, quero transformar uma imagem 1024x768 para 1280x800, para isso usei imagecopyresized:

 

<?php
// File and new size
$filename = 'teste.jpg';
 
// Content type
header('Content-type: image/jpeg');
 
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = 1280;
$newheight = 800;
 
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
 
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 64, $newwidth, $newheight, 1024, 640);
 
// Output
imagejpeg($thumb);
?>

 

Como podem ver, a imagem de 1024x768 é cortada (embaixo e em cima) para 1024x640 para depois ser aumentada para 1280x800.

 

Dai o que acontece?

A imagem perde muita resolução, vejam só:

 

1024x768 (original)

http://img521.imageshack.us/img521/9751/lamborghinigallardo5wal.jpg

 

1200x880

http://img26.imageshack.us/img26/9751/lamborghinigallardo5wal.jpg

 

Existe alguma solução pra ficar menos distorcida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar imagecopyresampled() em vez de imagecopyresized().

 

Deve melhorar a qualidade, mas, você sabe, você está ampliando uma imagem e naturalmente ela perde qualidade no processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei a SOLUÇÃO para caso alguém um dia precise, está aqui:

 

<?php
$imagem = $_GET['imagem'];
$resolucao = $_GET['resolucao'];
$filename = "seusite/sistemas/postarwallpapers/wallpapers/$imagem";
if($resolucao=='1024x768'){
echo '<img src="'.$filename.'">';
}
else{
ini_set("memory_limit", "16M");
header('Content-type: image/jpeg');

$source = imagecreatefromjpeg($filename);

switch($resolucao){
case '1280x800':
$novaLargura = 1280;
$novaAltura = 800;
$newwidth2 = 1024;
$newheight2 = 640;
$top = 64;
$left = 0;
break;
case '1440x900':
$novaLargura = 1440;
$novaAltura = 900;
$newwidth2 = 1024;
$newheight2 = 640;
$top = 64;
$left = 0;
break;
case '1280x1024':
$novaLargura = 1280;
$novaAltura = 1024;
$newwidth2 = 960;
$newheight2 = 768;
$top = 0;
$left = 32;
break;
case '1366x768':
$novaLargura = 1366;
$novaAltura = 768;
$newwidth2 = 960;
$newheight2 = 768;
$top = 0;
$left = 32;
break;
}

$larguraOriginal = imagesx($source);
$alguraOriginal = imagesy($source);

$larguraCalc = $larguraOriginal / $novaLargura;
$alturaCalc = $alguraOriginal / $novaAltura;

$min = min($larguraCalc, $alturaCalc);
$xt = $min * $novaLargura;
$x1 = ($larguraOriginal - $xt) / 2;
$x2 = $larguraOriginal - $x1;
$yt = $min * $novaAltura;
$y1 = ($alguraOriginal - $yt) / 2;
$y2 = $alguraOriginal - $y1;
$x1 = (int) $x1;
$x2 = (int) $x2;
$y1 = (int) $y1;
$y2 = (int) $y2;

$thumb = imagecreatetruecolor($novaLargura, $novaAltura);

// modifica..
imagecopyresampled($thumb, $source, 0, 0, $x1, $y1, $novaLargura, $novaAltura, $x2-$x1, $y2-$y1);

// finaliza, com qualidade 100%. :)
imagejpeg($thumb, "", 100);
}
?>

Adaptei o código com as 5 resoluções mais usadas hoje (15/09/2010), então agradeço a todos que tentaram me ajudar aqui.

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.