GD本来就有这样的函数,不太记得了,好像是ImageCopyResize(...)

解决方案 »

  1.   

    PHP中自动生成缩图(转帖) 
    01.5.22 // 本函数从源文件取出图象,设定成指定大小,并输出到目的文件 
    // 源文件格式:gif,jpg,jpe,jpeg,png 
    // 目的文件格式:jpg 
    // 参数说明: 
    // $srcFile 源文件 
    // $dstFile 目标文件 
    // $dstW 目标图象宽度 
    // $dstH 目标图象高度 
    function makethumb($srcFile,$dstFile,$dstW,$dstH) { 
    $data = GetImageSize($srcFile,&$info); 
    //查询图片资料 
    switch ($data[2]) 
    //数组的第二个数据就是图片的格式 1为GIF 2为JPG 3为PNG 
    //然后根据图片格式建立可编辑的涵数 

    case 1: 
    $im = @ImageCreateFromGIF($srcFile); 
    break; 
    case 2: 
    $im = @imagecreatefromjpeg($srcFile); 
    break; 
    case 3: 
    $im = @ImageCreateFromPNG($srcFile); 
    break; 

    $srcW=ImageSX($im); //取源图其宽 
    $srcH=ImageSY($im); //取其高 
    $dstX=0; 
    $dstY=0; 
    if ($srcW*$dstH>$srcH*$dstW) { $fdstH=round($srcH*$dstW/$srcW); $dstY=floor(($dstH-$fdstH)/2); $fdstW=$dstW; } 
    else { $fdstW=round($srcW*$dstH/$srcH); $dstX=floor(($dstW-$fdstW)/2); $fdstH=$dstH; } 
    $ni=ImageCreate($dstW,$dstH); 
    $dstX=($dstX<0)?0:$dstX; 
    $dstY=($dstX<0)?0:$dstY; 
    $dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX; 
    $dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY; 
    //取图片的宽高,然后按/2的大小建立目标图片宽高 
    $black = ImageColorAllocate($ni, 0,0,0); 
    imagefilledrectangle($ni,0,0,$dstW,$dstH,$black);//填充的背景色你可以重新指定,现在用的是黑色 
    ImageCopyResized($ni,$im,$dstX,$dstY,0,0,$fdstW,$fdstH,$srcW,$srcH);//复制新图片并调整大小,不过这里我觉得是$NI跟$IM要调换,用旧图片来复制新图,不是用新图复制旧图,我已经发信个原来作者,等消息 
    ImageJpeg($ni,$dstFile);//如果你要把图片直接输出到浏览器, 
    //那么把第二个参数去掉,并用header()函数指定mine类型先 
    imagedestroy($im);//关闭图片 
    imagedestroy($ni); //同上 
    }