$background_color = ImageColorAllocate($im1, 255,255,255); 
改为
$background_color = imagecolorclosest($im1, 255,255,255);函数ImageColorAllocate建立一个颜色项,该项并不覆盖原有的颜色项
就是说图片中的原有的(255,255,255)与新建的(255,255,255)不是同一个颜色函数imagecolorclosest取得图片中与指定颜色最接近的颜色的索引值
只有用这个索引才能设置(255,255,255)为透明

解决方案 »

  1.   

    试过了,效果一样。没有透明叠加。晕<?php
    header ("Content-type: image/gif"); 
    $im1 = imagecreatefromjpeg ("01.jpg");
    $im2 = imagecreatefromjpeg ("ht2.jpg");
    $background_color = ImageColorclosest($im1, 255,255,255); 
    imagecolortransparent($im1,$background_color);imagecopy($im2,$im1,0,0,0,0,100,100);imagejpeg ($im2);
    imagedestroy ($im2);
    ?>
      

  2.   

    呵呵,是该“晕”了。
    不好意思,写错了!
    应该是imagecolorresolve函数不过你看看手册也就知道了
      

  3.   

    给你一个例子,使用的是右上的图片
    <?php
    function extname($filename) {
      return strtolower(substr(strrchr($filename,"."),1));
    }function load_image($image) {
      switch(extname($image)) {
    case "png":
    $im = ImageCreateFromPNG($image);
    break;
    case "jpg":
    case "jpeg":
    $im = @ImageCreateFromJPEG($image); // 载入原图
    break;
    case "gif":
    $im = ImageCreateFromGIF($image); // 载入原图
    break;
      }
      return $im;
    }function create_image($width,$height,$red=255,$green=255,$blue=255) {
    if(function_exists("imagecreatetruecolor"))
    $im = imagecreatetruecolor($width,$height); // 创建目标图
    else
    $im = imagecreate($width,$height); // 创建目标图 $back = ImageColorAllocate($im,$red,$green,$blue); // 填充的背景色
    imagefill($im,0,0,$back);
    return $im;
    }function set_transparent($im,$index) {
    imagecolortransparent($im,$index);
    }$image = "csdn.gif"; // 原图
    $thumbw = 200; // 期望的目标图宽
    $thumbh = 80; // 期望的目标图高$size = getimagesize($image); // 获取原图大小
    $thumbw = $size[0]*2;
    $thumbh = $size[1]*2;
    $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 = load_image($image);
    $dst_img = create_image($thumbw, $thumbh,255,240,240); //建立一个肉红色的图片
    $c = imagecolorat($src_img,$size[0]/2,$size[1]*0.8);
    //set_transparent($src_img,imagecolorat($src_img,$size[0]/2,$size[1]*0.8)); //指定月牙壮部分透明
    set_transparent($src_img,imagecolorresolve($src_img,255,255,255));//指定白色透明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); // 创建图片
    ImageDestroy($src_img);
    ImageDestroy($dst_img);
    ?>
      

  4.   

    还是不行..唉.这段代码在你那里也不成功吗??
    <?php
    header ("Content-type: image/gif"); 
    $im1 = imagecreatefromjpeg ("00.jpg");
    $im3 = imagecreate(500,500);
    $back = ImageColorAllocate($im3,0,255,0); // 填充的背景色
    imagefill($im3,0,0,$back);$background_color1 = imagecolorresolve($im1, 255,255,255); 
    imagecolortransparent($im1,$background_color1);
    imagecopy($im3,$im1,0,0,0,0,150,120);imagejpeg ($im3);
    imagedestroy ($im3);
    imagedestroy($im1);?>
      

  5.   

    绝对有啊,我也想到这个了,后来自己在photoshop中画了一张。绝对是白色北景的。
      

  6.   

    我也查过csdn以前的贴子啦,有些人也是这样的问题。也没有解决
      

  7.   

    这样可以我再想想
    <?php
    header ("Content-type: image/gif"); 
    $im1 = imagecreate(100,100);
    $front = ImageColorAllocate($im1,0,0,0);
    $back1 = ImageColorAllocate($im1,255,255,255); // 填充的背景色
    imagefill($im1,0,0,$back1);
    imagestring($im1,1,1,1,"123",$front);$im3 = imagecreate(500,500);
    $back2 = ImageColorAllocate($im3,0,255,0); // 填充的背景色
    imagefill($im3,0,0,$back2);$background_color1 = imagecolorresolve($im1, 255,255,255); 
    imagecolortransparent($im1,$background_color1);
    imagecopy($im3,$im1,0,0,0,0,100,100);imagejpeg ($im3);
    imagedestroy ($im3);
    imagedestroy($im1);?>