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

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. Android Spinner In Toolbar

    As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...

  2. 在OpenCV中实现matlab中的im2double功能

    最近在把matlab的代码转化到VS2010上. matlab中采用im2double将读入的图像转换为double型,在OpenCV中就需要对图像进行深度的转换. 读入一幅灰度图像,深度为1(8U) ...

  3. Cookie常用方法封装Utils

    1.查询某个指定的cookie package com.sun.etalk.cookie; import javax.servlet.http.Cookie; public class CookieU ...

  4. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  5. dubbo服务接口开发者必备调试利器,你值得拥有

    dubbo服务接口开发者必备调试利器,你值得拥有 学习了:https://my.oschina.net/vboxtop/blog/1524290 找到了:http://www.vbox.top/?fr ...

  6. JAVA Eclipse的Android文件结构是怎么样的

    默认res目录下面存放了界面需要的布局和图片文件,之所以图片分为hdpi,ldpi,mdpi这些,是为了不同的设备准备的(高/中/低分辨率的图片)   Bin目录类似于VS的debug或者releas ...

  7. UNP学习笔记(第十四章 高级I/O函数)

    本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...

  8. jquery插件范例代码

    // 创建一个闭包 (function($) { // 插件的定义 $.fn.hilight = function(options) { debug(this); // build main opti ...

  9. RSA非对称算法实现HTTP密码加密传输

    目前一般帐号系统,都是https来传输账户性息,申请一个https证书也不贵.但是网站的其它功能并不需要走https协议,https和http混布比较麻烦,所以决定先实现一个http协议传输RSA非对 ...

  10. win10 1709正式版iso镜像下载|windows10 1709秋季创意者更新官方下载地址

    win10 1709正式版iso镜像下载|windows10 1709秋季创意者更新官方下载地址 发布时间:2017-10-18 14:27发布者:系统城-xtcjh浏览数:74458 win10 1 ...