您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 菜鸟吧APP1.0于2024.9.15 正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > pbootcms >
    PbootCms缩略图裁剪优化居中裁剪(直接上干货)
    时间:2024-11-21 20:13 作者:菜鸟哥 浏览:收藏 挑错 打印

    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像素的居中裁剪过的图片。

    收工。

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

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    pbootcms标题和摘要描述字数控制标签pbootcms标题和摘要描述字数控制标签
    PbootCMS采集工具推荐及采集注意事项PbootCMS采集工具推荐及采集注意事项
    pbootcms模板报错提示PHP Warning: Unknown: open_basedir restrictionpbootcms模板报错提示PHP Warning: Unk