• 技术文章 >后端开发 >php教程

    php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码_PHP

    2016-06-01 12:18:18原创383
    复制代码 代码如下:
    //上传文件类型列表
    $uptypes=array(
    'image/jpg',
    'image/jpeg',
    'image/png',
    'image/pjpeg',
    'image/gif',
    'image/bmp',
    'image/x-png'
    );
    $max_file_size = 200000; //上传文件大小限制, 单位BYTE
    $path_im = "prod_img/"; //生成大图保存文件夹路径
    $path_sim = "prod_simg/"; //缩略图保存文件夹路径
    $watermark = 1; //是否加水印(1为加水印,其他为不加水印);
    $watertype = 1; //水印类型(1为文字,2为图片)
    $waterstring = "[url=http://www.jy17.com/]http://www.jy17.com/[/url]"; //水印字符串
    $waterimg = "water.png"; //水印图片文件路径
    $waterclearly = 100; //水印透明度0-100,数字小透明高
    $imclearly = 100; //图片清晰度0-100,数字越大越清晰,文件尺寸越大
    $simclearly = 75; //缩略图清晰度0-100,数字越大越清晰,文件尺寸越大
    $smallmark = 1; //是否生成缩略图(1为加生成,其他为不);
    $dst_sw = 80; //定义缩略图宽度,高度我采用等比例缩放,所以只要比较宽度就可以了
    ?>

    上传文件:



    允许上传的文件类型为:

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
    if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
    //是否存在文件
    {
    echo "图片不存在!";
    exit;
    }
    $file = $_FILES["upfile"];
    if($max_file_size < $file["size"])
    //检查文件大小
    { $max_file_size = $max_file_size/1000;
    echo "文件太大,超过 ".$max_file_size." KB!";
    exit;
    }
    if(!in_array($file["type"],$uptypes))
    //检查文件类型
    {
    echo "文件类型不符!".$file["type"];
    exit;
    }
    if(!file_exists($path_im))
    //检查上传目录是否存在,不存在创建
    {
    mkdir($path_im);
    }
    if(!file_exists($path_sim))
    //检查缩略图目录是否存在,不存在创建
    {
    mkdir($path_sim);
    }
    $filename = $file["tmp_name"];
    $im_size = getimagesize($filename);
    $src_w = $im_size[0];
    $src_h = $im_size[1];
    $src_type = $im_size[2];
    $pinfo = pathinfo($file["name"]);
    $filetype = $pinfo['extension'];
    $all_path = $path_im.time().".".$filetype; //路径+文件名,目前以上传时间命名
    if (file_exists($all_path))
    {
    echo "同名文件已经存在了";
    exit;
    }
    if(!move_uploaded_file ($filename,$all_path))
    {
    echo "移动文件出错";
    exit;
    }
    $pinfo = pathinfo($all_path);
    $fname = $pinfo[basename];
    echo "已经成功上传
    文件名: ".$all_path."
    ";
    echo "宽度:".$src_w."px ";
    echo "长度:".$src_h."px ";
    echo "
    大小:".$file["size"]." bytes";
    switch($src_type)//判断源图片文件类型
    {
    case 1://gif
    $src_im = imagecreatefromgif($all_path);//从源图片文件取得图像
    break;
    case 2://jpg
    $src_im = imagecreatefromjpeg($all_path);
    break;
    case 3://png
    $src_im = imagecreatefrompng($all_path);
    break;
    //case 6:
    //$src_im=imagecreatefromwbmp($all_path);
    //break;
    default:
    die("不支持的文件类型");
    exit;
    }
    if($watermark == 1)
    {
    //$iinfo = getimagesize($all_path,$iinfo);
    $dst_im = imagecreatetruecolor($src_w,$src_h);
    //根据原图尺寸创建一个相同大小的真彩色位图
    $white = imagecolorallocate($dst_im,255,255,255);//白
    //给新图填充背景色
    $black = imagecolorallocate($dst_im,0,0,0);//黑
    $red = imagecolorallocate($dst_im,255,0,0);//红
    $orange = imagecolorallocate($dst_im,255,85,0);//橙
    imagefill($dst_im,0,0,$white);
    imagecopymerge($dst_im,$src_im,0,0,0,0,$src_w,$src_h,100);//原图图像写入新建真彩位图中
    //imagefilledrectangle($dst_im,1,$src_h-15,80,$src_h,$white);
    switch($watertype)
    {
    case 1: //加水印字符串
    imagestring($dst_im,5,5,$src_h-20,$waterstring,$orange);//文字水印,字体5号颜色橙色,位于背景图左下角
    break;
    case 2: //加水印图片
    $lim_size = getimagesize($waterimg); //取得水印图像尺寸,信息
    switch($lim_size[2]) //判断水印图片文件类型
    {
    case 1://gif
    $src_lim = imagecreatefromgif($waterimg); //取得水印图像
    break;
    case 2://jpg
    $src_lim = imagecreatefromjpeg($waterimg);
    break;
    case 3://png
    $src_lim = imagecreatefrompng($waterimg);
    break;
    //case 6:
    //$src_im=imagecreatefromwbmp($waterimg);
    //break;
    default:
    die("不支持的文件类型");
    exit;
    }
    $src_lw = ($src_w-$lim_size[0])/2; //水印位于背景图正中央width定位
    $src_lh = ($src_h-$lim_size[1])/2; //height定位
    imagecopymerge($dst_im,$src_lim,$src_lw,$src_lh,0,0,$lim_size[0],$lim_size[1],$waterclearly);// 合并两个图像,设置水印透明度$waterclearly
    imagedestroy($src_lim);
    break;
    }
    switch($src_type)
    {
    case 1:
    imagegif($dst_im,$all_path,$imclearly);//生成gif文件,图片清晰度0-100
    break;
    case 2:
    imagejpeg($dst_im,$all_path,$imclearly);//生成jpg文件,图片清晰度0-100
    break;
    case 3:
    imagepng($dst_im,$all_path,$imclearly);//生成png文件,图片清晰度0-100
    break;
    //case 6:
    //imagewbmp($dst_im,$all_path);
    break;
    }
    //释放缓存
    imagedestroy($dst_im);
    }
    if($smallmark == 1)
    {
    $sall_path = $path_sim.time().".".$filetype;
    if (file_exists($sall_path))
    {
    echo "同名文件已经存在了";
    exit;
    }
    if($src_w <= $dst_sw) // 原图尺寸 <= 缩略图尺寸
    {
    $dst_sim = imagecreatetruecolor($src_w,$src_h); //新建缩略图真彩位图
    imagecopymerge($dst_sim,$src_im,0,0,0,0,$src_w,$src_h,100); //原图图像写入新建真彩位图中
    }
    if($src_w > $dst_sw) // 原图尺寸 > 缩略图尺寸
    {
    $dst_sh = $dst_sw/$src_w*$src_h;
    $dst_sim = imagecreatetruecolor($dst_sw,$dst_sh); //新建缩略图真彩位图(等比例缩小原图尺寸)
    imagecopyresampled($dst_sim,$src_im,0,0,0,0,$dst_sw,$dst_sh,$src_w,$src_h); //原图图像写入新建真彩位图中
    }
    switch($src_type)
    {
    case 1:
    imagegif($dst_sim,$sall_path,$simclearly);//生成gif文件,图片清晰度0-100
    break;
    case 2:
    imagejpeg($dst_sim,$sall_path,$simclearly);//生成jpg文件,图片清晰度0-100
    break;
    case 3:
    imagepng($dst_sim,$sall_path,$simclearly);//生成png文件,图片清晰度0-100
    break;
    //case 6:
    //imagewbmp($dst_sim,$sall_path);
    break;
    }
    //释放缓存
    imagedestroy($dst_sim);
    }
    //释放缓存
    imagedestroy($src_im);
    }
    ?>

    php等比例生成缩略图函数2
    复制代码 代码如下:
    function reSizeImg($imgSrc, $resize_width, $resize_height, $isCut=false) {
    //图片的类型
    $type = substr ( strrchr ( $imgSrc, "." ), 1 );
    //初始化图象
    if ($type == "jpg") {
    $im = imagecreatefromjpeg ( $imgSrc );
    }
    if ($type == "gif") {
    $im = imagecreatefromgif ( $imgSrc );
    }
    if ($type == "png") {
    $im = imagecreatefrompng ( $imgSrc );
    }
    //目标图象地址
    $full_length = strlen ( $imgSrc );
    $type_length = strlen ( $type );
    $name_length = $full_length - $type_length;
    $name = substr ( $imgSrc, 0, $name_length - 1 );
    $dstimg = $name . "_s." . $type;
    $width = imagesx ( $im );
    $height = imagesy ( $im );
    //生成图象
    //改变后的图象的比例
    $resize_ratio = ($resize_width) / ($resize_height);
    //实际图象的比例
    $ratio = ($width) / ($height);
    if (($isCut) == 1) //裁图
    {
    if ($ratio >= $resize_ratio) //高度优先
    {
    $newimg = imagecreatetruecolor ( $resize_width, $resize_height );
    imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, (($height) * $resize_ratio), $height );
    ImageJpeg ( $newimg, $dstimg );
    }
    if ($ratio < $resize_ratio) //宽度优先
    {
    $newimg = imagecreatetruecolor ( $resize_width, $resize_height );
    imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, $width, (($width) / $resize_ratio) );
    ImageJpeg ( $newimg, $dstimg );
    }
    } else //不裁图
    {
    if ($ratio >= $resize_ratio) {
    $newimg = imagecreatetruecolor ( $resize_width, ($resize_width) / $ratio );
    imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, ($resize_width) / $ratio, $width, $height );
    ImageJpeg ( $newimg, $dstimg );
    }
    if ($ratio < $resize_ratio) {
    $newimg = imagecreatetruecolor ( ($resize_height) * $ratio, $resize_height );
    imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, ($resize_height) * $ratio, $resize_height, $width, $height );
    ImageJpeg ( $newimg, $dstimg );
    }
    }
    ImageDestroy ( $im );
    }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php gd2
    上一篇:PHP 全角转半角实现代码_PHP 下一篇:PHP 防恶意刷新实现代码_PHP
    Web大前端开发直播班

    相关文章推荐

    • 深入浅析PHP文件包含漏洞• PHP SQL 中文乱码解决方法• 想把php这条路走得深一点,请教有必要拿一个网络工程师的证吗• php,支付宝接口怎样用解决思路• 关于array_walk的有关问题
    1/1

    PHP中文网