zoukankan      html  css  js  c++  java
  • PHP实现图片压缩的两则实例(转)

    本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下:

    实例1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    /**
    * desription 压缩图片
    * @param sting $imgsrc 图片路径
    * @param string $imgdst 压缩后保存路径
    */
    function image_png_size_add($imgsrc,$imgdst){
    list($width,$height,$type)=getimagesize($imgsrc);
    $new_width = ($width>600?600:$width)*0.9;
    $new_height =($height>600?600:$height)*0.9;
    switch($type){
    case 1:
    $giftype=check_gifcartoon($imgsrc);
    if($giftype){
    header('Content-Type:image/gif');
    $image_wp=imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromgif($imgsrc);
    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    imagejpeg($image_wp, $imgdst,75);
    imagedestroy($image_wp);
    }
    break;
    case 2:
    header('Content-Type:image/jpeg');
    $image_wp=imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($imgsrc);
    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    imagejpeg($image_wp, $imgdst,75);
    imagedestroy($image_wp);
    break;
    case 3:
    header('Content-Type:image/png');
    $image_wp=imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefrompng($imgsrc);
    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    imagejpeg($image_wp, $imgdst,75);
    imagedestroy($image_wp);
    break;
    }
    }
    /**
    * desription 判断是否gif动画
    * @param sting $image_file图片路径
    * @return boolean t 是 f 否
    */
    function check_gifcartoon($image_file){
    $fp = fopen($image_file,'rb');
    $image_head = fread($fp,1024);
    fclose($fp);
    return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true;
    }
    ?>

    实例2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <?php
    /*
    ----------------------------------------------------------------------
    函数:调整图片尺寸或生成缩略图
    返回:True/False
    参数:
    $Image 需要调整的图片(含路径)
    $Dw=450 调整时最大宽度;缩略图时的绝对宽度
    $Dh=450 调整时最大高度;缩略图时的绝对高度
    $Type=1 1,调整尺寸; 2,生成缩略图
    $path='img/';//路径
    $phtypes=array(
    'img/gif',
    'img/jpg',
    'img/jpeg',
    'img/bmp',
    'img/pjpeg',
    'img/x-png'
    );
    Function Img($Image,$Dw=450,$Dh=450,$Type=1){
    IF(!File_Exists($Image)){
    Return False;
    }
    //如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值
    IF($Type!=1){
    Copy($Image,Str_Replace(".","_x.",$Image));
    $Image=Str_Replace(".","_x.",$Image);
    }
    //取得文件的类型,根据不同的类型建立不同的对象
    $ImgInfo=GetImageSize($Image);
    Switch($ImgInfo[2]){
    Case 1:
    $Img = @ImageCreateFromGIF($Image);
    Break;
    Case 2:
    $Img = @ImageCreateFromJPEG($Image);
    Break;
    Case 3:
    $Img = @ImageCreateFromPNG($Image);
    Break;
    }
    //如果对象没有创建成功,则说明非图片文件
    IF(Empty($Img)){
    //如果是生成缩略图的时候出错,则需要删掉已经复制的文件
    IF($Type!=1){Unlink($Image);}
    Return False;
    }
    //如果是执行调整尺寸操作则
    IF($Type==1){
    $w=ImagesX($Img);
    $h=ImagesY($Img);
    $width = $w;
    $height = $h;
    IF($width>$Dw){
    $Par=$Dw/$width;
    $width=$Dw;
    $height=$height*$Par;
    IF($height>$Dh){
    $Par=$Dh/$height;
    $height=$Dh;
    $width=$width*$Par;
    }
    }ElseIF($height>$Dh){
    $Par=$Dh/$height;
    $height=$Dh;
    $width=$width*$Par;
    IF($width>$Dw){
    $Par=$Dw/$width;
    $width=$Dw;
    $height=$height*$Par;
    }
    }Else{
    $width=$width;
    $height=$height;
    }
    $nImg = ImageCreateTrueColor($width,$height); //新建一个真彩色画布
    ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);//重采样拷贝部分图像并调整大小
    ImageJpeg ($nImg,$Image); //以JPEG格式将图像输出到浏览器或文件
    Return True;
    //如果是执行生成缩略图操作则
    }Else{
    $w=ImagesX($Img);
    $h=ImagesY($Img);
    $width = $w;
    $height = $h;
    $nImg = ImageCreateTrueColor($Dw,$Dh);
    IF($h/$w>$Dh/$Dw){ //高比较大
    $width=$Dw;
    $height=$h*$Dw/$w;
    $IntNH=$height-$Dh;
    ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);
    }Else{ //宽比较大
    $height=$Dh;
    $width=$w*$Dh/$h;
    $IntNW=$width-$Dw;
    ImageCopyReSampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h);
    }
    ImageJpeg ($nImg,$Image);
    Return True;
    }
    }
    ?>
    <html><body>
    <form method="post" enctype="multipart/form-data" name="form1">
    <table>
    <tr><td>上传图片</td></tr>
    <tr><td><input type="file" name="photo" size="20" /></td></tr>
    <tr><td><input type="submit" value="上传"/></td></tr>
    </table>
    允许上传的文件类型为:<?=implode(', ',$phtypes)?></form>
    <?php
    if($_SERVER['REQUEST_METHOD']=='POST'){
    if (!is_uploaded_file($_FILES["photo"][tmp_name])){
    echo "图片不存在";
    exit();
    }
    if(!is_dir('img')){//路径若不存在则创建
    mkdir('img');
    }
    $upfile=$_FILES["photo"];
    $pinfo=pathinfo($upfile["name"]);
    $name=$pinfo['basename'];//文件名
    $tmp_name=$upfile["tmp_name"];
    $file_type=$pinfo['extension'];//获得文件类型
    $showphpath=$path.$name;
     
    if(in_array($upfile["type"],$phtypes)){
    echo "文件类型不符!";
    exit();
    }
    if(move_uploaded_file($tmp_name,$path.$name)){
    echo "成功!";
    Img($showphpath,100,800,2);
    }
    echo "<img src="".$showphpath."" />";
    }
    ?>
    </body>
    </html>

    http://www.jb51.net/article/52380.htm

  • 相关阅读:
    使用java的wsimport.exe生成wsdl的客户端代码【转】
    css 动画【转】
    如何让javascript base64加密后不含+/=
    UEditor js动态创建和textarea中渲染【原】
    在js或jquery中动态添加js脚本【转】
    利用spring的MultipartFile实现文件上传【原】
    hibernate状态转换关系图【原】
    ssh框架里拦截器的权限验证基本思路【转】
    JAVA中三种URL连接方法
    程序出错问题总结
  • 原文地址:https://www.cnblogs.com/xihong2014/p/5336176.html
Copyright © 2011-2022 走看看