2012-09-10 273 views
1

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

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

  • 调整不同的图像
  • 保持它们的纵横比
  • 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."' />"; 
} 
?> 
+0

我相信,只有设置宽度将自动设置正确的高度。唯一需要做的是确保图像的高度永远不会高于固定宽度,否则你会表或任何你正在使用的,被扭曲。 – dbf

回答

0

短裁剪的,保持高宽比,同时使缩略图是做类似于你有什么事情最简单的方法,但设定一个固定的:

例如,如果你希望所有的tumbs为100像素宽:

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

与此需要提醒的是,你可能最终得到一些有趣的大小如果图像有一个有趣的比例 - 在它会很乐意继续前进,就去做。对代码中的比例进行某种检查可能是一个好主意 - 如果它太低或太高,请执行其他操作,否则使用此标准进程。

+0

这将导致相同的宽度,但高度不同。先生,我说得对吗? – JetPro

+1

@JetPro Yup,缺少裁剪,这是维持宽高比的唯一真正方法。对于大多数图片来说,它应该可以正常工作 - 如果您想要降低上限/下限来检查比率,请先:) – Fluffeh

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

’ s的两个常数,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