PHP缩略图生成函数,使用GD2

2022年12月27日 1956点热度 0人点赞 0条评论
    /**
     * 缩略图生成函数,使用GD2
     * @param $srcFile
     * @param $toW
     * @param $toH
     * @param string $toFile
     * @param string $default_ext
     * @return bool|string
     */
    public function image_resize($srcFile, $toW, $toH, $toFile = "", $default_ext="png") {
        //error_reporting(0);
        if ($toFile == "") {
            $toFile = $srcFile;
        }
        $info = "";
        $data = GetImageSize($srcFile, $info);
        /////////////////////////////////////////////////////////////////////////////
        // 判断图片是否正确
        $img_mime = array('image/gif', 'image/jpeg', 'image/png', 'image/bmp');
        if (!$data || !in_array($data['mime'], $img_mime)) return "image error!";
        /////////////////////////////////////////////////////////////////////////////
        switch ($data[2]) {
            case 1:
                if (!function_exists("imagecreatefromgif")) {
                    //echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>";
                    return false;
                }
                $im = ImageCreateFromGIF($srcFile);
                break;
            case 2:
                if (!function_exists("imagecreatefromjpeg")) {
                    //echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
                    return false;
                }
                $im = ImageCreateFromJpeg($srcFile);
                break;
            case 3:
                $im = ImageCreateFromPNG($srcFile);
                break;
        }
        $srcW = ImageSX($im);
        $srcH = ImageSY($im);
        $toWH = $toW / $toH;
        $srcWH = $srcW / $srcH;
        if ($toWH <= $srcWH) {
            $ftoW = $toW;
            $ftoH = $ftoW * ($srcH / $srcW);
        } else {
            $ftoH = $toH;
            $ftoW = $ftoH * ($srcW / $srcH);
        }
        if ($srcW > $toW || $srcH > $toH) {
            if (function_exists("imagecreatetruecolor")) {
                @$ni = ImageCreateTrueColor($ftoW, $ftoH);
                imagealphablending($ni,false);  // 不合并颜色,直接用$img图像颜色替换,包括透明色;
                imagesavealpha($ni,true);// 不要丢了$thumb图像的透明色;
                if ($ni) ImageCopyResampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
                else {
                    $ni = ImageCreate($ftoW, $ftoH);
                    ImageCopyResized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
                }
            } else {
                $ni = ImageCreate($ftoW, $ftoH);
                ImageCopyResized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
            }
            if($default_ext == "jpg") {
                ImageJpeg($ni, $toFile);
            } else {
                ImagePNG($ni, $toFile);
            }

            ImageDestroy($ni);
        } else {
            // 如果原图比缩略图小,直接复制过去
            copy($srcFile, $toFile);
            ImageDestroy($im);
            return true;
        }
        ImageDestroy($im);
        return true;
    }

路灯

这个人很懒,什么都没留下

文章评论