求PHP生成缩略图的功能!从网上找了一段代码,生成的缩略图色彩失真。

解决方案 »

  1.   

    31.$image1=$info['filename'].'120_120'.'.' .$info['extension'];//缩略图名称  
    32.$image2=$info['filename'].'300_300'.'.' .$info['extension'];//缩略图名称  
    33.list($imagw,$imagh)=getimagesize($file ['tmp_name']);//取得原图的宽高(另外$file ['tmp_name']只是一个临时文件路径,有时可能 会报错,如报错只需把临时文件路径改成你上传 后的原图的路径即可)  
    34.//120图判断各种情况来取得缩略图的宽高  
    35.if($imagw< =120&&$imagh< =120){  
    36.$m120w=$imagw;  
    37.$m120h=$imagh;  
    38.}elseif($imagw>$imagh)  
    39.{  
    40.$m120w=120;  
    41.$m120h=intval($m120w/number_format( $imagw/$imagh,2));//缩略图的宽除以(原 图的宽除以原图的高)number_format查手册  
    42.}  
    43.else  
    44.{  
    45.$m120h=300;  
    46.$m120w=intval($m120h/number_format( $imagh/$imagw,2));//缩略图的高除以(原图 的高除以原图的宽)number_format查手册  
    47.}  
    48.//300图判断各种情况来取得缩略图的宽高  
    49.if($imagw< =300&&$imagh< =300){  
    50.$m300w=$imagw;  
    51.$m300h=$imagh;  
    52.}elseif($imagw>$imagh){  
    53.$m300w=300;  
    54.$m300h=intval($m300w/number_format( $imagw/$imagh,2));//缩略图的宽除以(原 图的宽除以原图的高)number_format查手册  
    55.}else{  
    56.$m300h=300;  
    57.$m300w=intval($m300h/number_format( $imagh/$imagw,2));//缩略图的高除以(原 图的高除以原图的宽)number_format查手册  
    58.}  
    59.if($info['extension']=='jpg'){  
    60.$info['extension']='jpeg';//判断图像类 型如果是JPG的则把它转换成JPEG的因为图像处 理函数在处理JPG的时候都是用的JPEG而不是JPG  
    61.}  
    62.$iml='imagecreatefrom'.$info['extension'];
    63.//取得不同图片格式的不同函数  
    64.$yuan=$iml($file['tmp_name']);
    65.//根据前面取的不同函数来取的原图的标识  
    66.$mu1=imagecreatetruecolor($m120w,$m120h);
    67.//取的要生成的缩略图的标识  
    68.$mu2=imagecreatetruecolor($m300w,$m300h);
    69.//取的要生成的缩略图的标识  
    70.$c='image'.$info['extension'];
    71.//生成输出缩略图的函数,不能分开写,否则报错  
    72.imagecopyresampled($mu1,$yuan,0,0,0, 0,$m120w,$m120h,$imagw,$imagh);//生成缩略图120  
    73.$res=$c($mu1,$xin.'/'.$image1);
    74.//存放缩略图  
    75.if(!$res){  
    76.alert('生成120缩略图失败');  
    77.exit;  
    78.}  
    79.imagecopyresampled($mu2,$yuan,0,0 ,0,0,$m300w,$m300h,$imagw,$imagh);
    80.//PHP生成缩略图生成缩略图120  
    81.$res=$c($mu2,$xin.'/'.$image2);
    82.//存放缩略图  
    83.if($res){  
    84.alert('生成300缩略图成功');  
    这里只列出了一部分代码,具体的参考:http://www.phpnewer.com/index.php/Ymgx/detail/id/38
      

  2.   

    试下这个
    1.< ?php  
    2./*后台登陆界面  
    3.*黄春龙学习编写  
    4.*首写时间:2009-10-27  
    5.*更新时间:2009/11/24  
    6.*/  
    7.require_once '../xmphp/init.php';
    8.//全站配置文件  
    9.require_once XMPHP_COMMON.'/smarty.php';
    10.//smarty功能  
    11.require_once XMPHP_COMMON.'/mysql.php';
    12.//mysql功能  
    13.require_once XMPHP_COMMON.'/func.php';
    14.//常用函数  
    15.if(isset($_GET['act'])&&$_GET['act'] =='upload'){  
    16.$file=$_FILES['file'];  
    17.$info=pathinfo($file['name']);  
    18.$a=array('jpg','gif','png');  
    19.if(!in_array($info['extension'],$a)){  
    20.alert("请选择jpg,gif,png格式的图片 进行上传");  
    21.exit;  
    22.}  
    23.if($file['name'] !=''){  
    24.$dirname=date('Ym');  
    25.$dirname='../upload/'.$dirname;
    26.//原图路径  
    27.$xin=$dirname.'/s';//PHP生成缩略图路径  
    28.if(!file_exists($xin)){  
    29.@mkdir($xin);  
    30.}  
    31.$image1=$info['filename'].'120_120'.'.' .$info['extension'];//缩略图名称  
    32.$image2=$info['filename'].'300_300'.'.' .$info['extension'];//缩略图名称  
    33.list($imagw,$imagh)=getimagesize($file ['tmp_name']);//取得原图的宽高(另外$file ['tmp_name']只是一个临时文件路径,有时可能 会报错,如报错只需把临时文件路径改成你上传 后的原图的路径即可)  
    34.//120图判断各种情况来取得缩略图的宽高  
    35.if($imagw< =120&&$imagh< =120){  
    36.$m120w=$imagw;  
    37.$m120h=$imagh;  
    38.}elseif($imagw>$imagh)  
    39.{  
    40.$m120w=120;  
    41.$m120h=intval($m120w/number_format( $imagw/$imagh,2));//缩略图的宽除以(原 图的宽除以原图的高)number_format查手册  
    42.}  
    43.else  
    44.{  
    45.$m120h=300;  
    46.$m120w=intval($m120h/number_format( $imagh/$imagw,2));//缩略图的高除以(原图 的高除以原图的宽)number_format查手册  
    47.}  
    48.//300图判断各种情况来取得缩略图的宽高  
    49.if($imagw< =300&&$imagh< =300){  
    50.$m300w=$imagw;  
    51.$m300h=$imagh;  
    52.}elseif($imagw>$imagh){  
    53.$m300w=300;  
    54.$m300h=intval($m300w/number_format( $imagw/$imagh,2));//缩略图的宽除以(原 图的宽除以原图的高)number_format查手册  
    55.}else{  
    56.$m300h=300;  
    57.$m300w=intval($m300h/number_format( $imagh/$imagw,2));//缩略图的高除以(原 图的高除以原图的宽)number_format查手册  
    58.}  
    59.if($info['extension']=='jpg'){  
    60.$info['extension']='jpeg';//判断图像类 型如果是JPG的则把它转换成JPEG的因为图像处 理函数在处理JPG的时候都是用的JPEG而不是JPG  
    61.}  
    62.$iml='imagecreatefrom'.$info['extension'];
    63.//取得不同图片格式的不同函数  
    64.$yuan=$iml($file['tmp_name']);
    65.//根据前面取的不同函数来取的原图的标识  
    66.$mu1=imagecreatetruecolor($m120w,$m120h);
    67.//取的要生成的缩略图的标识  
    68.$mu2=imagecreatetruecolor($m300w,$m300h);
    69.//取的要生成的缩略图的标识  
    70.$c='image'.$info['extension'];
    71.//生成输出缩略图的函数,不能分开写,否则报错  
    72.imagecopyresampled($mu1,$yuan,0,0,0, 0,$m120w,$m120h,$imagw,$imagh);//生成缩略图120  
    73.$res=$c($mu1,$xin.'/'.$image1);
    74.//存放缩略图  
    75.if(!$res){  
    76.alert('生成120缩略图失败');  
    77.exit;  
    78.}  
    79.imagecopyresampled($mu2,$yuan,0,0 ,0,0,$m300w,$m300h,$imagw,$imagh);
    80.//PHP生成缩略图生成缩略图120  
    81.$res=$c($mu2,$xin.'/'.$image2);
    82.//存放缩略图  
    83.if($res){  
    84.alert('生成300缩略图成功');  
    85.exit;  
    86.}  
    87.}  
    88.}  
    89.$tpl->display("tu/tu.html");  
    90.?> 详细原文地址:http://www.phpnewer.com/index.php/Ymgx/detail/id/38