我也遇到了这个问题,大部分都是apache 下遇到的情况。 不知道和服务器的显卡有没有关系。总觉得颜色失真很厉害。 和图片本身的色彩有没有关系。

解决方案 »

  1.   

    用GD2就这样。
    用回GD1没问题。另外,最好先判断一下高宽,否则要变形的
    改进的函数:function makethumb($srcFile,$dstFile,$dstW,$dstH)
    {
    $dstW = intval($dstW);
    $dstH = intval($dstH); if($dstW == 0 && $dstH == 0)
    return; $size = GetImageSize($srcFile,&$info); $newWidth = $size[0];
    $newHeight = $size[1]; if($size[0] > $dstW)
    {
    $newWidth = $dstW;
    $newHeight = intval(($newWidth / $size[0]) * $size[1]);
    }
    if($newHeight > $dstH)
    {
    $newHeight = $dstH;
    $newWidth = intval(($newHeight / $size[1]) * $size[0]);
    }

    if($newWidth == 0 || $newHeight == 0)
    return;
    switch ($size[2])
    {
    case 1:
    return false;//$im = ImageCreateFromGIF($srcFile);
    break;
    case 2:
    $im = @imagecreatefromjpeg($srcFile);    
    break;
    case 3:
    $im = @ImageCreateFromPNG($srcFile);    
    break;
    }
    if($im)
    {
    $srcW= $size[0];
    $srcH= $size[1]; $ni=@ImageCreate($newWidth,$newHeight);
    if($ni)
    {
    if(@ImageCopyResized($ni,$im,0,0,0,0,$newWidth,$newHeight,$srcW,$srcH))
    {
    return @ImageJpeg($ni,$dstFile);
    }
    }
    } return false;

      // 如果需要输出到浏览器,那么将上一句改为ImageJpeg($ni);
      // 如果需要其它格式的图片,改动最后一句就可以了
    }
      

  2.   

    $ni=ImageCreate($dstW,$dstH);
    好象ImageCreate生成的是256色的,你用函数
    $ni=ImageCreateTrueColor($dstW,$dstH);
    试试!
      

  3.   

    ImageCreateTrueColor应该是RGB的!!!
      

  4.   

    有可能是GD版本问题。 我查了二台服务器上GD都是GD2.0 以上的。 而另一台GD1。6的却没问题 
    先谢谢了,我来用ImageCreateTrueColor试试
      

  5.   

    如何用程序检测GD的版本,网上找了二个,都不能用 不知道为什么。
    function chkgd2(){
      $testGD = get_extension_funcs("gd"); // Grab function list
      if (!$testGD){ echo "GD not even installed."; exit; }
      if (in_array ("imagegd2",$testGD)) $gd_version = "<2"; // Check
      if ($gd_version == "<2") return false; else return true;
      
    }if (chkgd2()) echo "<h1>GD2+ is installed.</h1>"; // Test for GD2
    else echo "<h1>GD2+ is not installed.</h1>";?>////////////////////////////////////
    <?php
    ob_start();
    phpinfo(8);
    $phpinfo=ob_get_contents();ob_end_clean();
    $phpinfo=strip_tags($phpinfo);
    $phpinfo=stristr($phpinfo,"gd version");
    $phpinfo=stristr($phpinfo,"version");
    $end=strpos($phpinfo," ");
    $phpinfo=substr($phpinfo,0,$end);
    $phpinfo=substr($phpinfo,7);
    echo $phpinfo;
    if(version_compare("2.0", "$phpinfo")==1)
    echo "you have a version less then 2";
    ?>
      

  6.   

    win 2000 找低版本的gd.dll替换现在的版本。
      

  7.   

    hjmsolar(孤舟蓑笠翁) 说的 就可以了 
    怎么加点数给你
      

  8.   

    <?$FILENAME="image_name";// 生成图片的宽度
    $RESIZEWIDTH=400;// 生成图片的高度
    $RESIZEHEIGHT=400;
    function ResizeImage($im,$maxwidth,$maxheight,$name){
        $width = imagesx($im);
        $height = imagesy($im);
        if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){
            if($maxwidth && $width > $maxwidth){
                $widthratio = $maxwidth/$width;
                $RESIZEWIDTH=true;
            }
            if($maxheight && $height > $maxheight){
                $heightratio = $maxheight/$height;
                $RESIZEHEIGHT=true;
            }
            if($RESIZEWIDTH && $RESIZEHEIGHT){
                if($widthratio < $heightratio){
                    $ratio = $widthratio;
                }else{
                    $ratio = $heightratio;
                }
            }elseif($RESIZEWIDTH){
                $ratio = $widthratio;
            }elseif($RESIZEHEIGHT){
                $ratio = $heightratio;
            }
            $newwidth = $width * $ratio;
            $newheight = $height * $ratio;
            if(function_exists("imagecopyresampled")){
                  $newim = imagecreatetruecolor($newwidth, $newheight);
                  imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
            }else{
                $newim = imagecreate($newwidth, $newheight);
                  imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
            }
            ImageJpeg ($newim,$name . ".jpg");
            ImageDestroy ($newim);
        }else{
            ImageJpeg ($im,$name . ".jpg");
        }
    }if($_FILES['image']['size']){
        if($_FILES['image']['type'] == "image/pjpeg"){
            $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
        }elseif($_FILES['image']['type'] == "image/x-png"){
            $im = imagecreatefrompng($_FILES['image']['tmp_name']);
        }elseif($_FILES['image']['type'] == "image/gif"){
            $im = imagecreatefromgif($_FILES['image']['tmp_name']);
        }
        if($im){
            if(file_exists("$FILENAME.jpg")){
                unlink("$FILENAME.jpg");
            }
            ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$FILENAME);
            ImageDestroy ($im);
        }
    }?><img src="<? echo($FILENAME.".jpg?reload=".rand(0,999999)); ?>"><br><br><form enctype="multipart/form-data" method="post">
    <br>
    <input type="file" name="image" size="50" value="浏览"><p>
    <input type="submit" value="上传图片">
    </form> </body>
    </html>
      

  9.   

    我知道可以,但我想用判断服务器的GD版本,自动选择用ImageCreateTrueColor或是ImageCreate
    我想用
    if ($gd_version>= 2) { 
       $image = ImageCreateTrueColor($width, $height); 
    } else { 
       $image = ImageCreate($width, $height); 
    }
    但找不到适合所有php版本的函数来取得GD的版本号。
      

  10.   

    php就是的一个麻烦的地方就是版本比较乱
      

  11.   

    你说的问题我也遇到过!
    $ni=ImageCreate($dstW,$dstH);$ni这个图片你最好要用黑色背景!
    这样就可以解决你的问题了!
      

  12.   

    看看我做的这个!
    http://china-sss.xicp.net:8000/
      

  13.   

    ^_^。。改两个地方
    一个使用
    imagecreateturecolor()代替imagecreate()
    另一个使用
    imagecopyresampled()代替imagecopyresized()
      

  14.   

    sourai(SouRai) 说的对,不过很多空间上的APACHE服务器都没有升级GD库,所以最好不改,用GD1的函数。原因是:一个是用的函数空间可能不支持,GD2支持GD1的函数,反之当然不行;二是GD1在WIN下面严重失真掉色,但在UNIX或Linux下效果还可以。