pbootcms的图片裁剪确保无论图片是横图还是竖图,都能居中裁剪

COS、CDN

解决方案

  1. 找到裁剪缩略图的方法

    • 文件位置:/core/function/file.php
    • 搜索:function cut_img,大约在447行
  2. 优化cut_img方法

    • 实现居中裁剪功能

优化代码

以下是优化后的cut_img函数代码:

// 剪切图片 function cut_img($src_image, $out_image = null, int $new_width = null, int $new_height = null, $img_quality = 90) {     // 输出地址     if (! $out_image) {         $out_image = $src_image;     }      // 读取配置文件设置     if (! $new_width && ! $new_height) {         return;     }      // 获取图片属性     list($width, $height, $type, $attr) = getimagesize($src_image);      // 根据图片类型创建资源     switch ($type) {         case IMAGETYPE_GIF:             $img = imagecreatefromgif($src_image);             break;         case IMAGETYPE_JPEG:             $img = imagecreatefromjpeg($src_image);             break;         case IMAGETYPE_PNG:             $img = imagecreatefrompng($src_image);             break;         default:             return;     }      // 计算裁剪区域     $crop_width = min($width, $new_width);     $crop_height = min($height, $new_height);     $crop_x = intval(($width - $crop_width) / 2); // 居中裁剪     $crop_y = intval(($height - $crop_height) / 2); // 居中裁剪      // 创建新画布     $new_img = imagecreatetruecolor($new_width, $new_height);      // 创建透明画布,避免黑色背景     if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {         imagealphablending($new_img, false);         imagesavealpha($new_img, true);         $color = imagecolorallocatealpha($new_img, 255, 255, 255, 127);         imagefilledrectangle($new_img, 0, 0, $new_width, $new_height, $color);     }      // 裁剪并缩放     imagecopyresampled($new_img, $img, 0, 0, $crop_x, $crop_y, $new_width, $new_height, $crop_width, $crop_height);      // 保存新图片     switch ($type) {         case IMAGETYPE_GIF:             imagegif($new_img, $out_image);             break;         case IMAGETYPE_JPEG:             imagejpeg($new_img, $out_image, $img_quality);             break;         case IMAGETYPE_PNG:             imagepng($new_img, $out_image);             break;     }      // 释放资源     imagedestroy($img);     imagedestroy($new_img); }

 

COS、CDN
热门