我想知道是否有人可以帮助我使用PHP编写的图像大小调整功能但是必须重新调整图像大小,但是像PHPThumb那样。因此,如果我设置新图像的宽度和高度,该函数必须适合上传的图像(和宽高比)新的宽度和高度。
感谢任何帮助。
谢谢。
答案 0 :(得分:7)
几年前我写过这篇文章,它正是你所寻找的。请记住,这只计算宽度和高度,您必须自己调用Imagick来实际应用这些计算。
/**
* ImageIntelligentResize()
*
* @global Intelligently resizes images using a providid max width and height
* @param mixed $imagePath
* @param mixed $maxWidth
* @param mixed $maxHeight
* @param mixed $alwaysUpscale
* @return
*/
function ImageIntelligentResize( $imagePath, $maxWidth, $maxHeight, $alwaysUpscale )
{
// garbage in, garbage out
if ( IsNullOrEmpty($imagePath) || !is_file($imagePath) || IsNullOrEmpty($maxWidth) || IsNullOrEmpty($maxHeight) )
{
return array("width"=>"", "height"=>"");
}
// if our thumbnail size is too big, adjust it via HTML
$size = getimagesize($imagePath);
$origWidth = $size[0];
$origHeight = $size[1];
// Check if the image we're grabbing is larger than the max width or height or if we always want it resized
if ( $alwaysUpscale || $origWidth > $maxWidth || $origHeight > $maxHeight )
{
// it is so let's resize the image intelligently
// check if our image is landscape or portrait
if ( $origWidth > $origHeight )
{
// target image is landscape/wide (ex: 4x3)
$newWidth = $maxWidth;
$ratio = $maxWidth / $origWidth;
$newHeight = floor($origHeight * $ratio);
// make sure the image wasn't heigher than expected
if ($newHeight > $maxHeight)
{
// it is so limit by the height
$newHeight = $maxHeight;
$ratio = $maxHeight / $origHeight;
$newWidth = floor($origWidth * $ratio);
}
}
else
{
// target image is portrait/tall (ex: 3x4)
$newHeight = $maxHeight;
$ratio = $maxHeight / $origHeight;
$newWidth = floor($origWidth * $ratio);
// make sure the image wasn't wider than expected
if ($newWidth > $maxWidth)
{
// it is so limit by the width
$newWidth = $maxWidth;
$ratio = $maxWidth / $origWidth;
$newHeight = floor($origHeight * $ratio);
}
}
}
// it's not, so just use the current height and width
else
{
$newWidth = $origWidth;
$newHeight = $origHeight;
}
return array("width"=>$newWidth, "height"=>$newHeight);
}
答案 1 :(得分:3)
当我开始学习OOP时,我想this image class来练习自己。
它使用GD,当然可以改进,希望它有所帮助。
编辑:在我没有任何控制权的问题的2个downvotes之后,我把课程放在了牧场上。
请记住,该课程运作良好,但这是一种练习,以便学习基础知识OOP。
我希望这可以,你懒惰的用户;)
在圣诞节我们都是更好的人
答案 2 :(得分:2)
调整大小然后裁剪方法:计算源图像的纵横比并将其用作约束来创建一个中间图像,该中间图像将大于目标图像(宽度或高度) - 最后将中间图像裁剪为目标尺寸。
如果您可以依赖服务器上安装的ImageMagick,它提供的功能远远多于GD。
答案 3 :(得分:2)
从我的理解来看,OP的问题更多的是关于计算新维度,而不是调整大小
@Psyche,这实际上是一个简单的算术问题。假设您有一个640x480的图像,并希望在200x200“框”中显示它。
$sw = 640; $sh = 480;
$dw = 200; $dh = 200;
找出盒子的纵横比,将其与原件的纵横比进行比较,并计算新图像的高度宽度
$sr = $sw / $sh;
$dr = $dw / $dh;
if($sr > $dr)
$dh = round($dw / $sr);
else
$dw = round($dh * $sr);
这为您提供了200x150,这是缩放原始图像所需的尺寸
答案 4 :(得分:0)
我会使用GD或ImageMagick。两个伟大的图书馆都可以做到这一点。
答案 5 :(得分:0)