zoukankan      html  css  js  c++  java
  • phpPHP创建创建jpg格式图片以及压缩图片(转)

     

     

    其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上找到了:

    http://www.oschina.net/question/814955_115750

    然后,图片压缩后显示出来了,但是要保存,所以还需要进行处理,然后看到了另外一篇文章:

    http://www.nowamagic.net/php/php_CreateJpg.php

    这里就将这篇文章转载回来了,具体原文如下:

     

    imagejpeg() 从 image 图像以 filename 为文件名创建一个 JPEG 图像。image 参数是 imagecreatetruecolor() 函数的返回值。

    1 bool imagejpeg ( resource image [, string filename [, int quality]] )

    filename 参数为可选,如果省略,则原始图像流将被直接输出。要省略 filename 参数而提供 quality 参数,使用空字符串('')。通过 header() 发送 Content-type: image/jpeg 可以使 PHP 脚本直接输出 JPEG 图像。JPEG 支持仅在 PHP 与 GD-1.8 或更高版本一起编译时可用。

    quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约 75)。

    程序示例

    1 <?
    2 Header("Content-type: image/jpeg");
    3 $im = imagecreatefromjpeg("./test.jpg");
    4 Imagejpeg($im,'',20);
    5 ImageDestroy($im);
    6 ?>

    假如有如下需求,用户上传的图片,我需要将它的图片质量降低到70%左右,可以缺省 filename 参数,然后指定原始图片与quality的值即可。当然你可以指定第二个参数作为新生成图片的文件名。

    01 <?php
    02 // 图片的质量参数
    03 $quality = 70; 
    04  
    05 if(isset($_FILES['watermarkee']) && $_FILES['watermarkee']['error']==0)
    06 {
    07     $original $_FILES['watermarkee']['tmp_name'];
    08     // 创建原始图片
    09     $resultImage = imagecreatefromjpeg($original);
    10  
    11     // 定义生成的图片的名字
    12     $target_name date('YmdHis').'_'.preg_replace('`[^a-z0-9-_.]`i','',$_FILES['watermarkee']['name']);
    13     $target = dirname(__FILE__).'/results/'.$target_name;
    14  
    15     // 生成新图片
    16     imagejpeg($resultImage$target$quality);
    17 }
    18 ?>

    这里谈一下 imagecreatefromjpeg() 函数。

    表单上传至服务器后,会产生$_FILES数组。如果数据有效。

    01 $_FILES['userfile']['name']
    02 // 客户端机器文件的原名称
    03  
    04 $_FILES['userfile']['type']
    05 // 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值
    06  
    07 $_FILES['userfile']['size']
    08 // 已上传文件的大小,单位为字节
    09  
    10 $_FILES['userfile']['tmp_name']
    11 // 文件被上传后在服务端储存的临时文件名
    12  
    13 $_FILES['userfile']['error']
    14  
    15 $_FILES['userfile']['tmp_name']
    16 // 临时文件已经可以作为有效的jpeg文件进行处理了。但最终通过image一系列函数处理的图像,最终的存储是要移动至目标目录的
    17  
    18 imagecreatefromjpeg($_FILES['userfile']['tmp_name'])    // 即可生成有效的image资源

    一段上传jpg图片,服务器端保存原图片和缩略图,并显示缩略图的方法。

    01 <?php
    02 // 保存文件缩略图
    03 function thumbnail($filename$newWidth$imgName)
    04 {
    05     list ( $width$height ) = getimagesize $filename );
    06     $newHeight $height / ($width $newWidth);
    07     $newImage = imagecreatetruecolor ( $newWidth$newHeight );
    08     $oldImage = imagecreatefromjpeg ( $filename );
    09     imagecopyresampled ( $newImage$oldImage, 0, 0, 0, 0, $newWidth$newHeight$width,$height );
    10          
    11     //输出jpeg图像
    12     header ( 'Content-type: image/jpeg' );
    13     imagejpeg ( $newImage$imgName, 99 );
    14     //imagedestroy ( $filename );  //若不用于显示则不用该方法。
    15 }
    16      
    17 //jpg文件上传并显示缩略图
    18 function uploadImageFiles()
    19 {
    20     $uploaddir getcwd () . "/uploads/";
    21     $uploadfile $uploaddir $_FILES ["upfile"] ["name"];
    22     //global $uploadfile;
    23     if ($_FILES ["upfile"] ["size"] > 5000000)
    24     {
    25         echo "<script language='javascript'>alert('上传文件不得大于5M!');history.go(-1)</script>";
    26     }
    27     else
    28     {
    29         if ($_FILES ["upfile"] ["type"] != "image/gif" and $_FILES ["upfile"] ["type"] !="image/pjpeg")
    30         {
    31             echo "<script language='javascript'>alert('上传文件类型必须是gif/jpeg/jpg格式!');history.go(-1)</script>";
    32         }
    33         else
    34         {
    35             $this->thumbnail ( $_FILES["upfile"]["tmp_name"], 100, $uploaddir "miniImg/" .$_FILES ["upfile"]["name"] );
    36             if (move_uploaded_file ( $_FILES ["upfile"] ["tmp_name"], $uploadfile ))
    37             {
    38                 echo "文件上传成功。";
    39                 echo "<img src="uploads/miniImg/" $_FILES ["upfile"] ["name"] . ""/>";
    40             }
    41         }
    42     }
    43 }
    44 ?>

    其实经过以上的学习后,我单独做了一个图片压缩的没什么问题,但是整合到我用的系统中时始终不行,为此还特地在OSC上发了帖子(依然是关于“PHP图片压缩的返回地址”问题):

    http://www.oschina.net/question/59519_142458

    最后也解决了,实际上很简单,还是没有好好读PHP的关于这个图片处理的手册,最后掉了一个imagedestory函数。

    p.s. csdn这个功能不错,我直接覆盖上面的这篇文章,代码的格式什么的都一起过来了,很爽有木有

  • 相关阅读:
    UNIX环境高级编程——信号(API)
    UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数
    UNIX环境高级编程——信号基本概述和signal函数
    UNIX环境高级编程——进程关系
    UNIX环境高级编程——system函数
    [Training Video
    [Selenium]重写拖拽dragWidgetToElementContainner()
    [Selenium]Grid模式下运行时打印出当前Case在哪台node机器上运行
    [Java]通过java获取计算机名
    [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败
  • 原文地址:https://www.cnblogs.com/sanwenyu/p/4573100.html
Copyright © 2011-2022 走看看