解决php缩略图变形的问题

2 篇文章 0 订阅
2 篇文章 0 订阅

之前php生成缩略时候遇到问题,得到自己尺寸,变形.

以下生成php缩略函数自己前人基础修改,增加生成缩略位置,/*
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
*/所示.

其中13表示居中生成缩略图.而01表示部分生成缩略图.依次类推可以原图基本得到自己缩略以及尺寸.

下面函数原型,效率一般,如果朋友可以修改,最好了.

function createThumbs($SFile,$DFile,$DWidth,$DHeight,$SWidth,$SHeight,$Suf,$x)

{ //$SFile 源图片路径名称 : pic/pics/pic.jpg

//$DFile 目标图片路径,缩略存放路径 thumbs/thum/thum.jpg

//$DWidth  生成图片尺寸

//$DHeight 要生成的图片尺寸

//$SWidth 源图片尺寸宽 

//$SHeight  源图片尺寸高

//$Suf  图片名称 ,网站生成.jpggif两种格式,所以函数涉及两种格式.

//$x 缩略图片生成位置选择,如$x=3 ,左右居中 而$x=15时,居中,生成缩略

/*
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
*/
$rSor=$SWidth/$SHeight;  //源图片的宽和高比值
$rDes=$DWidth/$DHeight; 目标文件的宽和高比值
$SX=$SY=0;   //初始化X和Y轴偏移的值
$tw=$DWidth; //目标变量的宽度
$th=$DHeight; //目标变量的高度
$DWidth<230?$v=32:$v=97;  // 如果宽小于230,那就图片生成质量为32,否则是97 自己可以适当修改,最大值为100
if($rSor<$rDes){ //如果源比值比目标比值小,则..
$th=$DWidth/$rSor;
$SY=($DHeight-$th)/2;
}elseif($rSor>$rDes){ //如果源比值比目标比值大,则...
$tw=$rSor*$DHeight;
$SX=($DWidth-$tw)/2;

}//以上就是生成求得$SX和$SY值,也就使得上下和左右居中

//以下就是根据不同的$x值而生成不的$SX和$XY值.

switch($x){ //生成缩略图片的位置
case 1: $SX=0; $SY=0;break;
case 2: $SX*=0.5; $SY=0;break;
case 3: $SY=0;break;
case 4: $SX*=1.5; $SY=0;break;
case 5: $SX*=2; $SY=0;break;

case 6: $SX=0; $SY*=0.5;break;
case 7: $SX*=0.5; $SY*=0.5;break;
case 8: $SY*=0.5;break;
case 9: $SX*=1.5; $SY*=0.5;break;
case 10:$SX*=2; $SY*=0.5;break;

case 11:$SX=0; break;
case 12:$SX*=0.5; break;
case 13: break;
case 14:$SX*=1.5; break;
case 15:$SX*=2; break;

case 16:$SX=0; $SY*=1.5;break;
case 17:$SX*=0.5; $SY*=1.5;break;
case 18: $SY*=1.5;break;
case 19:$SX*=1.5; $SY*=1.5;break;
case 20:$SX*=2; $SY*=1.5;break;

case 21:$SX=0; $SY*=2;break;
case 22:$SX*=0.5; $SY*=2;break;
case 23: $SY*=2;break;
case 24:$SX*=1.5; $SY*=2;break;
case 25:$SX*=2; $SY*=2;break;
default:break;

}

下面这个不用介绍了,大家都知道.

$tn=imagecreatetruecolor($DWidth,$DHeight);
$Suf=='jpg'?$image=imagecreatefromjpeg($SFile):$image=imagecreatefromgif($SFile);
imagecopyresampled($tn,$image,round($SX),round($SY),0,0,round($tw),round($th),$SWidth,$SHeight);
imagejpeg($tn,$DFile,$v);
ImageDestroy($tn);

}


函数缺点生成动态gif格式缩略图片.其实我自己也很郁闷,这是php本身没有这样的功能,就是有那效率可就差得远了.

以上函数有什么缺点,还望各路高手斧正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值