title
菜鸟吧 首页 站长学堂 pbootcms教程 查看内容

PbootCms缩略图裁剪优化居中裁剪(直接上干货)

2024-11-21 20:13| 发布者: admin| 查看: 1| 评论: 0|原作者: 菜鸟哥

摘要: PbootCms模板默认的图片裁剪是从左上角开始裁剪,使用width,height,maxwidth,maxheight等参数进行调节。但是裁剪出来的图片始终感觉不是那么令人满意。(也许是我不会用)比…… ...

PbootCms模板默认的图片裁剪是从左上角开始裁剪,使用width,height,maxwidth,maxheight等参数进行调节。

但是裁剪出来的图片始终感觉不是那么令人满意。(也许是我不会用)

比如多人物合影,PB默认的裁剪是左上,那么这个裁剪就会丢掉C位,那怎么能行。

今天来优化一下裁剪图片,让他能简单快捷的裁剪出理想的图片。

我想要的效果是不论横图竖图都是居中裁剪。

翠花,上干货!

解决方案

首先找到裁剪缩略图的方法,

文件位置:/core/function/file.php

搜索:function cut_img,大约在447行

对cut_img方法进行优化,直接上代码:

01// 剪切图片

02functioncut_img($src_image, $out_image = null, int $new_width = null, int $new_height = null, $img_quality = 90)

03{

04// 输出地址

05if(! $out_image)

06$out_image = $src_image;

07

08// 读取配置文件设置

09if(! $new_width && ! $new_height)

10return;

11

12// 获取图片属性

13list ($width, $height, $type, $attr) = getimagesize($src_image);

14switch ($type) {

15case1:

16$img = imagecreatefromgif($src_image);

17break;

18case2:

19$img = imagecreatefromjpeg($src_image);

20break;

21case3:

22$img = imagecreatefrompng($src_image);

23break;

24}

25

26// 不限定是等比例缩放

27if(! $new_width) {

28$new_width = floor($width * ($new_height / $height));

29}

30if(! $new_height) {

31$new_height = floor($height * ($new_width / $width));

32}

33// 创建画布

34$new_img = imagecreatetruecolor($new_width, $new_height);

35

36// 创建透明画布,避免黑色

37if($type== 1 || $type== 3) {

38$color = imagecolorallocate($new_img, 255, 255, 255);

39imagefill($new_img, 0, 0, $color);

40imagecolortransparent($new_img, $color);

41}

42

43

44// 先缩放

45$scale = max($new_width / $width, $new_height / $height);

46$scale_width = floor($scale * $width);

47$scale_height = floor($scale * $height);

48$scale_img = imagecreatetruecolor($scale_width, $scale_height); // 创建画布

49if(function_exists("ImageCopyResampled")) {

50imagecopyresampled($scale_img, $img, 0, 0, 0, 0, $scale_width, $scale_height, $width, $height);

51} else{

52imagecopyresized($scale_img, $img, 0, 0, 0, 0, $scale_width, $scale_height, $width, $height);

53}

54//再裁剪

55$start_x = ($scale_width - $new_width) / 2;

56$start_y = ($scale_height - $new_height) / 2;

57

58//拷贝剪切的图像数据到画板,生成剪切图像

59imagecopy($new_img, $scale_img, 0, 0, $start_x, $start_y, $scale_width, $scale_height);

60

61check_dir(dirname($out_image), true); // 检查输出目录

62

63switch ($type) {

64case1:

65imagegif($new_img, $out_image, $img_quality);

66break;

67case2:

68imagejpeg($new_img, $out_image, $img_quality);

69break;

70case3:

71imagepng($new_img, $out_image, $img_quality / 10); // $quality参数取值范围0-99 在php 5.1.2之后变更为0-9

72break;

73default:

74imagejpeg($new_img, $out_image, $img_quality);

75}

76imagedestroy($new_img);

77imagedestroy($img);

78returntrue;

79}

小伙伴可以直接复制替换该方法。

使用方法

1{pboot:list scode=*}

2<a href= "[list:link]"><img src="[list:ico width=600 height=400]"/></a>

3{/pboot:list}


如上代码,直接生成600*400像素的居中裁剪过的图片。

收工。

举个例子:列表中输出图片


路过

雷人

握手

鲜花

鸡蛋

最新评论

Archiver 手机版 小黑屋 网站地图

Copyright © 2015-2026 菜鸟吧论坛 |找资源研究学习当然上菜鸟吧论坛

警告:本站所有资源收集世界互联网,请下载后24小时之内删除,否則後果自負!
WARNING: ‌All resources from the web. Delete within 24 hours or consequences at your own risk!
郑重声明:站内所有资源均来自互联网或会员投稿发布, 如果侵犯了权益请联系删除,E-mail:cainiaovip8@qq.com 商用请购买正版。

返回顶部