名站网址导航为大驾家提供DedeCMS站点程序站点教程相关的知识,比如织梦程序安装教程,织梦程序系统故障等教程。
刚才我在做一个织梦程序站的时候出现了一个问题就是不管怎样弄自动生成的缩略图网站文件在站点列表里都是失真的,变形很严重特别影响美观尤其是那种图片特别长的或者是特别宽的主要元素不集中的图片来说简直就是灾难。
好了,下面的相关具体操作方法咱们都用这张图片来演示一下吧咱们暂且叫它原图:
第一种相关具体操作方法:原生缩略图不用动不用改生成的缩略图
第二种相关具体操作方法:大众相关具体操作方法缩略图
操作流程:打开站点根目录下的include/helpers/网站文件夹中的“image.helper.php”网站文件。
查找如下相关具体代码如下:
$srcW=ImageSX($im); $srch=ImageSY($im); if($srcW<=$toW && $srch<=$toh ) return TRUE; $toWh=$toW/$toh; $srcWh=$srcW/$srch; if($toWh<=$srcWh){ $ftoW=$toW; $ftoh=$ftoW*($srch/$srcW); } else { $ftoh=$toh; $ftoW=$ftoh*($srcW/$srch); } 把上面的这些相关具体代码如下全部替换成下面的相关具体代码如下: $srcW=ImageSX($im); $srch=ImageSY($im); if($srcW<=$toW && $srch<=$toh ) return TRUE; $toWh=$toW/$toh; $srcWh=$srcW/$srch; $ftoh=$toh;$ftoW=$toW; if ($toWh<=$srcWh) { $src_Y = 0; $src_X = ($srcW-$srch*$toWh)/2; $srcW = $srch*$toWh; } else { $src_X = 0; $src_Y = ($srch-$srcW/$toWh)/2; $srch = $srcW/$toWh; } |
$srcW=ImageSX($im); $srch=ImageSY($im); if($srcW<=$toW && $srch<=$toh ) return TRUE; $toWh=$toW/$toh; $srcWh=$srcW/$srch; $ftoh=$toh;$ftoW=$toW; if ($toWh<=$srcWh) { $src_Y = 0; $src_X = ($srcW-$srch*$toWh)/2; $srcW = $srch*$toWh; } else { $src_X = 0; $src_Y = ($srch-$srcW/$toWh)/2; $srch = $srcW/$toWh; } |
上面的相关具体操作方法是超过缩略图大小的部分就进行裁剪如果说一张图片高是1000像素但只有中间有点20像素的图片则裁剪出来的缩略图就是空白,它剪的是左上角的部分,原理是把一张原图从左上角裁剪出织梦程序系统设置的高宽后其它的网站内容全部扔掉。可以对比本文开头的“原图”和“第二种相关具体操作方法”缩略图这两张图片。
第三种相关具体操作方法(强烈推荐):终极长宽高等比例自适应裁剪缩略图
操作流程:同相关具体操作方法二打开站点根目录下的include/helpers/网站文件夹中的“image.helper.php”网站文件。查找“缩图片自动生成系统数据库函数,来源支持bmp、gif、jpg、png”
看到了吧,在这些注释的下面从以下相关具体代码如下开始:
if ( ! function_exists('ImageResize')) |
到“获得GD的版本”这些注释结束的所有网站内容替换成下面的相关具体代码如下(注意是除注释外全部替换哦):
if ( ! function_exists('ImageResize')) { function ImageResize($srcFile,$toW,$toh,$toFile="") { global $cfg_photo_type; if($toFile=="") { $toFile = $srcFile; } $info = ""; $srcInfo = GetImageSize($srcFile,$info); switch ($srcInfo[2]) { case 1: if(!$cfg_photo_type['gif']) { return false; } $im = imagecreatefromgif($srcFile); break; case 2: if(!$cfg_photo_type['jpeg']) { return false; } $im = imagecreatefromjpeg($srcFile); break; case 3: if(!$cfg_photo_type['png']) { return false; } $im = imagecreatefrompng($srcFile); break; case 6: if(!$cfg_photo_type['bmp']) { return false; } $im = imagecreatefromwbmp($srcFile); break; } $srcW=ImageSX($im); $srch=ImageSY($im); if($srcW<=$toW && $srch<=$toh ) { return true; } //缩略生成并裁剪 $newW = $toh * $srcW / $srch; $newh = $toW * $srch / $srcW; if($newh >= $toh) { $ftoW = $toW; $ftoh = $newh; } else { $ftoW = $newW; $ftoh = $toh; } if($srcW>$toW||$srch>$toh) { if(function_exists("imagecreatetruecolor")) { @$ni = imagecreatetruecolor($ftoW,$ftoh); if($ni) { imagecopyresampled($ni,$im,0,0,0,0,$ftoW,$ftoh,$srcW,$srch); } else { $ni=imagecreate($ftoW,$ftoh); imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoh,$srcW,$srch); } } else { $ni=imagecreate($ftoW,$ftoh); imagecopyresized($ni,$im,0,0,0,0,$ftoW,$ftoh,$srcW,$srch); } //裁剪图片成标准缩略图 $new_imgx = imagecreatetruecolor($toW,$toh); if($newh >= $toh) { imagecopyresampled($new_imgx,$ni,0,0,0,($newh - $toh)/2,$toW,$toh,$toW,$toh); } else { imagecopyresampled($new_imgx,$ni,0,0,($newW - $toW)/2,0,$toW,$toh,$toW,$toh); } switch ($srcInfo[2]) { case 1: imagegif($new_imgx,$toFile); break; case 2: imagejpeg($new_imgx,$toFile,90); break; case 3: imagepng($new_imgx,$toFile); break; case 6: imagebmp($new_imgx,$toFile); break; default: return false; } imagedestroy($new_imgx); imagedestroy($ni); } imagedestroy($im); return true; } } |
为了避免出错下面给一个示例:
/** * 缩图片自动生成系统数据库函数,来源支持bmp、gif、jpg、png * 但生成的小图只用jpg或png格式 * * @access public * @param string $srcFile 图片路径 * @param string $toW 转换到的宽度 * @param string $toh 转换到的高度 * @param string $toFile 输出网站文件到 * @return string */ (注意哦替换的是这里全部的网站内容哦很长的一几段网站内容) /** * 获得GD的版本 * * @access public * @return int */ |
好了到此保存上传然后试着生成一个缩略图看看吧。到目前为止第三种相关具体操作方法是我见过最好的了它最大的特点就是居中裁剪这样无论如何也不会变形了,而且一般图片的主要像素都是从中间开始的,裁剪出来的缩略图和原图的中间部分都是一模一样的只是把原图中间变小了。
关于DedeCMS站点程序站点教程相关的知识,就说到这里了希望能帮助朋友们。织梦程序系统自带采集htpps站点问题修复