资讯专栏INFORMATION COLUMN

PHP图片上传并处理类(伸缩and水印)

Michael_Lin / 2797人阅读

摘要:做了一个图片上传处理类,功能有图片的拉伸缩小以及加入水印。时间有点仓促整理花费了好多时间,各位大侠如果觉得还可以点个赞呗。不多说,直接上代码,注释不清晰的大侠们可以直接查的文档。

做了一个图片上传处理类,功能有图片的拉伸,缩小以及加入水印。时间有点仓促,整理花费了好多时间,各位大侠如果觉得还可以点个赞呗。不多说,直接上代码,注释不清晰的大侠们可以直接查PHP的文档。

原图

缩小图

放大图




    ZwelL图片上传程序
    



上传文件:

PHP代码如下

 123.jpeg [type] => image/jpeg
        //[tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpdsYVOn [error] => 0 [size] => 2890
        $file = $_FILES["upfile"];
        if ($this->max_file_size < $file["size"]) {
            return "文件太大!";
        }
        if (!in_array($file["type"], $this->file_types)) {
            return "文件类型不符!" . $file["type"];
        }
        if (!file_exists($this->destination_folder)) {
            mkdir($this->destination_folder);
        }
        $filename = $file["tmp_name"];
        //获得文件类型
        $p_info = pathinfo($file["name"]);
        $f_type = $p_info["extension"];
        $destination = $this->destination_folder . time() . "." . $f_type;
        if (file_exists($destination)) {
            return "同名文件已经存在了";
        }
        if (!move_uploaded_file($filename, $destination)) {
            return "移动文件出错";
        }
        //获得图片信息
        //Array ( [0] => 200 [1] => 200 [2] => 2 [3] => width="200" height="200" [bits] => 8 [channels] => 3 [mime] => image/jpeg )
        $image_info = getimagesize($destination);
        if ($this->is_water) {

            $this->waterMark($destination, $image_info);
        }
        switch ($image_info[2]) {
            case 2:
                $simage = imagecreatefromjpeg($destination);//创建新图像
                $this->resizeImage($simage, $this->resize_width, $this->resize_height, $destination, "jpeg");
                break;
            case 3:
                $simage = imagecreatefrompng($destination);
                $this->resizeImage($simage, $this->resize_width, $this->resize_height, $destination, "png");
                break;
            case 6:
                $simage = imagecreatefromwbmp($destination);
                $this->resizeImage($simage, $this->resize_width, $this->resize_height, $destination, "wbmp");
                break;
        }
//        $p_info = pathinfo($destination);
//        $f_name = $p_info["basename"];
//        $image_size = getimagesize($filename);
//        echo " 文件名:" . $this->destination_folder . $f_name . "
"; // echo " 宽度:" . $image_size[0]; // echo " 长度:" . $image_size[1]; // echo "
大小:" . $file["size"] . " bytes"; return $destination; } private function waterMark($destination, $image_size) { $iinfo = getimagesize($destination, $iinfo); $nimage = imagecreatetruecolor($image_size[0], $image_size[1]); $white = imagecolorallocate($nimage, 255, 255, 255); $black = imagecolorallocate($nimage, 0, 0, 0); imagefill($nimage, 0, 0, $white); switch ($iinfo[2]) { case 1: $simage = imagecreatefromgif($destination); break; case 2: $simage = imagecreatefromjpeg($destination); break; case 3: $simage = imagecreatefrompng($destination); break; case 6: $simage = imagecreatefromwbmp($destination); break; default: die("不支持的文件类型"); } imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]); imagefilledrectangle($nimage, 1, $image_size[1] - 15, 80, $image_size[1], $white); switch ($this->water_type) { case 1: //加水印字符串 imagestring($nimage, 2, 3, $image_size[1] - 15, $this->water_string, $black); break; case 2: //加水印图片 $simage1 = imagecreatefromgif("xplore.gif"); imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15); imagedestroy($simage1); break; } switch ($iinfo[2]) { case 1: imagejpeg($nimage, $destination); break; case 2: imagejpeg($nimage, $destination); break; case 3: imagepng($nimage, $destination); break; case 6: imagewbmp($nimage, $destination); //imagejpeg($nimage, $destination); break; } //覆盖原上传文件 imagedestroy($nimage); imagedestroy($simage); } private function resizeImage($im, $max_width, $max_height, $name, $file_type) { $pic_width = imagesx($im);//源图像宽度 $pic_height = imagesy($im);//源图像高度 $width_tag = false; $height_tag = false; $width_ratio = 0; $height_ratio = 0; $ratio = 0; if (($max_width && $pic_width > $max_width) || ($max_height && $pic_height > $max_height)) { if ($max_width && $pic_width > $max_width) { $width_ratio = $max_width / $pic_width; $width_tag = true; } if ($max_height && $pic_height > $max_height) { $height_ratio = $max_height / $pic_height; $height_tag = true; } if ($width_tag && $height_tag) { if ($width_ratio < $height_ratio) $ratio = $width_ratio; else $ratio = $height_ratio; } if ($width_tag && !$height_tag) { $ratio = $width_ratio; } if ($height_tag && !$width_tag) { $ratio = $height_ratio; } $new_width = $pic_width * $ratio; $new_height = $pic_height * $ratio; if (function_exists("imagecopyresampled")) { $new_im = imagecreatetruecolor($new_width, $new_height);//创建一个空图片资源 imagecopyresampled($new_im, $im, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height);//等比缩放 } else { $new_im = imagecreate($new_width, $new_height);//创建一个空图片资源 imagecopyresized($new_im, $im, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height); } switch ($file_type) { case "jpeg": imagejpeg($new_im, $name); break; case "png": imagepng($new_im, $name); break; case "wbmp": imagewbmp($new_im, $name); break; } imagedestroy($new_im); } else { if (function_exists("imagecopyresampled")) { $new_im = imagecreatetruecolor($max_width, $max_height);//创建一个空图片资源 imagecopyresampled($new_im, $im, 0, 0, 0, 0, $max_width, $max_height, $pic_width, $pic_height);//等比缩放 echo 1111; } else { $new_im = imagecreate($max_width, $max_width);//创建一个空图片资源 imagecopyresized($new_im, $im, 0, 0, 0, 0, $max_width, $max_height, $pic_width, $pic_height); } switch ($file_type) { case "jpeg": imagejpeg($new_im, $name); break; case "png": imagepng($new_im, $name); break; case "wbmp": imagewbmp($new_im, $name); break; } imagedestroy($new_im); } } } $f = new FileUploadUtil(); $destination = $f->fileUpload(); $image_size = getimagesize($destination); echo " 文件名:" . $destination . "
"; echo " 宽度:" . $image_size[0]; echo " 长度:" . $image_size[1]; ?>

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22899.html

相关文章

  • php图片添加文字或图片水印实现代码(二种加水印方法)

    摘要:有时上传图片时,需要给图片添加水印,水印一般为文字或图片水印,下面就来看看两种添加方法。拷贝并合并图像的一部分更多库函数用法,请查手册相关文章实现图片上传时添加文字和图片水印 有时上传图片时,需要给图片添加水印,水印一般为文字或图片logo水印,下面就来看看两种添加方法。 一、文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件。效果图如...

    CoderStudy 评论0 收藏0
  • 慕课网_《Java实现图片水印》学习总结

    摘要:时间年月日星期五说明本文部分内容均来自慕课网。慕课网教学源码无学习源码第一章课程简介引言通过一个项目案例的讲解,如何在应用中实现图片水印的添加。 时间:2017年07月21日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程简介 1-1 引言 通过一...

    levius 评论0 收藏0
  • Yii 使用intervention/image拓展实现图像处理

    摘要:一安装拓展二上传文件为上传表单的名为上传表单的名并将上传的图片压缩成同时实现单图上传和多图上传多图上传单图上传三添加水印添加文字水印添加文字水印主要使用到方法方法参数说明可选定义第一个字符的基点。默认值可选定义第一个字符的基点。 一:安装intervention/image拓展 composer require intervention/image 二:上传文件 Interventi...

    leoperfect 评论0 收藏0
  • 基于阿里云Serverless架构下函数计算的最新应用场景详解(一)

    摘要:如果使用阿里云函数计算,您将高峰期每小时的访问日志,或者低谷期每小时的访问日志交给一个计算函数处理,并将处理结果存到中。下面结合阿里云的函数计算产品来讲解各个应用场景中架构以及如何解决的场景中的痛点。 摘要: Serverless概念是近年来特别火的一个技术概念,基于这种架构能构建出很多应用场景,适合各行各业,只要对轻计算、高弹性、无状态等场景有诉求的用户都可以通过本文来普及一些基础概...

    Eidesen 评论0 收藏0
  • 拍照党福利驾到 华为云微认证教你实现图片压缩和水印添加

    摘要:拍照党福利驾到华为云微认证教你实现图片压缩和水印添加在手机拍照成为日常的今天,用照片记录生活已成为人们的一种习惯。华为云微认证将总共送出个免费机会,奖项公布时间月日。 拍照党福利驾到 华为云微认证教你实现图片压缩和水印添加 在手机拍照成为日常的今天,用照片记录生活已成为人们的一种习惯。拍照容易处理难,面对手机相册中大量的照片,你是否也苦恼过?删,舍不得;上传,会不会被盗图?能否发出足够...

    MadPecker 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<