创建完美缩略图

时间:2013-03-02 15:53:33

标签: php

下面的代码工作没有任何错误,但我的问题是当我创建缩略图有时缩略图是不可理解的(一些条件,如宽度非常大于高度)我也尝试了自动计算高度的代码。但它不会完美有效。我想要一个每次创建一个可理解的缩略图的代码。(可以生成裁剪的缩略图)

function make_thumb($src, $dest, $desired_width)
{
    $source_image = imagecreatefromjpeg($src);
    $width = imagesx($source_image);
    $height = imagesy($source_image);

    //even if height is calculated automatically using
    $desired_height = floor($height * ($desired_width / $width));

    $virtual_image = imagecreatetruecolor($desired_width, $desired_height);
    imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
    imagejpeg($virtual_image, $dest);
}

3 个答案:

答案 0 :(得分:1)

您可以使用Class SimpleImage,例如:

// Usage:
// Load the original image
$image = new SimpleImage('lemon.jpg');

// Resize the image to 600px width and the proportional height
$image->resizeToWidth(600);
$image->save('lemon_resized.jpg');

您可以在class https://gist.github.com/miguelxt/908143

上找到此github

答案 1 :(得分:1)

我写了一个脚本来制作风景或肖像图像。可能这会对你有所帮助

<?php
    $thumbWidth = 200; // can change it to whatever required
    $thumbHeight = 200; // can change it to whatever required

    $img = imagecreatefromstring(file_get_contents('SAM_1883.JPG'));
    $imgWidth = imagesx($img);
    $imgHeight = imagesy($img);

    $imgStart_x = 0;
    $imgStart_y = 0;
    $imgEnd_x = $imgWidth;
    $imgEnd_y = $imgHeight;

    if($imgWidth > $imgHeight){
        $diff = $imgWidth - $imgHeight;
        $imgStart_x = $diff / 2;
        $imgEnd_x = $imgWidth - $diff;
    }else{
        $diff = $imgHeight - $imgWidth;
        $imgEnd_y = $imgHeight - $diff;
    }

    $dest = imagecreatetruecolor($thumbHeight,$thumbHeight);
    imagecopyresized($dest, $img, 0, 0, $imgStart_x, $imgStart_y, $thumbWidth, $thumbHeight, $imgEnd_x, $imgEnd_y);
    imagePNG($dest,'abc'.rand(0,9999).'.png');
?>

但是,您可以根据自己的要求更改来源,拇指宽度,拇指高度和目的地。

答案 2 :(得分:0)

https://github.com/lencioni/SLIR可以动态调整图片大小。它会将图像缓存在服务器上,并使其可以在浏览器和代理服务器上缓存。加载图像时会发生调整大小,而不是在加载HTML时,因此HTML加载速度更快。