为具有不同大小的图像创建固定缩略图尺寸

时间:2012-09-10 22:58:42

标签: php image

我只是想知道是否可以获得不同图像的尺寸,并为这些图片创建固定的缩略图尺寸测量值,而不会失去准确的宽高比。

到目前为止,我已经做了这些:

  • 调整不同图片的大小
  • 保持宽高比
  • NOT 提供相同的尺寸(例如:100px-高度和100px-宽度)

以下是我正在使用的代码:

<?php
require("dbinfo.php");

$allPhotosQuery = mysql_query (" SELECT * FROM `placesImages` ");

while ($allPhotosArray = mysql_fetch_assoc ($allPhotosQuery))
{
    $filename= $allPhotosArray['fileName'];
    $placeId = $allPhotosArray['placeId'];

    $imagePath = "placesImages/" . $placeId . "/" . $filename;
    $imageSize = getimagesize($imagePath);

    $imageWidth = $imageSize[0];
    $imageHeight = $imageSize[1];

    $newSize = ($imageWidth + $imageHeight)/($imageWidth*($imageHeight/45));
    $newHeight = $imageHeight * $newSize;
    $newWidth = $imageWidth * $newSize;

    echo "<img src='".$imagePath."' width='".$newWidth."' height='".$newHeight."' />";
}
?>

3 个答案:

答案 0 :(得分:0)

没有裁剪,制作缩略图时保持宽高比的最简单方法是做一些类似于你所拥有的东西,但设置一个固定的:

例如,如果您希望所有的tumb都是100px宽:

$imageWidth = $imageSize[0];
$imageHeight = $imageSize[1];
$ratio=ImageWidth/$imageHeight;
$newHeight=(int)$ratio*100;
$newWidth=100;

这一点需要注意的是,如果图像有一个有趣的比例,你最终可能会得到一些有趣的尺寸 - 因为它会愉快地继续前进并且就这样做。对代码中的比率进行某种检查可能是一个好主意 - 如果它太低或太高,请执行其他操作,否则请使用此标准流程。

答案 1 :(得分:0)

将此功能提供给原始图像的宽度和高度,然后是缩略图限制的最大限制,它会吐出一个数组,其中x / y应设置缩略图以保持纵横比。 (任何小于缩略图的内容都会被放大)

function imageResizeDimensions($source_width,$source_height,$thumb_width,$thumb_height)
{
  $source_ratio = $source_width / $source_height;
  $thumb_ratio = $thumb_width / $thumb_height;
  if($thumb_ratio > $source_ratio)
  {
    return array('x'=>$thumb_height * $source_ratio,'y'=>$thumb_height);
  }
  elseif($thumb_ratio < $source_ratio)
  {
    return array('x'=>$thumb_width,'y'=>$thumb_width/$source_ratio);
  }
  else
  {
    return array('x'=>$thumb_width,'y'=>$thumb_width);
  }
}

答案 2 :(得分:0)

让我们从两个常量thumb_widththumb_height开始,它们是缩略图图像所需的宽度和高度。它们可以是平等的,但不一定是。

如果您的图像宽度高于高(横向),我们可以将宽度设置为所需的缩略图宽度thumb_width,并调整高度以保持纵横比。

new_width = thumb_width
new_height = thumb_height * old_height / old_width

请参阅imagecreatetruecolor

然后,您可以将图像移动到缩略图范围内的垂直中心,从而产生letterbox效果。请参阅imagecopyresampled

new_y = (thumb_height - new_height) / 2

对于比它们宽(纵向)更高的图像,程序是相同的,但数学有点不同。

new_height = thumb_height
new_width = thumb_width * old_width / old_height

然后,您可以在缩略图的限制范围内水平居中。

new_x = (thumb_width - new_width) / 2

有关创建缩略图图像基础知识的更多信息,请参阅Resizing images in PHP with GD and Imagick