方便网站多地方调用不同尺寸的缩略图。
根据图片源,在网站任意位置生成不同大小的缩略图。
以灵动标签为例。
以往写标题图片为
[e:loop={栏目ID/专题ID,显示条数,操作类型,只显示有标题图片,附加SQL条件,显示排序}]
<a href="<?=$bqsr[titleurl]?>" target="_blank"><img src="<?=$bqr[titlepic]?>" /></a>
[/e:loop]
这个图片源,你可以为任意图片字段,像 picurl等等。图片需要在本地。
那么现在可以
[e:loop={栏目ID/专题ID,显示条数,操作类型,只显示有标题图片,附加SQL条件,显示排序}]
<a href="<?=$bqsr[titleurl]?>" target="_blank"><img src="<?=sys_ResizeImg($bqr[titlepic],100,100,1,'')?>" /></a>
[/e:loop]
红色部分为生成缩图大小。
帝国CMS 6.6版模板新增自动生成缩图函数,可直接将标题图片转成相应的尺寸显示,文件更小,访问速度更快。
(1)、函数语法:sys_ResizeImg(原图片,缩图宽度,缩图高度,是否裁翦图片,目标文件名)
原图片:例如$bqr[titlepic],目标文件名可不设置。
如果无标题图片的显示系统指定图片:
<img src="<?=sys_ResizeImg($bqr[titlepic],119,112,1,'')?sys_ResizeImg($bqr[titlepic],119,112,1,''):$public_r[newsurl]."e/data/images/notimg.gif"?>" width="119" height="112" />
sys_ResizeImg($bqr[titlepic],145,132,1,'')
这样完美解决不同需求缩略图的问题
帝国cms使用sys_ResizeImg()生成缩略图模糊失真的解决方法
用sys_ResizeImg()方法生成缩略图后,可以查看图片的路径,你发现图片路径并不在后台上传默认的d/file目录下,而是放在/e/data/tmp/目录中,由此可检验是否已经生效;另外方法中的第一个数字(本例中是375)表示缩略图的宽度,第2个数字(本例中是287)则是缩略图的高度,参数1则表示帝国默认的裁剪缩放生成缩略图的方式。
关于sys_ResizeImg()的最后参数说明。见如下:
帝国CMS缩略图函数改进(GD库改进)
本文关键字词:缩略图,缩略图函数,帝国CMS,帝国CMS,帝国CMS缩略图去黑边框第一种方式 帝国默认:
sys_ResizeImg($r[titlepic],宽,高,0);//帝国默认的不裁剪缩放生成缩略图的方式第二种方式 帝国默认:
sys_ResizeImg($r[titlepic],宽,高,1);//帝国默认的裁剪缩放生成缩略图的方式第三种方式 去掉裁剪不够时的黑边并且从图片缩放后中间裁剪:
sys_ResizeImg($r[titlepic],宽,高,2);//新加去黑边裁剪生成缩略图的方式第四种方式 只固定图片的宽,高度不限制(类似不规则瀑布流的图片形式),高填写为大于0的任意整数数字:
sys_ResizeImg($r[titlepic],宽,高,3);//新加去黑边生成类似瀑布流格式的方式
二
但是你看到的上图示例效果是经过改进后的,而默认sys_ResizeImg()生成的缩略图则是压缩比太高,图片质量很低,看上去很模糊失真,简直可用惨不忍睹来形容。如下。
要修改sys_ResizeImg()生成缩略图的质量倒是很容易。只需要打开e/class/gd.php文件。找到如下这行。
$func_output($temp_image, $new_name.$func_exname,9);
将最后一个数字修改为:
$func_output($temp_image, $new_name.$func_exname,85);
其中85就代表生成的缩略图压缩比,数字越高,压缩率越低,图片质量自然就越高,但要注意的是,图片质量高文件就会增大,如果图片过多、尺寸过大就会影响页面加载速度(通常),而我们使用缩略图的一个重要目的就是要减少图片尺寸以提高页面打开速度,因此这个数字华哥建议设置在65-90之间为好。
然后上传覆盖。再重新生成页面,查看是否有所变化。
对帝国CMS生成缩略图函数sys_ResizeImg效率慢的研究和改进
首先要改进的是判断缩略图是否已经存在,如果存在就不再执行生成缩略图操作。具体函数过程文件/e/class/t_functions.php 函数命名sys_ResizeImg
原始判断缩略图是否生成过存在的方法为PHP的file_exists函数,此函数相比专门的文件判断存在is_file函数在效率上要慢很多。
查找:
if(empty($target_filename)&&file_exists($newname.$filetype))
替换成:
if(empty($target_filename)&&is_file($newname.$filetype))
其次是有的小伙伴GD.PHP函数库换过非官方的处理方法,可能面临着PNG图片缩略图生成后为JPG格式,那么上面的那句代码就无法判断这个缩略图已经生成存在了,所以每次更新页面都会重复生成,效率会非常低。那么我们就要把上面那种改法就不适用了,我们这里采用多次判断方法来判断是否真的存在,进而减少PNG重复生成缩略图的问题。
查找:
if(empty($target_filename)&&file_exists($newname.$filetype))
{
return $newurl.$newfilename.$filetype;
}
替换成:
if(empty($target_filename)&&is_file($newname.'.jpg'))
{
return $newurl.$newfilename.'.jpg';
}
if(empty($target_filename)&&is_file($newname.'.png'))
{
return $newurl.$newfilename.'.png';
}
if(empty($target_filename)&&is_file($newname.'.gif'))
{
return $newurl.$newfilename.'.gif';
}
至此,sys_ResizeImg自动生成缩略图函数效率慢的问题能解决80%吧!