迅睿CMS框架是一款PHP8高性能·簡(jiǎn)單易用的CMS開源開發(fā)框架,基于MIT開源許可協(xié)議發(fā)布,免費(fèi)且不限制商業(yè)使用,是免費(fèi)開源的產(chǎn)品,以萬端互聯(lián)為設(shè)計(jì)理念,支持的微信公眾號(hào)、小程序、APP客戶端、移動(dòng)端網(wǎng)站、PC網(wǎng)站等多終端式管理系統(tǒng)。
聯(lián)系官方銷售客服
1835022288
028-61286886
迅睿的縮略圖,可以從中間截取指定大小圖片嗎?
我看人家 wordpress 都可以,圖2,圖3!
圖3是長(zhǎng)圖,圖2的縮略圖是從圖3中截圖中間部分
為什么迅睿的指定大小會(huì)壓縮圖片是下面圖1這樣?
難道開發(fā)者覺得這樣的壓縮?符合常理?
只設(shè)置寬度,或者只設(shè)置高度!
會(huì)導(dǎo)致圖片長(zhǎng)短不一
我覺得還可以
你可以把代碼發(fā)給我,新版我在做一個(gè)函數(shù)
回復(fù)迅??蚣軇?chuàng)始人
理論上,迅睿默認(rèn)的裁剪應(yīng)該是符合產(chǎn)品類網(wǎng)站!
如果類似博客資訊類的,像 頭條 那樣,他們是直接裁剪的,不是壓縮等比!
官網(wǎng)的函數(shù)應(yīng)該是壓縮,而非裁剪類型的操作!
能不能先更新一下這個(gè)函數(shù)? 做模板用
你這個(gè)函數(shù)不行啊,報(bào)錯(cuò)了
回復(fù)迅睿框架創(chuàng)始人
直接存為 pic.php 是可以直接運(yùn)行的!
你這個(gè)亂碼,是圖片的碼吧!
把 header 注釋掉就不是流媒體啦!
然后 imagejpeg 后面加路徑,就會(huì)保存啦!?。。?!
//header('Content-Type: image/jpeg');
imagejpeg($target_image,'uploadfile/thumb/2.jpg');
png會(huì)報(bào)錯(cuò)
3個(gè)格式均可裁剪!
但是不居中裁剪,是從上到下的,理論上,可以設(shè)置居中還是居底,居頂裁剪!
// 獲得任意大小圖像,不足地方拉伸,不產(chǎn)生變形,不留下空白 function image_resize($src_file, $dst_file, $new_width, $new_height) { $source_info = getimagesize($src_file); $type = $source_info['mime']; //echo $type; $new_width = intval($new_width); $new_height = intval($new_height); if ($new_width < 1 || $new_height < 1) { echo "params width or height error !"; exit(); } if (!file_exists($src_file)) { echo $src_file . " is not exists !"; exit(); } //Load image switch($type){ case 'image/jpeg': $src_img = imagecreatefromjpeg($src_file); break; case 'image/png': $src_img = imagecreatefrompng($src_file); break; case 'image/gif': $src_img = imagecreatefromgif($src_file); break; default : echo "Load image error!"; exit(); } $w = imagesx($src_img); $h = imagesy($src_img); $ratio_w = 1.0 * $new_width / $w; $ratio_h = 1.0 * $new_height / $h; $ratio = 1.0; // 生成的圖像的高寬比原來的都小,或都大 ,原則是 取大比例放大,取大比例縮小(縮小的比例就比較小了) if (($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) { if ($ratio_w < $ratio_h) { $ratio = $ratio_h; // 情況一,寬度的比例比高度方向的小,按照高度的比例標(biāo)準(zhǔn)來裁剪或放大 } else { $ratio = $ratio_w; } // 定義一個(gè)中間的臨時(shí)圖像,該圖像的寬高比 正好滿足目標(biāo)要求 $inter_w = (int)($new_width / $ratio); $inter_h = (int)($new_height / $ratio); $inter_img = imagecreatetruecolor($inter_w, $inter_h); //var_dump($inter_img); imagecopy($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h); // 生成一個(gè)以最大邊長(zhǎng)度為大小的是目標(biāo)圖像$ratio比例的臨時(shí)圖像 // 定義一個(gè)新的圖像 ini_set ('memory_limit', '8M'); //更改PHP的內(nèi)存限制 $new_img = imagecreatetruecolor($new_width, $new_height); //var_dump($new_img);exit(); imagecopyresampled($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height, $inter_w, $inter_h); switch($type) { case 'image/jpeg': // 存儲(chǔ)圖像 imagejpeg($new_img, $dst_file, 100); break; case 'image/png': imagepng($new_img, $dst_file, 9); break; case 'image/gif': imagegif($new_img, $dst_file, 100); break; default : break; } }// end if 1 // 2 目標(biāo)圖像 的一個(gè)邊大于原圖,一個(gè)邊小于原圖 ,先放大平普?qǐng)D像,然后裁剪 // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) ) else { $ratio = $ratio_h > $ratio_w ? $ratio_h : $ratio_w; //取比例大的那個(gè)值 // 定義一個(gè)中間的大圖像,該圖像的高或?qū)捄湍繕?biāo)圖像相等,然后對(duì)原圖放大 $inter_w = (int)($w * $ratio); $inter_h = (int)($h * $ratio); $inter_img = imagecreatetruecolor($inter_w, $inter_h); //將原圖縮放比例后裁剪 imagecopyresampled($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h, $w, $h); // 定義一個(gè)新的圖像 $new_img = imagecreatetruecolor($new_width, $new_height); imagecopy($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height); switch($type) { case 'image/jpeg': // 存儲(chǔ)圖像 imagejpeg($new_img, $dst_file, 100); break; case 'image/png': imagepng($new_img, $dst_file, 9); break; case 'image/gif': imagegif($new_img, $dst_file, 100); break; default : break; } }// if3 }// end function //輸出新圖片 image_resize('1.gif', 'demo1.jpg', '210px', '140px');
要獲取圖片高度,然后計(jì)算裁剪的起點(diǎn)和結(jié)束點(diǎn),就可以居中裁剪了
從第一套代碼里獲取的
if ($source_ratio > $target_ratio){ // image-to-height $cropped_width = $source_width; $cropped_height = $source_width * $target_ratio; $source_x = 0; $source_y = ($source_height - $cropped_height) / 2; }elseif ($source_ratio < $target_ratio){ //image-to-widht $cropped_width = $source_height / $target_ratio; $cropped_height = $source_height; $source_x = ($source_width - $cropped_width) / 2; $source_y = 0; }else{ //image-size-ok $cropped_width = $source_width; $cropped_height = $source_height; $source_x = 0; $source_y = 0; }
做php縮微圖程序,用到了imagecopyresampled函數(shù),在網(wǎng)上找了很多說明也沒搞懂后面的參數(shù)到底是什么意思,試了很多遍終于明白。 bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h ,int $src_w , int $src_h ) $dst_image:新建的圖片 $src_image:需要載入的圖片 $dst_x:設(shè)定需要載入的圖片在新圖中的x坐標(biāo) $dst_y:設(shè)定需要載入的圖片在新圖中的y坐標(biāo) $src_x:設(shè)定載入圖片要載入的區(qū)域x坐標(biāo) $src_y:設(shè)定載入圖片要載入的區(qū)域y坐標(biāo) $dst_w:設(shè)定載入的原圖的寬度(在此設(shè)置縮放) $dst_h:設(shè)定載入的原圖的高度(在此設(shè)置縮放) $src_w:原圖要載入的寬度 $src_h:原圖要載入的高度
回復(fù)@嚴(yán)波
你有仔細(xì)看回復(fù)的內(nèi)容嗎?
只設(shè)置寬度,或者只設(shè)置高度!
會(huì)導(dǎo)致圖片長(zhǎng)短不一
我覺得還可以
你可以把代碼發(fā)給我,新版我在做一個(gè)函數(shù)
回復(fù)迅??蚣軇?chuàng)始人
理論上,迅睿默認(rèn)的裁剪應(yīng)該是符合產(chǎn)品類網(wǎng)站!
如果類似博客資訊類的,像 頭條 那樣,他們是直接裁剪的,不是壓縮等比!
官網(wǎng)的函數(shù)應(yīng)該是壓縮,而非裁剪類型的操作!
回復(fù)迅??蚣軇?chuàng)始人
能不能先更新一下這個(gè)函數(shù)? 做模板用
你這個(gè)函數(shù)不行啊,報(bào)錯(cuò)了
回復(fù)迅睿框架創(chuàng)始人
直接存為 pic.php 是可以直接運(yùn)行的!
回復(fù)迅睿框架創(chuàng)始人
你這個(gè)亂碼,是圖片的碼吧!
把 header 注釋掉就不是流媒體啦!
然后 imagejpeg 后面加路徑,就會(huì)保存啦!?。。?!
//header('Content-Type: image/jpeg');
imagejpeg($target_image,'uploadfile/thumb/2.jpg');
png會(huì)報(bào)錯(cuò)
回復(fù)迅??蚣軇?chuàng)始人
3個(gè)格式均可裁剪!
但是不居中裁剪,是從上到下的,理論上,可以設(shè)置居中還是居底,居頂裁剪!
要獲取圖片高度,然后計(jì)算裁剪的起點(diǎn)和結(jié)束點(diǎn),就可以居中裁剪了
從第一套代碼里獲取的
要獲取圖片高度,然后計(jì)算裁剪的起點(diǎn)和結(jié)束點(diǎn),就可以居中裁剪了
回復(fù)@嚴(yán)波
你有仔細(xì)看回復(fù)的內(nèi)容嗎?