探讨下缩略图算法的实现(70行实现和3行实现)

nozerock 2012-07-23 10:50:11
前几天在找缩略图算法的时候发现网上的算法和我想的不太一样
这个是原帖
http://www.open-open.com/lib/view/open1337330620354.html

这个是我写的
当然,某些部分是参考上面的一篇帖子的

public function createThumbImage($SourcePath, $SavePath)
{
if(!is_file($SourcePath))
{return false;}
$FilePath = pathinfo($SourcePath);
$FileExt = $FilePath['extension'];
if(!$this->checkFileExt($FileExt))
{return false;}
$createfun = 'imagecreatefrom' . ($FileExt == 'jpg' ? 'jpeg' : strtolower($FileExt));

$ImgInfo = getimagesize($SourcePath);
$SourceW = floatval($ImgInfo[0]);
$SourceH = floatval($ImgInfo[1]);
$NewW = $TargetW = floatval($this->DefaultWidth);
$NewH = $TargetH = floatval($this->DefaultHeight);
(($SourceW / $SourceH) <= ($TargetW / $TargetH)) ? $NewH = $SourceH * ($TargetW / $SourceW) : $NewW = $SourceW * ($TargetH / $SourceH);
$x = ($TargetW - $NewW) / 2;
$y = ($TargetH - $NewH) / 2;

$SourceImg = $createfun($SourcePath);
$TargetImg = imagecreatetruecolor($TargetW, $TargetH);
if(function_exists('imagecopyresampled'))
{
imagecopyresampled($TargetImg, $SourceImg, $x, $y, 0, 0, $NewW, $NewH, $SourceW, $SourceH);
}
else
{
imagecopyresized($TargetImg, $SourceImg, $x, $y, 0, 0, $NewW, $NewH, $SourceW, $SourceH);
}
return $this->saveImageByExt($TargetImg, $FileExt, $SavePath);
}

关键实现的是这几行

$NewW = $TargetW = floatval($this->DefaultWidth);
$NewH = $TargetH = floatval($this->DefaultHeight);
(($SourceW / $SourceH) <= ($TargetW / $TargetH)) ? $NewH = $SourceH * ($TargetW / $SourceW) : $NewW = $SourceW * ($TargetH / $SourceH);

我想请教下这样实现有什么弊端么?
...全文
155 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2012-07-23
  • 打赏
  • 举报
回复
其实就是等比例缩放 ,你运行下就知道。可能清晰度不如原图。
nozerock 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
其实就是等比例缩放 ,你运行下就知道。可能清晰度不如原图。
[/Quote]
其实我觉得缩略图三个字已经包含你说的意思了

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧