PHP-GD El cambio de tamaño de la imagen pierde la calidad de la imagen

Hice este fragmento de código, cambiará el tamaño de las imágenes sobre la marcha, si no puede encontrar la imagen solicitada, y luego la almacena.

El único problema con esto es que la imagen jpg de salida tiene baja calidad.

Me preguntaba si hay algo que deba cambiar para mejorar la calidad de la imagen.

if (isset($_GET['size'])) {
    $size = $_GET['size'];
}

if (isset($_GET['name'])) {
    $filename = $_GET['name'];
}

$filePath = "files/catalog/" . urldecode($filename);

// Content type

header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filePath);

if ($_GET["name"] && !$size) {
    $newwidth  = $width * $percent;
    $newheight = $height * $percent;

} else if ($_GET["name"] && $size) {
    switch ($size) {
        case "thumbs":
            $newwidth  = 192;
            $newheight = 248;
            break;
        case "large":
            $newwidth  = 425;
            $newheight = 550;
            break;
    }
}

$resizedFileName = $filename; 
$resizedFileName = str_replace(".jpg", "", $resizedFileName) . ".jpg";
$resizedFilePath = "files/catalog/" . urldecode($resizedFileName);


if (!file_exists($resizedFilePath)) {
    // Load
    $thumb  = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filePath);

    // Resize
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    // Output
    imagejpeg($thumb, $resizedFilePath);
    //file_put_contents($, $binarydata);

    $imageContent = file_get_contents($resizedFilePath);
    echo $imageContent;

} else {
    $imageContent = file_get_contents($resizedFilePath);
    echo $imageContent;
}

preguntado el 12 de junio de 12 a las 16:06

3 Respuestas

En lugar de imagecopyresized() debe usar imagecopyresampled () y imagejpeg () La función tiene un tercer parámetro opcional y puede especificar la calidad.

Respondido el 12 de junio de 12 a las 16:06

Probablemente porque estás usando imagejpeg() incorrecto, ¡la segunda variable en las funciones representa la calidad en porcentaje!

Respondido el 12 de junio de 12 a las 17:06

¿Quieres imagecopyresampled(). cambiar el tamaño funciona tirando píxeles innecesarios. resampleado() promediará las cosas y producirá resultados mucho más fluidos.

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.