php图片比例不失真,PHP中图片实现等比例不失真缩放

笔者在设计http://www.cityxii.cn的主页过程中,有遇到图片缩放问题。由于页面的图片是从论坛里面抽取,而用户在论坛里面所发图片大小不一,展示出来难免会要变形。

http://www.cityxii.cn的主页使用的是SUPESITE7.0,论坛使用discuz7。笔者在这里先把思路理一理:

首先,PHP支持图片的创建、修改。不过依赖GD库。

其次,如何调用PHP图片缩放函数。这里笔者采用GET方法传递参数给图片缩放的代码文件。

下面笔者先把PHP图片缩放的代码贴出来,然后根据代码解释编写思路。

1: $imgpath=$_GET['img'];

2: if ($_GET['w'] != '' && $_GET['h'] != ''){

3: $initWidth = $_GET['w'];

4: $initHeight = $_GET['h'];

5: }else{

6: $initWidth = 340;

7: $initHeight = 270;

8: }

9: if(strpos($imgpath,'thumb.jpg')){

10: $imgpath = substr($imgpath,0,-10);

11: }

12:

13:

14: $im = @imagecreatefromjpeg($imgpath);

15: $imgSize = GetImageSize($imgpath);

16: $imgWidth = $imgSize[0];

17: $imgHeight = $imgSize[1];

18: $proportion = max($initWidth/$imgWidth,$initHeight/$imgHeight);

19: $newImgWidth = $imgWidth*$proportion;

20: $newImgHeight = $imgHeight*$proportion;

21: $tmpImg = imagecreatetruecolor($newImgWidth,$newImgHeight);

22: imagecopyresized($tmpImg, $im, 0, 0, 0, 0, $newImgWidth, $newImgHeight, $imgWidth, $imgHeight);

23:

24: $thumb = imagecreatetruecolor($initWidth, $initHeight);

25: $diffWidth = $newImgWidth > $initWidth ? $newImgWidth - $initWidth : $initWidth - $newImgWidth;

26: $diffHeight = $newImgHeight > $initHeight ? $newImgHeight - $initHeight : $initHeight - $newImgHeight;

27:

28: $x = $diffWidth/2;

29: //$y = $diffHeight/3;

30: $y = 0;

31:

32: imagecopy($thumb, $tmpImg, 0, 0, $x, $y, $initWidth, $initHeight);

33:

34: header('Content-type:image/jpeg');

35: // Output

36: imagejpeg($thumb);

37: ImageDestroy($thumb);

解释一下以上代码。

1. 获得图片的URL,以及最终高宽。

2. line 9 是抽取UCHOME的相册图片,所需的修改。系统默认抽取相册图片本来就是缩略图,也就是以thumb.jpg结尾的图片,过滤掉。

3. line 14~17 导入并获得图片的宽高,line 18~22 计算缩放比例。依最大缩放比例修改原始图片。

4. line 24 后面就是把第3步缩放的图片,COPY到最终宽高图片。

然后,笔者把调用代码给出,以供参考。

1: [Image]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值