对于我运行的网站,用户可以将他们绘制的图片上传到图库。我们创建一个缩略图和该图像的小视图以显示给其他用户(单击小视图图像显示完整大小的图像)。
考虑到这一点,我创建了一个非常简单的调整大小脚本。在大多数情况下,此脚本完美运行。但是,我遇到了一个奇怪的案例,其中脚本完全混乱。
当通过脚本运行文件http://img191.imageshack.us/img191/2268/935full.png(1641x3121)时(创建一个最大宽度或高度为150而另一个为400的缩略图),我们得到一个完美的缩略图http://img267.imageshack.us/img267/5803/935thumb.png(78x150)和小视图图像尺寸正确,但被剪切并拉伸http://img28.imageshack.us/img28/4002/935show.png(211 x 400)。
考虑到这一点,我的问题是:这是PHP中的问题还是逻辑错误?我该如何解决?
感谢您的时间。我用来创建这些缩略图的代码如下。
<?php
/**
* Creates a thumbnail for any type of pre-existing image. Always saves as PNG image
*
* @param string - The location of the pre-existing image.
* @param string - The location to save the thumbnail, including filename and extension.
* @param int - The Maximum Width, Default of 150
* @param int - The Maximum Height, Default of 150
* @return bool - Success of saving the thumbnail.
*/
function imagecreatethumbnail($file,$output,$max_width = 150,$max_height = 150)
{
$img = imagecreatefromstring(file_get_contents($file));
list($width, $height, $type, $attr) = getimagesize($file);
if($height > $max_height || $width > $max_width)
{
if($width > $height)
{
$thumb_width = $max_width;
$thumb_height = ceil(($height * $thumb_width)/$width);
}
else
{
$thumb_height = $max_height;
$thumb_width = ceil(($width * $thumb_height)/$height);
}
} else {
$thumb_width = $width;
$thumb_height = $height;
}
imagesavealpha($img,true);
$thumb = imagecreatetruecolor($thumb_width,$thumb_height);
imagesavealpha($thumb,true);
imagealphablending($thumb,false);
imagecopyresampled($thumb,$img,0,0,0,0,$thumb_width,$thumb_height,$width,$height);
$return = imagepng($thumb,$output);
imagedestroy($img);
imagedestroy($thumb);
return $return;
}
答案 0 :(得分:0)
您是否尝试过删除ceil()函数?无论如何,图像函数会自动将浮点数转换为整数。
修改强>
看看是否有效:
if($width > $max_width && $height * $thumb_width / $width < $max_width)
{
$thumb_width = $max_width;
$thumb_height = $height * $thumb_width / $width;
}
elseif($height > $max_height && $width * $thumb_height / $height < $max_height)
{
$thumb_height = $max_height;
$thumb_width = $width * $thumb_height / $height;
}
else
{
$thumb_width = $width;
$thumb_height = $height;
}
答案 1 :(得分:0)
试试这个库并告诉我是否会发生同样的情况:
答案 2 :(得分:0)
这似乎是PHP中的一个错误。