一区在线免费观看-一区在线免费-一区在线看-一区免费在线观看-日韩欧美网站

PbootCms縮略圖裁剪優化居中裁剪(直接上干貨)

發布時間:2021-10-31 21:04:39 作者:超級管理員 來源:本站 瀏覽量(1001) 點贊(242)
摘要:前言PbootCms默認的圖片裁剪是從左上角開始裁剪,使用width,height,maxwidth,maxheight等參數進行調節。但是裁剪出來的圖片始終感覺不是那么令人滿意。(也許是我不會用)比如多人物合影,PB默認的裁剪是左上,那么這個裁剪就會丟掉C位,那怎么能行。今天來優化一下裁剪圖片,讓他能簡單快捷的裁剪出理想的圖片。我想要的

前言

PbootCms默認的圖片裁剪是從左上角開始裁剪,使用widthheightmaxwidthmaxheight等參數進行調節。

但是裁剪出來的圖片始終感覺不是那么令人滿意。(也許是我不會用)

比如多人物合影,PB默認的裁剪是左上,那么這個裁剪就會丟掉C位,那怎么能行。

今天來優化一下裁剪圖片,讓他能簡單快捷的裁剪出理想的圖片。

我想要的效果是不論橫圖豎圖都是居中裁剪。

翠花,上干貨!

解決方案

首先找到裁剪縮略圖的方法,

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

搜索:function cut_img,大約在447行

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 1:            $img = imagecreatefromgif($src_image);            break;        case 2:            $img = imagecreatefromjpeg($src_image);            break;        case 3:            $img = imagecreatefrompng($src_image);            break;    }        // 不限定是等比例縮放    if (! $new_width) {        $new_width = floor($width * ($new_height / $height));    }    if (! $new_height) {        $new_height = floor($height * ($new_width / $width));    }    // 創建畫布    $new_img = imagecreatetruecolor($new_width, $new_height);        // 創建透明畫布,避免黑色    if ($type == 1 || $type == 3) {        $color = imagecolorallocate($new_img, 255, 255, 255);        imagefill($new_img, 0, 0, $color);        imagecolortransparent($new_img, $color);    }    // 先縮放    $scale = max($new_width / $width, $new_height / $height);    $scale_width = floor($scale * $width);    $scale_height = floor($scale * $height);    $scale_img = imagecreatetruecolor($scale_width, $scale_height); // 創建畫布    if(function_exists("ImageCopyResampled")) {       imagecopyresampled($scale_img, $img, 0, 0, 0, 0, $scale_width, $scale_height, $width, $height);    } else {       imagecopyresized($scale_img, $img, 0, 0, 0, 0, $scale_width, $scale_height, $width, $height);    }    //再裁剪    $start_x = ($scale_width - $new_width) / 2;    $start_y = ($scale_height - $new_height) / 2;    //拷貝剪切的圖像數據到畫板,生成剪切圖像    imagecopy($new_img, $scale_img, 0, 0, $start_x, $start_y, $scale_width, $scale_height);    check_dir(dirname($out_image), true); // 檢查輸出目錄        switch ($type) {        case 1:            imagegif($new_img, $out_image, $img_quality);            break;        case 2:            imagejpeg($new_img, $out_image, $img_quality);            break;        case 3:            imagepng($new_img, $out_image, $img_quality / 10); // $quality參數取值范圍0-99 在php 5.1.2之后變更為0-9            break;        default:            imagejpeg($new_img, $out_image, $img_quality);    }    imagedestroy($new_img);    imagedestroy($img);    return true;}

小伙伴可以直接復制替換該方法。

使用方法

舉個例子:列表中輸出圖片

{pboot:list scode=*}<a href= "[list:link]"><img src="[list:ico width=600 height=400]" /></a>{/pboot:list}

如上代碼,直接生成600*400像素的居中裁剪過的圖片。

收工。


二維碼

掃一掃,關注我們

打賞

取消

感謝您的支持,我會繼續努力的!

掃碼支持
掃碼打賞,你說多少就多少

打開支付寶掃一掃,即可進行掃碼打賞哦

我有話說:

評論記錄:

快來搶沙發~

感興趣嗎?

歡迎聯系我們,我們愿意為您解答任何有關網站疑難問題!