0

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

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);
}
4

3 回答 3

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');
?>

但是,您可以根据需要更改拇指的源、拇指宽度、拇指高度和目的地。

于 2013-03-02T16:46:58.823 回答
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这里找到这个github https://gist.github.com/miguelxt/908143

于 2013-03-02T16:05:24.427 回答
0

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

于 2015-06-02T16:08:49.040 回答