Discuz教程网

如何解决discuz无论图片多大都会生成缩略图的问题

[复制链接]
authicon dly 发表于 2013-12-16 14:43:55 | 显示全部楼层 |阅读模式
分析:
  1. function Thumb($source, $target, $thumbwidth, $thumbheight, $thumbtype = 1, $nosuffix = 0) {
  2.                 $return = $this->init('thumb', $source, $target, $nosuffix);
  3.                 if($return <= 0) {
  4.                         return $this->returncode($return);
  5.                 }

  6.                 if($this->imginfo['animated']) {
  7.                         return $this->returncode(0);
  8.                 }
  9.                 $this->param['thumbwidth'] = intval($thumbwidth);
  10.                 if(!$thumbheight || $thumbheight > $this->imginfo['height']) {
  11.                         $thumbheight = $thumbwidth > $this->imginfo['width'] ? $this->imginfo['height'] : $this->imginfo['height']*($thumbwidth/$this->imginfo['width']);
  12.                 }
复制代码

//在这里重新定义的 $thumbheight 的值,只要缩略图的高度大于图片的高度,就对他进行了重新定义。那么我们看看他是怎么重新定义的。
条件:缩略图的高度大于图片的高度


定义条件:
1.如果缩略图的宽度大于图片的宽度,缩略图的高度就等于图片的高度。
(导致结果:本来缩略图的宽度大于图片的宽度,就有可能不需要生成缩略图,但这里人为的使缩略图的高度=图片的高度,因此满足生成缩略图的条件。)
2.如果缩略图的宽度小于图片的宽度,缩略图的高度=图片的高度*缩略图的宽度/图片的宽度(因为缩略图的宽度小于图片的宽度为前提,固此值小于1
因此缩略图的高度会小于图片的高度
(导致结果:缩略图的宽度小于图片的宽度,就应该生成缩略图,无论高度如何。)


所以会产生,无论图片大小,都会生成缩略图。


  1.                 $this->param['thumbheight'] = intval($thumbheight);
  2.                 $this->param['thumbtype'] = $thumbtype;
  3.                 if($thumbwidth < 100 && $thumbheight < 100) {
  4.                         $this->param['thumbquality'] = 100;
  5.                 }

  6.                 $return = !$this->libmethod ? $this->Thumb_GD() : $this->Thumb_IM();
  7.                 $return = !$nosuffix ? $return : 0;

  8.                 return $this->sleep($return);
  9.         }
复制代码




执行函数

function Thumb_GD() {
                if(!function_exists('imagecreatetruecolor') || !function_exists('imagecopyresampled') || !function_exists('imagejpeg') || !function_exists('imagecopymerge')) {
                        return -4;
                }

                $imagefunc = &$this->imagefunc;
                $attach_photo = $this->loadsource();
                if($attach_photo < 0) {
                        return $attach_photo;
                }
                $copy_photo = imagecreatetruecolor($this->imginfo['width'], $this->imginfo['height']);
                imagecopy($copy_photo, $attach_photo ,0, 0, 0, 0, $this->imginfo['width'], $this->imginfo['height']);
                $attach_photo = $copy_photo;

                $thumb_photo = null;
                switch($this->param['thumbtype']) {
                        case 'fixnone':
                        case 1:
                                if($this->imginfo['width'] >= $this->param['thumbwidth'] || $this->imginfo['height'] >= $this->param['thumbheight']) {
                                        $thumb = array();
                                        list(,,$thumb['width'], $thumb['height']) = $this->sizevalue(0);
                                        $cx = $this->imginfo['width'];
                                        $cy = $this->imginfo['height'];
                                        $thumb_photo = imagecreatetruecolor($thumb['width'], $thumb['height']);
                                        imagecopyresampled($thumb_photo, $attach_photo ,0, 0, 0, 0, $thumb['width'], $thumb['height'], $cx, $cy);
                                }
解决办法
[/table]这里要重新定义缩略图的高度是有目的,不会把太长的图片缩小后,宽度变的太小,然后无法阅读。其目的是为了调整到与宽度比等高后再进行缩略图的工作。
这里错就错在,应该是$thumbheight < $this->imginfo['height']  而不是大于
把 if(!$thumbheight || $thumbheight > $this->imginfo['height']) {  的大于号改成小于号。




上一篇:如何解决discuz3不能显示EXIF的问题
下一篇:Discuz! X程序自带的“Discuz! X 系列产品升级/转换 向导”程序存在严重的安全漏洞
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 01:20

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表