缩放图片,支持png透明

/**
 * desc 图片缩放
 * @param type $file 源文件路径
 * @param type $output 缩放文件路径
 * @param type $pWidth 缩放宽度
 * @return boolean
 */
function smartResizeImage($file, $output, $pWidth)
{
    $image = '';
    $final_width = 0;
    $final_height = 0;
    $info = getimagesize($file);
    list($width_old, $height_old) = $info;

    $pHeight = $height_old;
    //图片等比例缩放宽和高设置 ,根据宽度设置等比缩放 
    $scale_org = $width_old / $height_old;
    if ($width_old / $pWidth > $height_old / $pHeight) {
        $final_width = $pWidth;
        $final_height = $pWidth / $scale_org;
    } else {
        /* 原始图片比较高,则以高度为准 */
        $final_width = $pHeight * $scale_org;
        $final_height = $pHeight;
    }
    switch ($info[2]) {
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($file);
            break;
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($file);
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($file);
            break;
        default:
            return false;
    }
    $image_resized = imagecreatetruecolor($final_width, $final_height);
    if (($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG)) {
        $trnprt_indx = imagecolortransparent($image);
        if ($trnprt_indx >= 0) {
            $trnprt_color = imagecolorsforindex($image, $trnprt_indx);
            $trnprt_indx = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
            imagefill($image_resized, 0, 0, $trnprt_indx);
            imagecolortransparent($image_resized, $trnprt_indx);
        }elseif ($info[2] == IMAGETYPE_PNG) {
            imagealphablending($image_resized, false);
            $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
            imagefill($image_resized, 0, 0, $color);
            imagesavealpha($image_resized, true);
        }
    }
    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
    imagedestroy($image);
    switch ($info[2]) {
        case IMAGETYPE_GIF:
            imagegif($image_resized, $output);
            imagedestroy($image_resized);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($image_resized, $output);
            imagedestroy($image_resized);
            break;
        case IMAGETYPE_PNG:
            imagepng($image_resized, $output);
            imagedestroy($image_resized);
            break;
        default:
            return false;
    }
    return true;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值