帝国论坛帝国网站管理系统交流区帝国CMS使用交流缩图黑边问题解决办法 【本版专题贴子】  
 1/3     1 2 3 ›› ›|
主题:缩图黑边问题解决办法 [加入收藏夹]   

sooden
用户头衔:嘉宾

精华贴   :9
发贴数   :1551
经验值   :3822
注册时间:2006-01-02
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 1 楼]
缩图黑边问题解决办法
如果设置的缩图超出部分不截取的话,缩出的图会变形。
修改下可以同比例缩小,黑边的问题也一并解决了。

用下面的代码替换 e/class/gd.php 中的相同函数即可。
同时将 系统参数设置 -  图片设置  选项卡 中的 超出部分是否截取 设置为



//原文件,新文件,宽度,高度,维持比例
function ResizeImage($big_image_name, $new_name, $max_width = 400, $max_height = 400, $resize = 1){
        $returnr['file']='';
        $returnr['filetype']='';
    if($temp_img_type = @getimagesize($big_image_name)) {eregi('/([a-z]+)$', $temp_img_type[mime], $tpn); $img_type = $tpn[1];}
    else {eregi('.([a-z]+)$', $big_image_name, $tpn); $img_type = $tpn[1];}
    $all_type = array(
        "jpg"   => array("create"=>"ImageCreateFromjpeg", "output"=>"imagejpeg"  , "exn"=>".jpg"),
        "gif"   => array("create"=>"ImageCreateFromGIF" , "output"=>"imagegif"   , "exn"=>".gif"),
        "jpeg"  => array("create"=>"ImageCreateFromjpeg", "output"=>"imagejpeg"  , "exn"=>".jpg"),
        "png"   => array("create"=>"imagecreatefrompng" , "output"=>"imagepng"   , "exn"=>".png"),
        "wbmp"  => array("create"=>"imagecreatefromwbmp", "output"=>"image2wbmp" , "exn"=>".wbmp")
    );

    $func_create = $all_type[$img_type]['create'];
    if(empty($func_create) or !function_exists($func_create))
        {
                return $returnr;
        }
        //输出
    $func_output = $all_type[$img_type]['output'];
    $func_exname = $all_type[$img_type]['exn'];
        if(($func_exname=='.gif'||$func_exname=='.png'||$func_exname=='.wbmp')&&!function_exists($func_output))
        {
                $func_output='imagejpeg';
                $func_exname='.jpg';
        }
    $big_image   = $func_create($big_image_name);
    $big_width   = imagesx($big_image);
    $big_height  = imagesy($big_image);
    if($big_width <= $max_width and $big_height <= $max_height)//如果上传图片尺寸小于缩图 返回
        {
                $func_output($big_image, $new_name.$func_exname);
                $returnr['file']=$new_name.$func_exname;
                $returnr['filetype']=$func_exname;
                return $returnr;
        }

    if($resize == 1) {//切图
        if($big_width >= $max_width and $big_height >= $max_height)
        {
                        $ratiow      = $max_width  / $big_width;
                        $ratioh      = $max_height / $big_height;
            if($big_width > $big_height)
            {
            $tempx  = $max_width / $ratioh;
            $tempy  = $big_height;
            $srcX   = ($big_width - $tempx) / 2;
            $srcY   = 0;
            } else {
            $tempy  = $max_height / $ratiow;
            $tempx  = $big_width;
            $srcY   = ($big_height - $tempy) / 2;
            $srcX   = 0;
            }
        } else {
            if($big_width > $big_height)
            {
            $tempx  = $max_width;
            $tempy  = $big_height;
            $srcX   = ($big_width - $tempx) / 2;
            $srcY   = 0;
            } else {
            $tempy  = $max_height;
            $tempx  = $big_width;
            $srcY   = ($big_height - $tempy) / 2;
            $srcX   = 0;
            }
        }
                $new_width  = ($ratiow  > 1) ? $big_width  : $max_width;
                $new_height = ($ratioh  > 1) ? $big_height : $max_height;
                if(function_exists("imagecopyresampled"))
                {
                        $temp_image = imagecreatetruecolor($new_width, $new_height);
                        imagecopyresampled($temp_image, $big_image, 0, 0, $srcX, $srcY, $new_width, $new_height, $tempx, $tempy);
                } else {
                        $temp_image = imagecreate($new_width, $new_height);
                        imagecopyresized($temp_image, $big_image, 0, 0, $srcX, $srcY, $new_width, $new_height, $tempx, $tempy);
                }
                $func_output($temp_image, $new_name.$func_exname);
    }
        else
                {//不切图
                $ratio1=round($big_width/$big_height,2);
                $ratio2=round($max_width/$max_height,2);
                if($ratio1>$ratio2||$ratio1==$ratio2) {
                        $ratio=$max_width/$big_width;
                }
                if($ratio1<$ratio2)        {
                        $ratio=$max_height/$big_height;
                }
                $temp_w=intval($big_width*$ratio);
                $temp_h=intval($big_height*$ratio);
                $temp_img=imagecreatetruecolor($temp_w,$temp_h);
                if(function_exists("imagecopyresampled")){
                        $temp_img=imagecreatetruecolor($temp_w,$temp_h);
                        imagecopyresampled($temp_img,$big_image,0,0,0,0,$temp_w,$temp_h,$big_width,$big_height);
                }
                else{
                        $temp_image=imagecreate($temp_w, $temp_h);
                        imagecopyresized($temp_img,$big_image,0,0,0,0,$temp_w,$temp_h,$big_width,$big_height);
                }
                $bg=imagecreatetruecolor($max_width,$max_height);
                $white = imagecolorallocate($bg,255,255,255);
                imagefill($bg,0,0,$white);
                if($ratio1>$ratio2){
                        $x=0;
            $y=($max_height-$temp_h)/2;
                }
                if($ratio1<$ratio2){
            $x=($max_width-$temp_w)/2;
            $y=0;
        }
        imagecopymerge($bg,$temp_img,$x,$y,0,0,$temp_w,$temp_h,100);
        $func_output($bg, $new_name.$func_exname);
        imagedestroy($bg);
    }
        ImageDestroy($big_image);
        ImageDestroy($temp_image);
        $returnr['file']=$new_name.$func_exname;
        $returnr['filetype']=$func_exname;
    return $returnr;
}



上传以下附件:
[下载 *.rar](文件大小:2.89 KB,下载次数:149)



帝国模板定制,功能开发等&nbsp;&nbsp;http://ecmsjz.cn
不在线可QQ&nbsp;&nbsp;8686588&nbsp;&nbsp;留言,上线必回。
2010-04-24 15:59:01 已设置保密 顶部 回复 引用 报告 编辑 删除

flashjohn
用户头衔:探花

精华贴   :0
发贴数   :5519
经验值   :14211
注册时间:2007-11-27
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 2 楼]

支持




2010-04-24 16:21:19 已设置保密 顶部 回复 引用 报告 编辑 删除

huilan
用户头衔:探花

精华贴   :0
发贴数   :3947
经验值   :9790
注册时间:2009-02-04
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 3 楼]





2010-04-26 09:01:56 已设置保密 顶部 回复 引用 报告 编辑 删除

magicer28
用户头衔:秀才

精华贴   :0
发贴数   :64
经验值   :420
注册时间:2010-04-22
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 4 楼]

太好了!感激中




2010-04-28 11:53:49 已设置保密 顶部 回复 引用 报告 编辑 删除

jerrimy
用户头衔:书生

精华贴   :0
发贴数   :4
经验值   :26
注册时间:2009-11-17
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 5 楼]

太搞笑了,用了你的之后变成了白边!!!




2010-06-08 16:10:33 已设置保密 顶部 回复 引用 报告 编辑 删除

sooden
用户头衔:嘉宾

精华贴   :9
发贴数   :1551
经验值   :3822
注册时间:2006-01-02
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 6 楼]

原帖由 jerrimy 于 2010-06-08 16:10:33 发表
太搞笑了,用了你的之后变成了白边!!!

用下面的代码替换 e/class/gd.php 中的相同函数即可。
同时将 系统参数设置 -  图片设置  选项卡 中的 超出部分是否截取 设置为 否



帝国模板定制,功能开发等&nbsp;&nbsp;http://ecmsjz.cn
不在线可QQ&nbsp;&nbsp;8686588&nbsp;&nbsp;留言,上线必回。
2010-06-17 08:56:03 已设置保密 顶部 回复 引用 报告 编辑 删除

吴桐
用户头衔:书生

精华贴   :0
发贴数   :51
经验值   :148
注册时间:2010-06-08
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 7 楼]

谢谢,下来看看




2010-06-21 00:17:39 已设置保密 顶部 回复 引用 报告 编辑 删除

huilan
用户头衔:探花

精华贴   :0
发贴数   :3947
经验值   :9790
注册时间:2009-02-04
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 8 楼]

顶个




2010-06-21 08:51:50 已设置保密 顶部 回复 引用 报告 编辑 删除

publover
用户头衔:进士

精华贴   :0
发贴数   :1424
经验值   :3648
注册时间:2007-12-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 9 楼]

不错




2010-06-21 09:36:37 已设置保密 顶部 回复 引用 报告 编辑 删除

gongyu
用户头衔:书生

精华贴   :0
发贴数   :35
经验值   :177
注册时间:2010-03-11
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 10 楼]

Warning:imagedestroy(): supplied argument is not a valid Image resource in class/gd.php on line 120

ImageDestroy($temp_image);说这有问题

[该贴被修改 2 次,最后修改时间 2011-01-03 22:49:30 ]



2011-01-03 22:45:04 已设置保密 顶部 回复 引用 报告 编辑 删除
 1/3     1 2 3 ›› ›|

快速回复
内容

表情
使用EBB代码 使用smile代码 显示签名 自动分析url 自动分析img
     【进入高级模式】   (按 Ctrl+Enter 直接提交)
    顶部  加入收藏夹
关于帝国 | 广告服务 | 联系我们 | 法律声明 | 隐私条款 | 许可协议
Powered by: EBB Version 2.2.1