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

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这个功能不错,我直接覆盖上面的这篇文章,代码的格式什么的都一起过来了,很爽有木有

phpPHP创建创建jpg格式图片以及压缩图片(转)的更多相关文章

  1. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  2. iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片

    图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...

  3. iOS 图片大小压缩 图片尺寸处理

    图片的压缩其实是俩概念,1.是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降,2.是 “缩” 文件的尺寸变小,也就是像素数减少.长宽尺寸变小,文件体积同样会减小. 这个 UII ...

  4. 异步上传&预览图片-不压缩图片

    本例使用ajaxFileUpload异步上传预览图片 <bean id="multipartResolver" class="org.springframework ...

  5. JAVA压缩图片 服务器端压缩图片 原创

    @RequestMapping(value = "/uploadImage", method = RequestMethod.POST) @ResponseBody public ...

  6. 2019-3-21-win10-uwp-修改图片质量压缩图片

    title author date CreateTime categories win10 uwp 修改图片质量压缩图片 lindexi 2019-03-21 15:29:20 +0800 2019- ...

  7. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  8. ios获取相册图片 压缩图片

    从摄像头/相册获取图片 刚刚在上面的知识中提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用.在这里,我们需要过UIImagePickerController类来和用户交互. ...

  9. [Xcode 实际操作]七、文件与数据-(3)创建文本文件、属性列表文件、图片文件

    目录:[Swift]Xcode实际操作 本文将演示如何创建各种类型的文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class V ...

随机推荐

  1. group by与distinct效率分析及优化措施

    如何使用group by进行去重 因为mysql的distinct在结果集中,全部不同,才可以去重.所以,当我们进行去重处理的时候,需要单独对某列进行去重,可以使用group by子句进行分组去重se ...

  2. BUG_ON&&WARN_ON&BUILD_BUG_ON

    转载:http://wenx05124561.blog.163.com/blog/static/124000805201223112811490/ 一.BUG_ON Linux中BUG_ON,WARN ...

  3. 从C的声明符到Objective-C的Blocks语法

    原文链接:http://nilsou.com/blog/2013/08/21/objective-c-blocks-syntax/ 在这个post中,我先以C简单和内置复杂的声明开始,直到我们开始接触 ...

  4. 【GLSL教程】(八)纹理贴图 【转】

    http://blog.csdn.net/racehorse/article/details/6664717 简单的纹理贴图(Simple Texture) 为了在GLSL中应用纹理,我们需要访问每个 ...

  5. SVN merge 三种方式

    1.Merge a range of revisions 2.Reintegrate a branch 3.Merge two different trees ———————————————————— ...

  6. 通达OA 小飞鱼工作流在线培训教程(七)工作流应用的意义及基础设置(图文)

    这个课程计划已经有一段时间了,经过这段时间结合实际网络教学又进行了一些总结,这里将陆续为大家呈现相关的工作流设计开发课程. 同一时候线上的视频教学课程也将立即上线,欢迎朋友们的关注. 首先介绍一些工作 ...

  7. nginx 按天生成日志

    nginx日志access.log error.log按天生成存储,定时删除日志 logrotate https://linux.cn/article-4126-1.html http://blog. ...

  8. iOS常用的加密方式

    MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...

  9. redmine 自己定义字段mysql表结构

    redmine能够创建自己定义字段,我经经常使用它来满足不同的管理需求.如今来解读一下.看看这些自己定义字段是怎样存在mysql表中的. 表issues 用来存放issue的标准字段. mysql&g ...

  10. C++成员不通过对象调用的直接调用写法

    C++成员不通过对象调用(.或->方式)的另类(C式)调用写法 #include <iostream> using namespace std; /* 我们知道,成员函数和普通函数最 ...