其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上找到了:
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)。
程序示例
2 | 
Header("Content-type: image/jpeg"); | 
 
3 | 
$im = imagecreatefromjpeg("./test.jpg"); | 
 
 
 
假如有如下需求,用户上传的图片,我需要将它的图片质量降低到70%左右,可以缺省 filename 参数,然后指定原始图片与quality的值即可。当然你可以指定第二个参数作为新生成图片的文件名。
05 | 
if(isset($_FILES[‘watermarkee‘]) && $_FILES[‘watermarkee‘][‘error‘]==0)\ | 
 
07 | 
    $original = $_FILES[‘watermarkee‘][‘tmp_name‘]; | 
 
09 | 
    $resultImage = imagecreatefromjpeg($original); | 
 
12 | 
    $target_name = date(‘YmdHis‘).‘_‘.preg_replace(‘`[^a-z0-9-_.]`i‘,‘‘,$_FILES[‘watermarkee‘][‘name‘]); | 
 
13 | 
    $target = dirname(__FILE__).‘/results/‘.$target_name; | 
 
16 | 
    imagejpeg($resultImage, $target, $quality); | 
 
 
 
这里谈一下 imagecreatefromjpeg() 函数。
表单上传至服务器后,会产生$_FILES数组。如果数据有效。
01 | 
$_FILES[‘userfile‘][‘name‘] | 
 
04 | 
$_FILES[‘userfile‘][‘type‘] | 
 
07 | 
$_FILES[‘userfile‘][‘size‘] | 
 
10 | 
$_FILES[‘userfile‘][‘tmp_name‘] | 
 
13 | 
$_FILES[‘userfile‘][‘error‘] | 
 
15 | 
$_FILES[‘userfile‘][‘tmp_name‘] | 
 
18 | 
imagecreatefromjpeg($_FILES[‘userfile‘][‘tmp_name‘])     | 
 
 
 
一段上传jpg图片,服务器端保存原图片和缩略图,并显示缩略图的方法。
03 | 
function thumbnail($filename, $newWidth, $imgName) | 
 
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 ); | 
 
12 | 
    header ( ‘Content-type: image/jpeg‘ ); | 
 
13 | 
    imagejpeg ( $newImage, $imgName, 99 ); | 
 
18 | 
function uploadImageFiles() | 
 
20 | 
    $uploaddir = getcwd () . "/uploads/"; | 
 
21 | 
    $uploadfile = $uploaddir . $_FILES ["upfile"] ["name"]; | 
 
23 | 
    if ($_FILES ["upfile"] ["size"] > 5000000) | 
 
25 | 
        echo "<script language=‘javascript‘>alert(‘上传文件不得大于5M!‘);history.go(-1)</script>"; | 
 
29 | 
        if ($_FILES ["upfile"] ["type"] != "image/gif" and $_FILES ["upfile"] ["type"] !="image/pjpeg") | 
 
31 | 
            echo "<script language=‘javascript‘>alert(‘上传文件类型必须是gif/jpeg/jpg格式!‘);history.go(-1)</script>"; | 
 
35 | 
            $this->thumbnail ( $_FILES["upfile"]["tmp_name"], 100, $uploaddir . "miniImg/" .$_FILES ["upfile"]["name"] ); | 
 
36 | 
            if (move_uploaded_file ( $_FILES ["upfile"] ["tmp_name"], $uploadfile )) | 
 
39 | 
                echo "<img src=\"uploads/miniImg/" . $_FILES ["upfile"] ["name"] . "\"/>"; | 
 
 
 
其实经过以上的学习后,我单独做了一个图片压缩的没什么问题,但是整合到我用的系统中时始终不行,为此还特地在OSC上发了帖子(依然是关于“PHP图片压缩的返回地址”问题):
http://www.oschina.net/question/59519_142458
最后也解决了,实际上很简单,还是没有好好读PHP的关于这个图片处理的手册,最后掉了一个imagedestory函数。
p.s. csdn这个功能不错,我直接覆盖上面的这篇文章,代码的格式什么的都一起过来了,很爽有木有