初步判定这与gd的版本有关。
我在win32环境下分别使用gd2.0和gd1.6.2,执行同样的缩略图程序。
结果是:
gd2.0 损失约50%颜色信息
gd1.6.2 基本无损失

解决方案 »

  1.   

    gd2.0不行地,其实没必要用PHP作小图,还是在客户端用PHOTOSHOP做的好
      

  2.   

    gd、gd2都适用的写法。
    <?php
    $image = "vintdev.JPG"; // 原图
    $thumbw = 200; // 期望的目标图宽
    $thumbh = 50; // 期望的目标图高$size = getimagesize($image); // 获取原图大小
    $scale = min($thumbw/$size[0], $thumbh/$size[1]); // 计算缩放比例
    $width = (int)($size[0]*$scale);
    $height = (int)($size[1]*$scale);
    $deltaw = (int)(($thumbw - $width)/2);
    $deltah = (int)(($thumbh - $height)/2);$src_img = ImageCreateFromJPEG($image); // 载入原图if(function_exists("imagecreatetruecolor"))
      $dst_img = imagecreatetruecolor($thumbw, $thumbh); // 创建目标图
    else
      $dst_img = imagecreate($thumbw, $thumbh); // 创建目标图$back = ImageColorAllocate($dst_img, 255,255,255); // 填充的背景色
    imagefill($dst_img,0,0,$back);if(function_exists("ImageCopyResampled"))
      ImageCopyResampled($dst_img, $src_img, $deltaw, $deltah, 0, 0, $width, $height, ImageSX($src_img),ImageSY($src_img)); // 复制图片
    else
      ImageCopyResized($dst_img, $src_img, $deltaw, $deltah, 0, 0, $width, $height, ImageSX($src_img),ImageSY($src_img)); // 复制图片imagejpeg($dst_img,"aaa_2.jpg"); // 创建图片
    imagepng($dst_img,"aaa_2.png"); // 创建图片
    imagepng($src_img,"ipcover_org.png");
    ImageDestroy($src_img);
    ImageDestroy($dst_img);
    ?>
    对比<br>
    原图<img src=vintdev.JPG><br>
    缩略图<img src=aaa_2.png><img src=aaa_2.jpg>
      

  3.   

    哈哈,原来是imagecreatetruecolor函数在作怪。谢谢 xuzuning(唠叨)